Hallo,
nachdem ich nun ca 30 Aktoren und Sensoren erfolgreich zum Laufen bekommen habe, funktioniert die zeitabhängige Steuerung schon sehr schön.
Nun möchte ich den nächsten Schritt gehen und in Abhängigkeit von Sensorwerten zu steuern beginnen.
Mit dem "notify" als ausführende Struktur habe ich mich schon ein wenig vertraut gemacht.
Bei der Suche nach einer Befehlsfolge, die mir den jeweils aktuellsten Sensorwert zur Weiterverarbeitung zwischenspeichert, komme ich trotz intensiven Suchens nicht weiter. Mir fehlt offenbar der entscheidende Hinweis.
Nutzen möchte ich das "dummy" Modul um den aktuellen Wert des Temperatursensors zur Weiterverarbeitung zu speichern
Der Temperatursensor ist ein HM-WDS40-TH-I
der Logfileauszug hierzu sieht folgendermaßen aus:
2013-11-12_18:56:04 T_Sensor_EG_WZ T: 23.1 H: 55
2013-11-12_18:58:25 T_Sensor_EG_WZ temperature: 23.1
2013-11-12_18:58:25 T_Sensor_EG_WZ humidity: 55
2013-11-12_18:58:25 T_Sensor_EG_WZ T: 23.1 H: 55
2013-11-12_19:00:32 T_Sensor_EG_WZ temperature: 23.1
2013-11-12_19:00:32 T_Sensor_EG_WZ humidity: 55
2013-11-12_19:00:32 T_Sensor_EG_WZ T: 23.1 H: 55
2013-11-12_19:03:28 T_Sensor_EG_WZ temperature: 23.2
2013-11-12_19:03:28 T_Sensor_EG_WZ humidity: 54
im dummy "WZTemperatur" soll nun der jeweils letzte Wert des Sensors, siehe Zeile "temperature: 23.2" (also der Wert 23.2) gespeichert werden
Wie gehe ich hierzu vor?
define WZTemperatur dummy
Nun soll "WZTemperatur" der jeweils aktuellste Wert der Zeile "temperature" zugeordnet werden
Vielen Dank für einen Hinweis. Gerne auch alternative Möglichkeiten
GRuß
Michael
define abc notify HM-WDS40-TH-I:temp.* set WZTemperatur ReadingsVal('HM-WDS40-TH-I','temperature','error')
bzw.
define abc notify HM-WDS40-TH-I:temp.* fhem(" 'set WZTemperatur '.ReadingsVal('HM-WDS40-TH-I','temperature','error') ")
bevor du damit anfängst überleg dir aber noch mal kurz warum du den wert überhaupt zwischenspeichern möchtet.
entweder reagierst du im notify direkt auf den aktuellen sensor wert oder du kannst den wert jederzeit mit ReadingsVal abfragen.
du solltest vermeiden alle möglichen readings in dummys zu duplizieren. das ist fast nie nötig.
gruss
andre
Vielen Dank für die schnelle Unterstützung
Leider funzt es bisher noch nicht.
Hier nun meine finalen Zeilen in der fhem.cfg
define WZTemperatur dummy
define Read_WZ_Temp notify T_Sensor_EG_WZ:temp.* set WZTemperatur ReadingsVal('T_Sensor_EG_WZ','temperature','error')
Ziel ist es, den dummy "WZTemperatur" mit der aktuellen Temperatur vorzubelegen.
Hier das Ergebnis aus der Wertebelegung von WZTemperatur:
dummy
WZTemperatur ReadingsVal('T_Sensor_EG_WZ','temperature','error')
Hier hätte ich nun den Temperaturwert erwartet. Statt dessen wird der dummy mit dem Befehlsstring gefüllt
Merkwürdigerweise zeigt das Logfile folgende z.T. Fehler, die bisher nicht aufgetreten sind:
2013-11-19_11:41:15 T_Sensor_EG_WZ ResndFail
2013-11-19_11:41:15 T_Sensor_EG_WZ MISSING ACK
2013-11-19_11:43:59 T_Sensor_EG_WZ temperature: 21.3
2013-11-19_11:43:59 T_Sensor_EG_WZ humidity: 51
2013-11-19_11:43:59 T_Sensor_EG_WZ T: 21.3 H: 51
2013-11-19_11:44:01 T_Sensor_EG_WZ ResndFail
2013-11-19_11:44:01 T_Sensor_EG_WZ MISSING ACK
2013-11-19_11:46:25 T_Sensor_EG_WZ Activity: unknown
2013-11-19_11:46:32 T_Sensor_EG_WZ temperature: 21.3
2013-11-19_11:46:32 T_Sensor_EG_WZ humidity: 51
2013-11-19_11:46:32 T_Sensor_EG_WZ T: 21.3 H: 51
2013-11-19_11:46:34 T_Sensor_EG_WZ ResndFail
2013-11-19_11:46:34 T_Sensor_EG_WZ MISSING ACK
2013-11-19_11:48:48 T_Sensor_EG_WZ temperature: 21.3
2013-11-19_11:48:48 T_Sensor_EG_WZ humidity: 51
2013-11-19_11:48:48 T_Sensor_EG_WZ T: 21.3 H: 51
2013-11-19_11:50:52 T_Sensor_EG_WZ temperature: 21.3
2013-11-19_11:50:52 T_Sensor_EG_WZ humidity: 51
2013-11-19_11:50:52 T_Sensor_EG_WZ T: 21.3 H: 51
Die 2. Variante von UliM bringt das gleiche Ergebnis
Irgendwo ist noch der Wurm drin.
Gruß
Michael
Hallo,
die Langversion:
define abc notify T_Sensor_EG_WZ:temp.* {
my $temp=ReadingsVal("T_Sensor_EG_WZ","temperature","error");
fhem("set WZTemperatur .$temp");
}
Ungetestet und evtl. fehlerhaft aber ...
Wie justme1968 schon angemerkt hat:
Zitatdu solltest vermeiden alle möglichen readings in dummys zu duplizieren. das ist fast nie nötig.
Wofür soll das gut sein??
Grüße
P.S.:Diesen Code direkt in die fhem.cfg kopiert bringt mit Sicherheit Fehlermeldungen da \ und ;; fehlen.
Ich bearbeite nur! die DEF eines notify und arbeite seltenst direkt in der fhem.cfg daher kümmere ich mich um Zeilenenden und Zeichenschutz nicht.
Leider funktioniert dieser Ansatz auch nicht.
wie bei den bisherigen varianten enthält der dummy nicht den Wert der Variablen, sondern den entsprechenden String
hier .$temp
Gibt es noch Ideen, wie das funktionieren könnte?
Gruß
Michael
Hallo,
fhem("set WZTemperatur ".$temp);
Grüße
Edith: Grad bei mir gesehen. Ich weiß die Werte so einem Dummy zu:
fhem("set WZTemperatur $temp");