Arbeitszeit ermitteln

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Sadi191
Beiträge: 28
Registriert: 3. Mär 2021 20:01

Arbeitszeit ermitteln

Beitrag von Sadi191 »

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.
openHAB 3.0.1 / Raspi 4

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Arbeitszeit ermitteln

Beitrag von udo1toni »

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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Sadi191
Beiträge: 28
Registriert: 3. Mär 2021 20:01

Re: Arbeitszeit ermitteln

Beitrag von Sadi191 »

klingt super. Kannst du mir Starthilfe geben?
"in einer Variablen einen Zeitstempel speichern" ... Wie koennte diese aussehen?
openHAB 3.0.1 / Raspi 4

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Arbeitszeit ermitteln

Beitrag von udo1toni »

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

Sadi191
Beiträge: 28
Registriert: 3. Mär 2021 20:01

Re: Arbeitszeit ermitteln

Beitrag von Sadi191 »

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"

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
Und "Offline gehen"

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

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Arbeitszeit ermitteln

Beitrag von udo1toni »

Dann so:

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
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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Sadi191
Beiträge: 28
Registriert: 3. Mär 2021 20:01

Re: Arbeitszeit ermitteln

Beitrag von Sadi191 »

Hallo udo1toni,

auf die Gefahr hin, dass ich dich total langweile ... :D

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

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Arbeitszeit ermitteln

Beitrag von udo1toni »

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

Sadi191
Beiträge: 28
Registriert: 3. Mär 2021 20:01

Re: Arbeitszeit ermitteln

Beitrag von Sadi191 »

Hallo udo1toni,

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>
Rule:

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
Openhab Client:
Onlinezeit.jpg
Logging:
Onlinezeit2.jpg
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 3.0.1 / Raspi 4

Benutzeravatar
udo1toni
Beiträge: 13864
Registriert: 11. Apr 2018 18:05
Answers: 222
Wohnort: Darmstadt

Re: Arbeitszeit ermitteln

Beitrag von udo1toni »

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.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten