FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: australien am 24 November 2018, 17:39:32

Titel: userreadings mit if Abfrage
Beitrag von: australien am 24 November 2018, 17:39:32
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!
Titel: Antw:userreadings mit if Abfrage
Beitrag von: Otto123 am 24 November 2018, 17:56:03
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
Titel: Antw:userreadings mit if Abfrage
Beitrag von: australien am 24 November 2018, 18:18:05
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.
Titel: Antw:userreadings mit if Abfrage
Beitrag 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")}}
Titel: Antw:userreadings mit if Abfrage
Beitrag von: amenomade am 24 November 2018, 23:19:33
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.
Titel: Antw:userreadings mit if Abfrage
Beitrag von: australien am 25 November 2018, 00:17:43
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.
Titel: Antw:userreadings mit if Abfrage
Beitrag von: Otto123 am 25 November 2018, 00:32:52
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
Titel: Antw:userreadings mit if Abfrage
Beitrag von: OdfFhem am 25 November 2018, 00:47:56
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",''")
Titel: Antw:userreadings mit if Abfrage
Beitrag von: amenomade am 25 November 2018, 01:29:40
Vielleicht. Ich weiss nicht, ob dann noch verfügbar. Sonst OldReadingsVal
Titel: Antw:userreadings mit if Abfrage
Beitrag von: australien am 25 November 2018, 07:49:12
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
Titel: Antw:userreadings mit if Abfrage
Beitrag von: MadMax-FHEM am 25 November 2018, 10:04:04
https://wiki.fhem.de/wiki/Zeitangaben,_rechnen_mit

Gruß, Joachim