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

Re: Arbeitszeit ermitteln

Beitrag von Sadi191 »

Habe nun folgende 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.get(ChronoField.MILLI_OF_SECOND)
    else {
        nDauer = ((now.get(ChronoField.MILLI_OF_SECOND) - lStart)/1000).intValue
        IPhoneDauer.postUpdate(nDauer)
    }
end
und bekomme im Logging folgende Meldung:
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 3.0.1 / Raspi 4

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

Re: Arbeitszeit ermitteln

Beitrag von udo1toni »

Dann versuch mal “now.toInstant().toEpochMilli() statt now.millis
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 »

Klasse, es hat funktioniert.
Nun bekomm ich nach jeder Onlinezeit die Sekunden angezeigt:
OnlineZeit.jpg
Kann man es jetzt noch so einrichten, dass es nicht immer ueberschrieben wird, wenn sich der Status von OFF auf ON aendert?

Was stelle ich mir vor?
Es waere toll, wenn ich z.B. an einem Samstag sehe, wieviel Minuten ich in der Woche (Mo-Fr) online war.

Realistisch?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
openHAB 3.0.1 / Raspi 4

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

Re: Arbeitszeit ermitteln

Beitrag von udo1toni »

Du kannst (das hatte ich, glaube ich, oben geschrieben) das Number Item persistieren. Das darf nur bei einem Update passieren, und der Wert des Items muss zwingend immer von 0 beginnen (das macht die Rule aber schon). Als Persistence Service solltest Du etwas verwenden, was nicht verlustbehaftet ist, beispielsweise MySQL. openHAB legt dann automatisch bei jedem ON->OFF Wechsel einen Datensatz an. Aus einer Rule kann man dann die Summe seit einem bestimmten Zeitpunkt auslesen. So eine Rule könnte alle paar Minuten angestoßen werden und dann die Summe seit letztem Montag, 7 Uhr ausgeben (gerne auch plus die aktuelle Laufzeit, falls das Gerät gerade ON ist).
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 »

Vielen Dank fuer deine Unterstuetzung, aber ich glaub jetzt wird es zu komplex fuer mich.
Dachte nicht, dass es so kompliziert ist. :shock:
Ich danke dir trotzdem vielmals.
openHAB 3.0.1 / Raspi 4

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

Re: Arbeitszeit ermitteln

Beitrag von udo1toni »

Na, wieso komplex? Falls Du kein MySQL nutzen willst, kannst Du natürlich auch auf andere Persistence Services ausweichen. rrd4j ist schon eingebaut, es wird halt nur nicht richtig funktionieren, weil rrd4j die Messwerte mittelt, womit dann sumSince als Funktion nur für kurze Zeiträume funktioniert. Ich fürchte, eine Woche wird da nicht zuverlässig funktionieren (wobei... Versuch macht kluch, oder so).

Was Du natürlich auch machen kannst, ist, den Wert "manuell" aufzusummieren, das wäre dann eine Rule, die Montag z.B. um 6 Uhr das Zähler-Item auf 0 setzt, anschließend wird bei jedem Ausschalten die aktuelle Einschaltdauer zum aktuellen Stand addiert. Dann musst Du nur mit mapDB persistieren, damit das Zähler-Item bei einem Neustart seinen Wert behält (wobei der Neustart bei eingeschaltetem Gerät zu vermeiden ist, denn beim Neustart geht die Einschaltzeit verloren, es kann also dann für diesen Einschaltzeitraum keine Dauer angegeben werden). Das sähe so aus:

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.toInstant().toEpochMilli()
    else {
        nDauer = ((now.toInstant().toEpochMilli() - lStart)/1000).intValue
        IPhoneDauer.postUpdate(nDauer + if(IPhoneDauer.state instanceof Number) (IPhoneDauer.state as Number) else 0)
    }
end

rule "Reset iPhoneDauer"
when
    Time cron "0 0 6 ? * MON" // Montags um 06:00:00 Uhr
then
    iPhoneDauer.postUpdate(0)
end
Nun wird also die Laufzeit jeweils am Ende aufaddiert und Montags um 6 Uhr wird das Item genullt.
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 Udo,
heute hat die Rule das erste mal gegriffen.

Ich war mit meinem Rechner von 8 - 17 Uhr online. Zurueckgegeben hat er mir einen Wert von 4036.0.

Um welche Einheit handelt es sich da?
openHAB 3.0.1 / Raspi 4

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

Re: Arbeitszeit ermitteln

Beitrag von udo1toni »

Das sind Sekunden. Offensichtlich ist da etwas grundsätzlich schief gegangen (z.B. wurde das Gerät nicht die gesamte Zeit online erkannt).
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten