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
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")))}
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.
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.
Das Beispiel macht bei mir leider nichts.
Es scheitert am umrechen des Zeitreading in Sekunden, für des Zeitstempel habe ich viele Beispiele gefunden.
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)}