Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Arbeitszeiten einhalten

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Arbeitszeiten einhalten

    This topic has been deleted. Only users with topic management privileges can see it.
    • ldittmar
      ldittmar Developer last edited by

      Hallo Leute. Bin schon ewig im Homeoffice und vergesse immer wieder meine Zeiten zu "stechen". Ich habe jetzt eine Zigbee RGB Lampe die rot leuchtet wenn ich nicht arbeite und grün, wenn ich gestochen habe. Ich würde jetzt gerne haben, dass die Arbeitszeit gezählt wird und nach 8 Stunden die Lampe von grün auf blau und nach 9:45 Stunden auf gelb springt. Die Pausen müssen natürlich abgezogen werden. Wie mache ich das am besten? Hat jemand eine Idee? Ich dachte vielleicht die Zeiten in einem Array zu packen und jede Minute zu schauen ob die Zeiten erreicht worden sind. Hat jemand eine andere Idee?

      G OliverIO 2 Replies Last reply Reply Quote 0
      • G
        guergen @ldittmar last edited by guergen

        @ldittmar Mal so ins "blaue" gebastelt...:
        7f69935a-3a5d-4419-8bad-4bf108d09e89-grafik.png
        Die Pausen sind natürlich noch nicht berücksichtigt, aber das ist ja nicht ganz so schwer, entweder die Zeiten anpassen, oder ausstempeln....

        1 Reply Last reply Reply Quote 0
        • OliverIO
          OliverIO @ldittmar last edited by

          @ldittmar

          ich würde da eher den ereignisgesteuerten weg fahren.
          du hast leider nicht erzählt wie du "stichst"

          Also bei Arbeitsbeginn (einstechen) zeichnest du die beginnzeit auf und rechnest dir die Zeit bis zum nächsten Ereignis aus, stellst einen javascript timer für diese Zeit, Beim erreichen der Zeit wird dann die entsprechende Aktion ausgeführt, gelb rot grün blau. wenn du die Arbeitszeit unterbrichst (also ausstechen) unterbrichst du den Timer und berechnest ihn bein nächsten einstechen wieder neu.
          Da der Timer nur im Speicher existiert und bei Neustart des Skripts verloren ist, musst du dir die Zeiten merken, so das du bei Neustart wieder neu berechnen kannst.

          beim ein und ausstechen musst du dir regeln überlegen, wie das skript arbeitsbegin, pause anfang, pause ende und arbeitsende unterscheiden kannst.

          wenn du nur einen taster hast wird es etwas aufwändiger wie wenn du mehrere hast.
          bei den unterschiedlichen ereignissen musst du verschiedene dinge tun.
          arbeitsende: aufgezeichnete zeiten des tages vergessen
          arbeitsbegin: zeit aufzeichnen
          pausen anfang: zeit für arbeitsende untertägig eintragen
          pause ende: zeit für arbeitsbeginn untertägig eintragen

          dein datenpunkt könnte folgende Struktur haben (Am Ende des Tages)
          [
          {beginn:"09:00",ende:"10:11"},
          {beginn:"10:35",ende:"12:42"},
          {beginn:"13:50",ende:"17:15"}
          ]

          Untertägig kann das Skript an der Befüllung erkennen, wo man gerade ist.
          Fehlt zb im letzten Element des Arrays die ende Eigenschaft, dann war man bei Neustart gerade bei der Arbeit und kann den Timer für das geplante Arbeitsende neu berechnen.

          ldittmar 1 Reply Last reply Reply Quote 0
          • ldittmar
            ldittmar Developer @OliverIO last edited by

            @oliverio Das Stechen wird durch Tastendruck getriggert und das Feierabend durch Doppelklick. (Arbeitstechnisch müssen wir und online an- und abmelden)

            Also: Nehmen wir an, ich beginne um 9:00. Also setze ich mein Trigger auf 17 Uhr, zur Umstellung auf blau und noch ein Trigger auf 18:45 zur Umstellung auf gelb. Wenn ich in die Pause gehe, klicke ich nochmal auf die Taste, dann wird das Licht rot, ich merke mir die Zeit 12:00 und beende beide Trigger. Wenn ich dann zurück bin z.B. 13:00 berechne ich beide Trigger neu 18:00 und 19:45.

            Habe ich es richtig verstanden? Klingt Ressourcensparender als jede Minute zu schauen.

            OliverIO 1 Reply Last reply Reply Quote 0
            • OliverIO
              OliverIO @ldittmar last edited by

              @ldittmar
              ja genau.
              wobei du den 2.trigger ja erst starten musst, wenn der erste erreicht ist.
              dann läuft immer nur ein trigger

              1 Reply Last reply Reply Quote 0
              • First post
                Last post

              Support us

              ioBroker
              Community Adapters
              Donate

              423
              Online

              31.9k
              Users

              80.2k
              Topics

              1.3m
              Posts

              3
              5
              307
              Loading More Posts
              • Oldest to Newest
              • Newest to Oldest
              • Most Votes
              Reply
              • Reply as topic
              Log in to reply
              Community
              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
              The ioBroker Community 2014-2023
              logo