Hallo,
Ich habe im reading temperature 24.5 C stehen. Nun möchte ich via event-map das C rausfiltern. Ich habs versucht mit
\d\d.\d.\s:{ ReadingsNum("Raumthermostat_SZ_Heatit","temperature","none") }
Geht aber nicht. Wo ist der Denkfehler?
Ich bezweifle irgendwie, dass eventmap das richtige Attribut ist... was willst du denn erreichen?
Ein userReading.
guten Morgen,
danke für die raschen Antworten.
Es geht um folgendes: Mein Thermostat speichert im Reading "temperature" die Temperatur wie folgt: 24.0 C . Also mit einem C am Schluss. Separat habe ich ein DOIF welches alle Devices mit dem Reading "temperature" auswertet und die Werte vergleicht. Wenn also nun das Reading keine Zahl ist, sondern eben 24.5 C, dann kommt es zu folgender Meldung:
[Sun Feb 4 22:29:06 2018] fhem.pl: Argument "24.5 C" isn't numeric in numeric lt (<) at (eval 5118495) line 1.
Logisch.
userReading kam mir auch in den Sinn, dann muss ich aber ein neues Reading definieren. Und dies geht leider auch nicht, weil ich im DOIF ja auf "temperature" triggere und somit die Fehlermeldung bleibt. Also muss ich das bestehende Reading von 24.5 C in 24.5 umwandeln.
Ich hoffe, ihr versteht, was ich meine ;)
Das wird DOIF sicher können.
Warum du dann im DOIF nicht einfach auf das userReading triggern kannst, ist fraglich.
Grundlagen lernen würde sicher helfen.
Zitat von: choetzu am 05 Februar 2018, 10:07:38
weil ich im DOIF ja auf "temperature" triggere und somit die Fehlermeldung bleibt. Also muss ich das bestehende Reading von 24.5 C in 24.5 umwandeln.
Moin,
und wenn Du im DOIF einfach :d hinter temperature schreibst? Beispiel aus der DOIF Doku (https://fhem.de/commandref_DE.html#DOIF_Filtern_nach_Zahlen)
define di_heating DOIF ([adjusting:actuator:d] < 10) (set heating off) DOELSE (set heating on)
Gruß Otto
danke Otto, sehr guter Ansatz, daran habe ich noch gar nicht gedacht... ;)
hat aber leider nicht ganz geklappt, oder ich habe was falsches gemacht. Er hat mir zwar das Reading MAX in Rekorde geschrieben, aber es gibt immer noch die Fehlermeldung unten..
hier das DOIF_MAX
([":temperature"]
and [$DEVICE:temperature:d] > [?Rekorde:$DEVICE_TEMP_max])
(setreading Rekorde $DEVICE_TEMP_max [$DEVICE:temperature:d])
DOELSEIF
([":temperature:d",0] > [?Rekorde:$DEVICE_TEMP_max,999])
(setreading Rekorde $DEVICE_TEMP_max [$DEVICE:temperature:d])
DOELSE
und das DOIF_MIN
([":temperature"]
and [$DEVICE:temperature:d] < [?Rekorde:$DEVICE_TEMP_min])
(setreading Rekorde $DEVICE_TEMP_min [$DEVICE:temperature:d])
DOELSEIF
([":temperature:d",0] < [?Rekorde:$DEVICE_TEMP_min,999])
(setreading Rekorde $DEVICE_TEMP_min [$DEVICE:temperature:d])
DOELSE
Die Fehlermeldung bleibt die selbe...
[Mon Feb 5 10:59:14 2018] fhem.pl: Argument "" isn't numeric in numeric lt (<) at (eval 18562) line 1.
Kannst DU mir das erklären? [":temperature:d",0] die ,0 versteh ich nicht.
damit will ich erreichen, dass es ein Reading erstellt, wenn es noch gar keins gibt. Also Wert 0. Hat eigentlich gut geklappt mit den anderen Werten...
Also wenn die Fehlermeldung wirklich von dem DOIF kommt, kann es eigentlich bloß sein das der Wert wirklich leer - also nicht vorhanden ist bzw keine Zahl enthält. Sagt ja die Meldung eigentlich.
Da musst Du Dir einfach mal parallel den Eventmonitor ansschauen und sehen was da wirklich passiert.
danke. das hab ich bereits gemacht und nix gefunden. Ich habe es soeben nochmals reproduziert:
Eintrag Event-Monitor:
2018-02-05 11:55:36 DOIF Rekorde_TEMP_MAX_DOIF cmd_nr: 3
2018-02-05 11:55:36 DOIF Rekorde_TEMP_MAX_DOIF cmd: 3
2018-02-05 11:55:36 DOIF Rekorde_TEMP_MAX_DOIF cmd_event: Raumthermostat_SZ_Heatit
2018-02-05 11:55:36 DOIF Rekorde_TEMP_MAX_DOIF cmd_3
2018-02-05 11:55:36 DOIF Rekorde_TEMP_MIN_DOIF cmd_nr: 3
2018-02-05 11:55:36 DOIF Rekorde_TEMP_MIN_DOIF cmd: 3
2018-02-05 11:55:36 DOIF Rekorde_TEMP_MIN_DOIF cmd_event: Raumthermostat_SZ_Heatit
2018-02-05 11:55:36 DOIF Rekorde_TEMP_MIN_DOIF cmd_3
2018-02-05 11:55:36 ZWave Raumthermostat_SZ_Heatit temperature: 23.5 C
Logeintrag:
[Mon Feb 5 11:55:36 2018] fhem.pl: Argument "" isn't numeric in numeric lt (<) at (eval 21610) line 1.
Ist wie verhext. Macht irgendwie absolut keinen Sinn... Oder übersehen wir was?
Was steht denn hier drin? [?Rekorde:$DEVICE_TEMP_min] ist der leer?
Ich denke es ist das Rekorde_TEMP_MIN_DOIF denn der Fehler ist "" isn't numeric in numeric lt (<)
Und eines der Argumente ist leer, deine erste Fehlermeldung ganz oben war ja anders.
Entweder ist der temperature Wert zeitweise leer - oder ich weiß es nicht.