Hauptmenü

Userreading

Begonnen von stefan-dd, 09 Mai 2019, 13:03:07

Vorheriges Thema - Nächstes Thema

stefan-dd

Ich baue mir gerade ein Userreading zur Berechnung der Laufzeit der Bewässerung zusammen.
Leider erhalte ich nicht das Ergebnis was ich errechne.

endtime {POSIX::strftime("%T",localtime(time_str2num(ReadingsTimestamp("BewaesserungPforte","timer_01_c01","01.01.2000 00:00:00"))+ReadingsTimestamp("BewaesserungPforte","dauer", "0")))}

Das reading "timer_01_c01" ist die Startzeit im DOIF, dazu soll die Laufzeit "dauer" in Minuten hinzuaddiert werden. Die Dauer berechne ich gesondert. Das DOIF funktioniert, nur die Zeitberechnung funktioniert nicht. Auf 12:00 sollen z.B. 7 Minuten addiert werden, als endtime soll dann 12:07 aufgegeben werden.

setstate BewaesserungPforte 2019-05-09 13:01:26 endtime 12:14:03
setstate BewaesserungPforte 2019-05-09 11:40:24 timer_01_c01 09.05.2019 22:50:00
setstate BewaesserungPforte 2019-05-09 12:54:18 timer_02_c03 10.05.2019 12:14:03

Beta-User

Zwei Anmerkungen:
- userreadings ohne trigger-Angabe sind zwar weit verbreitet, aber suboptimal.
- Es kommt mir komisch vor, dass der ReadingsTimestamp von "dauer" relevant sein soll.

Ungetestet eher so:
endtime:(dauer|timer_01_c01).* {POSIX::strftime("%T",localtime(time_str2num(ReadingsTimestamp("BewaesserungPforte","timer_01_c01","01.01.2000 00:00:00"))+ReadingsNum("BewaesserungPforte","dauer", "0")))}
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

stefan-dd

Danke, dies funktioniert leider nicht.
Ich habe jetzt noch einmal eine Variante die auf die aktuelle Zeit addiert.

endtime {POSIX::strftime("%H:%M",localtime(time+ReadingsNum("BewaesserungPforte","timer_01_c01", "0")+ReadingsNum("BewaesserungPforte","dauer", "0")*60))},


Das reading "timer_01_c01" wird aber nicht beachtet.

Beta-User

Du hast aber schon mal nachgesehen, was die beiden Funktionen ReadingsNum() und ReadingsTimestamp() liefern, oder? Es gibt auch noch ReadingsVal() ;) ...

Und bitte verwende einen anständigen Trigger, sowie eine nachvollziehbare Information zu "funktioniert nicht". Ich schreib' sowas wie das mit dem Trigger nicht ohne Grund >:( .

Vermutlich funktioniert das:

endtime:(dauer|timer_01_c01).* {POSIX::strftime("%T",localtime(time_str2num(ReadingsVal("BewaesserungPforte","timer_01_c01","01.01.2000 00:00:00"))+ReadingsNum("BewaesserungPforte","dauer", "0")))}

Allgemein: Du kannst auch Bruchstücke mit geschweiften Klammern in das Kommandofeld packen und so testen.
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

stefan-dd

Das Beispiel macht bei mir leider nichts.
Es scheitert am umrechen des Zeitreading in Sekunden, für des Zeitstempel habe ich viele Beispiele gefunden.

Beta-User

Also dann der Reihe nach:

Was werfen denn

{localtime time_str2num(ReadingsTimestamp("BewaesserungPforte","timer_01_c01","01.01.2000 00:00:00"))}und
{localtime time_str2num(ReadingsTimestamp("BewaesserungPforte","timer_01_c01","01.01.2000 00:00:00")) + 10000}aus?

Wie es ausschaut, hapert es eigentlich an der POSIX-Funktion...
Würde daher (geklaut aus fhem.pl, dort Zeilen 1108 ff) folgendes vorschlagen:
{ my ($sec,$min,$hour,$mday,$month,$year,$wday,$yday,$isdst) = localtime(time_str2num(ReadingsTimestamp(""BewaesserungPforte","timer_01_c01","01.01.2000 00:00:00"))+ReadingsNum("BewaesserungPforte","dauer", "1000000"));; sprintf("%02d:%02d:%02d", $hour, $min, $sec)}
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