Zeitberechnung im DOIF-Ausführungsteil

Begonnen von z0lt1, 15 Dezember 2021, 17:04:36

Vorheriges Thema - Nächstes Thema

z0lt1

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.

Damian

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.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Beta-User

...man fragt sich nur, warum nicht ReadingsAge() statt der eigenen Berechnung zur Ermittlung der Sekunden verwendet wird...?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

Damian

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 ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Beta-User

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...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

z0lt1

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.

Damian

Dann probiere mal:

setreading $SELF P_FensterOeffnungsDauer {(int([wc_Kontakt.Fenster:state:sec]/60))}

funktioniert so nur im DOIF
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

z0lt1

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?

Damian

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 ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

z0lt1

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.