Umgang mit Zahlenzusätzen (% oder °C ) in DOIFs und notifys

Begonnen von Gunther, 14 November 2017, 20:30:01

Vorheriges Thema - Nächstes Thema

Gunther

Wie kann ich in DOIFs, notifys usw. mit Zahlen, die einen Zusatz haben "rechnen"?

(siehe EDIT ganz unten)

Also z. B.
> oder <
anwenden?

Konkret möchte ich z. B. folgendes machen:
defmod doif_Pumpe_Kamin DOIF ([VBUSDEV_7321:speed_R03] < 60 %) (set Pumpe_Kamin pumpt_schwach)

Hier ein List eines Devices, das ich nutzen möchte:
Internals:
   CHANGED
   CODE       7321
   DEF        7321
   IODev      vbus
   LASTInputDev vbus
   MSGCNT     78485
   NAME       VBUSDEV_7321
   NR         670
   STATE      Defined
   TYPE       VBUSDEV
   vbus_MSGCNT 78485
   vbus_RAWMSG aa100021731000011238df00a101c402b8220b02de00b822b822b822b822b822b822000000000000000000000000c80f00001700000000005000000000000000000000005500000000000201d704f68bbb1f
   vbus_TIME  2017-11-14 20:25:19
   READINGS:
     2017-03-06 22:05:19   Pumpe-Kamin     0 %
     2017-03-06 22:05:19   Pumpe-Solar-Panel 0 %
     2017-03-06 22:05:19   Temp-Kamin-Wassertasche 72.4 °C
     2017-03-06 22:05:19   Temp-Puffer-oben 68.7 °C
     2017-03-06 22:05:19   Temp-Puffer-unten 43.2 °C
     2017-03-06 22:05:19   Temp-Solar-Panel 22.9 °C
     2017-11-14 20:25:19   controllerversion 258
     2017-11-14 20:25:19   errormask       0
     2017-11-14 20:25:19   impulse_I01     0
     2017-11-14 20:25:19   impulse_I02     0
     2017-11-14 20:25:19   insolation      0 W/qm
     2017-11-14 20:25:19   relaisusagemask 85
     2017-11-14 20:25:19   sensorbrokemask 4040
     2017-11-14 20:25:19   sensorshortmask 0
     2017-11-14 20:25:19   sensorusagemask 23
     2017-11-14 20:25:19   speed_R01       0 %
     2017-11-14 20:25:19   speed_R02       0 %
     2017-11-14 20:25:19   speed_R03       80 %
     2017-11-14 20:25:19   speed_R04       0 %
     2017-11-14 20:25:19   speed_R05       0 %
     2017-11-14 20:25:19   speed_R06       0 %
     2017-11-14 20:25:19   speed_R07       0 %
     2017-11-14 20:25:19   speed_R08       0 %
     2017-11-14 20:25:19   speed_R09       0 %
     2017-11-14 20:25:19   systemtime      1239
     2017-11-14 20:25:19   temperature_T01 22.5 °C
     2017-11-14 20:25:19   temperature_T02 42 °C
     2017-11-14 20:25:19   temperature_T03 71 °C
     2017-11-14 20:25:19   temperature_T05 52.5 °C
     2017-11-14 20:25:19   temperature_T06 22.5 °C
     2017-11-14 20:25:19   warningmask     0
   helper:
     _98_statistics stat_VBUSDEV_7321
Attributes:
   IODev      vbus
   event-min-interval .*:120
   event-on-change-reading .*
   model      Vitosolic200
   room       00_KG_Heizungsraum,G_VBUS


Edit:
mit
[code]defmod doif_Pumpe_Kamin DOIF ([VBUSDEV_7321:speed_R03] < 60 ) (set Pumpe_Kamin pumpt_schwach)[/code]
geht es.

Werden Einheiten generell nicht beachtet?
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Otto123

#1
Hi,
ZitatWerden Einheiten generell nicht beachtet?
doch eigentlich schon. Man kann es aber selbst bestimmen:  Hier aber ein kurzer Auszug aus der Doku
ZitatFiltern nach Ausdrücken mit Ausgabeformatierung   back

Syntax: [<device>:<reading>|<internal>:d<number>|"<regex>":<output>]

d - Der Buchstabe "d" ist ein Synonym für das Filtern nach Dezimalzahlen, es entspricht intern dem regulären Ausdruck "(-?\d+(\.\d+)?)". Ebenfalls lässt sich eine Dezimalzahl auf eine bestimmte Anzahl von Nachkommastellen runden. Dazu wird an das "d" eine Ziffer angehängt. Mit der Angabe d0 wird die Zahl auf ganze Zahlen gerundet.
<Regex>- Der reguläre Ausdruck muss in Anführungszeichen angegeben werden. Dabei werden Perl-Mechanismen zu regulären Ausdrücken mit Speicherung der Ergebnisse in Variablen $1, $2 usw. genutzt.
<Output> - ist ein optionaler Parameter, hier können die in den Variablen $1, $2, usw. aus der Regex-Suche gespeicherten Informationen für die Aufbereitung genutzt werden. Sie werden in Anführungszeichen bei Texten oder in Perlfunktionen angegeben. Wird kein Output-Parameter angegeben, so wird automatisch $1 genutzt.

Beispiele:

Das es in deinem Fall geht würde ich jetzt eher als Zufall betrachten, bzw. Was geht denn wirklich?
Oder DOIF macht im Hintergrund was, was ich nicht kenne...

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

Gunther

#2
Danke! Du hast Recht. Es funktioniert doch nicht.

Habe nun im DEV des DOIF stehen:
([VBUSDEV_7321:speed_R03] >= 80 ) (set Pumpe_Kamin pumpt)

Das DOIF gibt mir eine Warnung:
condition c01: Argument "80 %" isn't numeric in numeric ge (>=)

Jetzt komme ich wieder an meine Schwäche mir den regulären Ausdrücken...
Ich schaue mal und melde mich, wenn ich nicht weiter komme.

P.S.: Wo finde ich den Teil der Doku, die Du zitierst?
http://192.168.0.22:8083/fhem/docs/commandref_DE.html#DOIF_Filtern_nach_Zahlen
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden

Otto123

Für Deinen Fall brauchst Du doch nur [VBUSDEV_7321:speed_R03:d]
Das ist Alles  ;D
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

Gunther

Habe ich eben auch festgestellt.  :) Danke. Leider funktioniert mein Vorhaben nicht. Dazu mache ich nochmal ein neues Thema auf.
FHEM@Proxmox@Nuc: TabletUI als User-Interface (4 Wandtablets) / IOs per ser2net gekapselt
Homematic: Heizung, Fenster, Bewegung | Jeelink: Temperatur | Z-Wave: Bewegung, Temperatur | FS20: Temperatur, Fenster | Viessmann-Heizung eingebunden