NEWS
Arbeitszeiten einhalten
-
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?
-
@ldittmar Mal so ins "blaue" gebastelt...:
Die Pausen sind natürlich noch nicht berücksichtigt, aber das ist ja nicht ganz so schwer, entweder die Zeiten anpassen, oder ausstempeln.... -
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 eintragendein 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. -
@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.
-
@ldittmar
ja genau.
wobei du den 2.trigger ja erst starten musst, wenn der erste erreicht ist.
dann läuft immer nur ein trigger