Event-map zum umwandeln in Zahlen?

Begonnen von choetzu, 04 Februar 2018, 23:43:04

Vorheriges Thema - Nächstes Thema

choetzu

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?
Raspi3, EnOcean, Zwave, Homematic

KernSani

Ich bezweifle irgendwie, dass eventmap das richtige Attribut ist... was willst du denn erreichen?
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

marvin78


choetzu

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 ;)
Raspi3, EnOcean, Zwave, Homematic

marvin78

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.

Otto123

#5
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 Dokudefine di_heating DOIF ([adjusting:actuator:d] < 10) (set heating off) DOELSE (set heating on)

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

choetzu

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.
Raspi3, EnOcean, Zwave, Homematic

Otto123

Kannst DU  mir das erklären? [":temperature:d",0] die ,0 versteh ich nicht.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

choetzu

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...
Raspi3, EnOcean, Zwave, Homematic

Otto123

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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

choetzu

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?
Raspi3, EnOcean, Zwave, Homematic

Otto123

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.
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz