Hallo,
ich möchte mir über folgende Definition die verstrichene Zeit in Minuten als Reading anzeigen lassen. Das Doif wird durch eine Fensteröffnung getriggert und alle 60 Minuten wiederholt, jedoch wird die Berechnung nicht durchgeführt. Ich denke ich habe was an der Formatierung nicht beachtet, komme aber nicht drauf was.
([wc_Kontakt.Fenster] eq "open") (
setreading $SELF P_FensterOeffnungsDauer [({int((time()-time_str2num(ReadingsTimestamp("wc_Kontakt.Fenster", "state", 0)))/60)})]
)
DOELSE ()
Wenn ich nur {int((time()-time_str2num(ReadingsTimestamp("wc_Kontakt.Fenster", "state", 0)))/60)}
in die Fhem Befehlszeile eingebe, bekomme ich genau den Wert den ich erwarte.
Zitat von: z0lt1 am 15 Dezember 2021, 17:04:36
Hallo,
ich möchte mir über folgende Definition die verstrichene Zeit in Minuten als Reading anzeigen lassen. Das Doif wird durch eine Fensteröffnung getriggert und alle 60 Minuten wiederholt, jedoch wird die Berechnung nicht durchgeführt. Ich denke ich habe was an der Formatierung nicht beachtet, komme aber nicht drauf was.
([wc_Kontakt.Fenster] eq "open") (
setreading $SELF P_FensterOeffnungsDauer [({int((time()-time_str2num(ReadingsTimestamp("wc_Kontakt.Fenster", "state", 0)))/60)})]
)
DOELSE ()
Wenn ich nur {int((time()-time_str2num(ReadingsTimestamp("wc_Kontakt.Fenster", "state", 0)))/60)}
in die Fhem Befehlszeile eingebe, bekomme ich genau den Wert den ich erwarte.
Die eckigen Klammern sind zu viel des Guten.
...man fragt sich nur, warum nicht ReadingsAge() statt der eigenen Berechnung zur Ermittlung der Sekunden verwendet wird...?
Zitat von: Beta-User am 15 Dezember 2021, 17:19:13
...man fragt sich nur, warum nicht ReadingsAge() statt der eigenen Berechnung zur Ermittlung der Sekunden verwendet wird...?
Wazu RadingsAge, wenn man es mit [wc_Kontakt.Fenster:state:sec] direkt haben kann ;)
Zitat von: Damian am 15 Dezember 2021, 17:24:16
Wazu RadingsAge, wenn man es mit [wc_Kontakt.Fenster:state:sec] direkt haben kann ;)
...vermutlich, weil es nicht "direkt" ist, sondern erst "set magic-like" ausgewertet werden muss, und zweitens, weil der TE sowieso rechnen will, damit er Minuten bekommt...
Zitat von: Damian am 15 Dezember 2021, 17:15:29
Die eckigen Klammern sind zu viel des Guten.
Das funktioniert leider auch nicht, mit
setreading $SELF P_FensterOeffnungsDauer ({int((time()-time_str2num(ReadingsTimestamp("wc_Kontakt.Fenster", "state", 0)))/60)})
bekomme ich auch nur den Ausdruck direkt ins Reading geschrieben.
Dann probiere mal:
setreading $SELF P_FensterOeffnungsDauer {(int([wc_Kontakt.Fenster:state:sec]/60))}
funktioniert so nur im DOIF
Jo, also das funktioniert. Danke. Irgendwelche Ideen warum meins nicht funktioniert? Und kann ich irgendwo nachlesen, wie du darauf gekommen bist, wenn ich es mal umbauen muss?
Zitat von: z0lt1 am 15 Dezember 2021, 21:25:47
Jo, also das funktioniert. Danke. Irgendwelche Ideen warum meins nicht funktioniert? Und kann ich irgendwo nachlesen, wie du darauf gekommen bist, wenn ich es mal umbauen muss?
Solche Dinge stehen in der Commandref zu DOIF.
Vergleiche mal die Reihenfolge der Klammern mit deinem Ausdruck ;)
Nur der Vollständigkeithalber
Zitat von: z0lt1 am 15 Dezember 2021, 18:17:53
Das funktioniert leider auch nicht, mit setreading $SELF P_FensterOeffnungsDauer ({int((time()-time_str2num(ReadingsTimestamp("wc_Kontakt.Fenster", "state", 0)))/60)})
bekomme ich auch nur den Ausdruck direkt ins Reading geschrieben.
unabhängig von DOIF - siehe commandref zu set magic https://fhem.de/commandref_DE.html#set
Die Runden () müssen in den geschweiften {}:
setreading $SELF P_FensterOeffnungsDauer {(int((time()-time_str2num(ReadingsTimestamp("wc_Kontakt.Fenster", "state", 0)))/60))}
Gruß Otto
Vielen Dank. Ich habe mich da in der CommandRef von den eckigen Klammern welche bei Zeitangaben benutzt werden irritieren lassen, welche aber hier ja gar keine Anwendung finden.