Hallo zusammen
ich würde gerne zwei userreadings erstellen und mit den Ein-/Ausschaltzeiten des Schalters füllen wüllen, leider hab ich einen Knoten im Kopf
mein Ansatz
attr shelly_Keller userReadings on_time {ReadingsVal("shelly_Keller","Licht",'')eq"on" ? ReadingsTimestamp("shelly_Keller","Licht",''):''},
off_time {ReadingsVal("shelly_Keller","Licht",'')eq"off" ? ReadingsTimestamp("shelly_Keller","Licht",'') :''}
hier wird der andere Wert immer gelöscht! Es sollen beide Werte beschrieben werden.
Ich würder mir gerne eine DOIF erstparren, habe da noch mehrere Schalter wo das rein soll.
danke für Eure Hilfe!
Hi,
klar wird die Alternative gelöscht, Du bietest die Alternative für "wahr" doch als '' an.
So eventuell? Das andere entsprechend :)
on_time {ReadingsTimestamp("shelly_Keller","Licht",'') if (ReadingsVal("shelly_Keller","Licht",'')eq"on")}
Gruß Otto
Das ist mir schon klar. nur ohne : funktioniert das gar nicht, oder ich verstehe es nicht.
Das Andere gibt es nicht, es wird die Zeit von einem Schalter verwendet, ein - aus.
Was willst Du mir sagen? Mein Ansatz funktioniert nicht?
Nochmal Komplett
attr shelly_Keller userReadings on_time {ReadingsTimestamp("shelly_Keller","Licht",'') if (ReadingsVal("shelly_Keller","Licht",'')eq"on")}, off_time {ReadingsTimestamp("shelly_Keller","Licht",'') if (ReadingsVal("shelly_Keller","Licht",'')eq"off")}}
Ich vermute, dein wird auch nicht gehen, Otto.
Was ergibt {ReadingsTimestamp("shelly_Keller","Licht",'') if (ReadingsVal("shelly_Keller","Licht",'')eq"on")}
wenn shelly_Keller "off" ist ?
Ohne spezifische Trigger in jeweiligen userReadings, werden beide jedes mal kalkuliert. Da aber shelly_Keller nur entweder "on" oder "off" ist, wird immer nur ein Wert gesetzt, der andere gelöscht.
Zitat von: Otto123 am 24 November 2018, 22:53:09
Was willst Du mir sagen? Mein Ansatz funktioniert nicht?
Nochmal Komplett
attr shelly_Keller userReadings on_time {ReadingsTimestamp("shelly_Keller","Licht",'') if (ReadingsVal("shelly_Keller","Licht",'')eq"on")}, off_time {ReadingsTimestamp("shelly_Keller","Licht",'') if (ReadingsVal("shelly_Keller","Licht",'')eq"off")}}
Hallo Otto
Leider funktioniert dein Ansatz auch nicht.
Es wir entweder der eine oder der andere Werte geschrieben, aber der andere wieder gelöscht.
Ja amenomade hat Recht :-[ war mir dann auch klar als er es schrieb. Nichts zurück geliefert wird eben auch gesetzt :D
Wie wäre die Idee, es mit einem notify und setreading zu machen?
Also trigger: shelly_Keller:Licht.(on|off)
Ausführungsteil {if ($EVTPART1 eq "on") {fhem("setreading shelly_keller on_time ".ReadingsTimestamp('shelly_Keller','Licht',''))} else {fhem("")}}
Das ist jetzt nur der Ansatz nicht ausformuliert und nicht getestet. Du musst den Event genau anschauen und $EVTPARTx eventuell anpassen. Auch bin ich jetzt nicht sicher ob der Befehl mit der concatenation stimmt (zu spät ;)).
Gruß Otto
Es ist zwar schon spät, aber reicht es nicht, im else-Fall
statt
:''
einfach den bisherigen ReadingsVal zurückzugeben?
:ReadingsVal("shelly_Keller","on_time",''")
bzw.
:ReadingsVal("shelly_Keller","off_time",''")
Vielleicht. Ich weiss nicht, ob dann noch verfügbar. Sonst OldReadingsVal
Guten morgen
nach einer durchgearbeiteten Nacht kam mit Hilfe von @amoenomade, OldReadingsVal die Lösung.
on_time {ReadingsVal("shelly_Keller","Licht",'')eq"on" ? ReadingsTimestamp("shelly_Keller","Licht",'') : ReadingsVal("shelly_Keller","on_time",'')},
off_time {ReadingsVal("shelly_Keller","Licht",'')eq"off" ? ReadingsTimestamp("shelly_Keller","Licht",'') : ReadingsVal("shelly_Keller","off_time",'')},
timer {ReadingsTimestamp("shelly_Keller","Licht",'')},
onoff_time {ReadingsVal("shelly_Keller","Licht",'')eq"off" ? time_str2num(ReadingsVal("shelly_Keller","timer",''))-time_str2num(OldReadingsVal("shelly_Keller","timer",'')):0}
Die Aussage von @OdfFhem mit dem nochmaligen Eintragen des ReadingsVal war für das urspüngliche Problem die Lösung, die Code, nur zur Veranschaulichung.
Das eigentliche Vorhaben, die Einschaltdauer des Lichtes geht jetzt mit dem Reading timer und dern OldReadingsVal.
Die Ausgabe erfolgt noch in sec und soll noch in ein Zeitformat DD:HH:MM:SS umgewandelt werden, gibt es dafür auch noch eine einfach Möglichkeit?
Ich danke Euch nochmals für Eure Hilfe
gute Nacht
https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit
Gruß, Joachim