Arbeitszeit ermitteln
-
- Beiträge: 28
- Registriert: 3. Mär 2021 20:01
Arbeitszeit ermitteln
Hallo Zusammen,
ich nutze Openhab 3 und moechte gern eine Übersicht meiner Arbeitszeit schaffen.
Dafuer dachte ich an die Onlinezeiten meines Laptops.
Diese greife ich schon ueber das Network Binding und PingDevice ab. Funktioniert super, sodass ich auch eine Telegramm Nachricht bekommen, wenn der Laptop online, bzw. offline geht.
Allerdings fehlt mir nun die passende Idee, wie ich ermitteln kann, dass der Laptop zum Beispiel 40h in der letzten Woche online (=Arbeitszeit) war.
Hat jemand von euch eine Idee?
Ich danke Euch schonmal im Vorraus.
ich nutze Openhab 3 und moechte gern eine Übersicht meiner Arbeitszeit schaffen.
Dafuer dachte ich an die Onlinezeiten meines Laptops.
Diese greife ich schon ueber das Network Binding und PingDevice ab. Funktioniert super, sodass ich auch eine Telegramm Nachricht bekommen, wenn der Laptop online, bzw. offline geht.
Allerdings fehlt mir nun die passende Idee, wie ich ermitteln kann, dass der Laptop zum Beispiel 40h in der letzten Woche online (=Arbeitszeit) war.
Hat jemand von euch eine Idee?
Ich danke Euch schonmal im Vorraus.
openHAB 3.0.1 / Raspi 4
- udo1toni
- Beiträge: 13989
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Arbeitszeit ermitteln
Ein direkter Weg wäre mir nicht bekannt, Du kannst aber einfach jedesmal, wenn sich der Zustand auf Online ändert, in einer Variablen einen Zeitstempel speichern und wenn sich der Zustand auf Offline ändert, vom aktuellen Zeitstempel den gespeicherten Zeitstempel abziehen, womit Du dann die Anzahl Sekunden im Online-Status erhältst (bzw. Millisekunden, aber das kann man ja durch 1000 teilen).
Diesen Wert speicherst Du mittels Persistence in einer Datenbank, z.B. in einem Item OnlineSekunden. Es ist wichtig, dass der Wert nur einmalig geschrieben wird, und nur in dem Moment, wo der Rechner Offline geht.
Anschließend kannst Du z.B. Samstags über den Aufruf OnlineSekunden.sumSince(now.minusDays(6).atStartOfDay) den aufsummierten Wert seit Montag abfragen.
Diesen Wert speicherst Du mittels Persistence in einer Datenbank, z.B. in einem Item OnlineSekunden. Es ist wichtig, dass der Wert nur einmalig geschrieben wird, und nur in dem Moment, wo der Rechner Offline geht.
Anschließend kannst Du z.B. Samstags über den Aufruf OnlineSekunden.sumSince(now.minusDays(6).atStartOfDay) den aufsummierten Wert seit Montag abfragen.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 28
- Registriert: 3. Mär 2021 20:01
Re: Arbeitszeit ermitteln
klingt super. Kannst du mir Starthilfe geben?
"in einer Variablen einen Zeitstempel speichern" ... Wie koennte diese aussehen?
"in einer Variablen einen Zeitstempel speichern" ... Wie koennte diese aussehen?
openHAB 3.0.1 / Raspi 4
- udo1toni
- Beiträge: 13989
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Arbeitszeit ermitteln
in einer *.rules Datei:
Code: Alles auswählen
// globale Variablen werden vor der ersten Rule definiert
var Long lStart = null
rule "eine rule"
when
Item irgendeinItem received command
then
var Number nDauer = null
if(receivedCommand == ON)
lStart = now.millis
else {
nDauer = ((now.millis - lStart)/1000).intValue
irgendeinItemDauer.postUpdate(nDauer)
}
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 28
- Registriert: 3. Mär 2021 20:01
Re: Arbeitszeit ermitteln
Danke udo1toni,
leider bin ich noch nicht ganz so fit.
Koenntest du mir die rule fuer mein Item anpassen?
Ich habe folgendes Item fuer "Online gehen"
Und "Offline gehen"
leider bin ich noch nicht ganz so fit.
Koenntest du mir die rule fuer mein Item anpassen?
Ich habe folgendes Item fuer "Online gehen"
Code: Alles auswählen
val telegramAction = getActions("telegram","telegram:telegramBot:xxxxxxxxxx")
rule "PC_Online"
when
Item Online changed from OFF to ON
then
telegramAction.sendTelegram("online")
end
Code: Alles auswählen
val telegramAction = getActions("telegram","telegram:telegramBot:xxxxxxxxxx")
rule "PC_Offline"
when
Item Online changed from ON to OFF
then
telegramAction.sendTelegram("offline")
end
openHAB 3.0.1 / Raspi 4
- udo1toni
- Beiträge: 13989
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Arbeitszeit ermitteln
Dann so:
Natürlich musst Du noch das Number Item OnlineDauer anlegen. Es enthält nach dem Wechsel nach OFF die Anzahl Sekunden vom letzten Wechsel nach ON bis zum Wechsel nach OFF.
Code: Alles auswählen
// globale Variablen werden vor der ersten Rule definiert
var Long lStart = null
rule "eine rule"
when
Item Item Online changed
then
var Number nDauer = null
if(Online.state == ON)
lStart = now.millis
else {
nDauer = ((now.millis - lStart)/1000).intValue
OnlineDauer.postUpdate(nDauer)
}
end
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 28
- Registriert: 3. Mär 2021 20:01
Re: Arbeitszeit ermitteln
Hallo udo1toni,
auf die Gefahr hin, dass ich dich total langweile ...
Welchen Channel muss ich denn bei dem neu angelegten Item "OnlineDauer" angeben?
Aktuell habe ich folgendes:
auf die Gefahr hin, dass ich dich total langweile ...
Welchen Channel muss ich denn bei dem neu angelegten Item "OnlineDauer" angeben?
Aktuell habe ich folgendes:
Code: Alles auswählen
//PC online
Switch Online "PC online" <Network> { channel="network:pingdevice:bf430e50a0:online" }
Number OnlineDauer "Onlinezeit" <Network> ???
openHAB 3.0.1 / Raspi 4
- udo1toni
- Beiträge: 13989
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Arbeitszeit ermitteln
Na auf gar keinen Channel, schließlich wird der Wert ja über die Rule gesetzt. Das ist ein ungebundenes Item.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet
-
- Beiträge: 28
- Registriert: 3. Mär 2021 20:01
Re: Arbeitszeit ermitteln
Hallo udo1toni,
irgendwo ist noch der Wurm drin. Darf ich dich noch einmal um deinen Rat bitten.
Hab jetzt noch einmal neugebaut.
ITEMS:
Rule:
Openhab Client:
Logging:
irgendwo ist noch der Wurm drin. Darf ich dich noch einmal um deinen Rat bitten.
Hab jetzt noch einmal neugebaut.
ITEMS:
Code: Alles auswählen
//IPhone Onlinezeit
Switch IPhonePower "IphonePower" <Network> { channel="network:pingdevice:bf430e50a1:online" }
Number IPhoneDauer "Onlinezeit" <Network>
Code: Alles auswählen
// globale Variablen werden vor der ersten Rule definiert
var Long lStart = null
rule "IPhoneOnlineZeit"
when
Item IPhonePower changed
then
var Number nDauer = null
if(IPhonePower.state == ON)
lStart = now.millis
else {
nDauer = ((now.millis - lStart)/1000).intValue
IPhoneDauer.postUpdate(nDauer)
}
end
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 3.0.1 / Raspi 4
- udo1toni
- Beiträge: 13989
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Arbeitszeit ermitteln
Oh. Ja, unter OH3 gibt es kein Joda Time mehr, stattdessen ist JavaTime angesagt.
Probiere bitte mal, ob das Ersetzen von now.millis() durch now.get(ChronoField.MILLI_OF_SECOND) funktioniert. Der Ausdruck kommt zweimal im Code vor.
Probiere bitte mal, ob das Ersetzen von now.millis() durch now.get(ChronoField.MILLI_OF_SECOND) funktioniert. Der Ausdruck kommt zweimal im Code vor.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet