Einen Sensorwert weiter verarbeiten zur Steuerung

Begonnen von MiWe58, 18 November 2013, 18:39:34

Vorheriges Thema - Nächstes Thema

MiWe58

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
Devices: RasPi V, HomeMatic, PICCU, Modbus, Heliotherm-Wärmepumpe, SMA PV-Anlage, Easee Laderoboter
Steuerung: Rollos, Beleuchtung, Heizung-Heliotherm, Heizung-Heizkreise, PV-Anlage-Eigenverbrauch, Alarm, Zugang, Wasser

UliM

#1
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') ")
RPi4/Raspbian, CUL V3 (ca. 30 HomeMatic-devices), LAN (HarmonyHub, alexa etc.).  Fördermitglied des FHEM e.V.

justme1968

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
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

MiWe58

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
Devices: RasPi V, HomeMatic, PICCU, Modbus, Heliotherm-Wärmepumpe, SMA PV-Anlage, Easee Laderoboter
Steuerung: Rollos, Beleuchtung, Heizung-Heliotherm, Heizung-Heizkreise, PV-Anlage-Eigenverbrauch, Alarm, Zugang, Wasser

Puschel74

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.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.

MiWe58

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
Devices: RasPi V, HomeMatic, PICCU, Modbus, Heliotherm-Wärmepumpe, SMA PV-Anlage, Easee Laderoboter
Steuerung: Rollos, Beleuchtung, Heizung-Heliotherm, Heizung-Heizkreise, PV-Anlage-Eigenverbrauch, Alarm, Zugang, Wasser

Puschel74

#6
Hallo,

fhem("set WZTemperatur ".$temp);

Grüße

Edith: Grad bei mir gesehen. Ich weiß die Werte so einem Dummy zu:

fhem("set WZTemperatur $temp");
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.