Autor Thema: Umgang mit Zahlenzusätzen (% oder °C ) in DOIFs und notifys  (Gelesen 998 mal)

Offline Gunther

  • Hero Member
  • *****
  • Beiträge: 1625
  • Perl? Copy & Paste... ;-)
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?
« Letzte Änderung: 14 November 2017, 20:33:49 von Gunther »
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

Online Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 20855
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Umgang mit Zahlenzusätzen (% oder °C ) in DOIFs und notifys
« Antwort #1 am: 14 November 2017, 20:37:52 »
Hi,
Zitat
Werden Einheiten generell nicht beachtet?
doch eigentlich schon. Man kann es aber selbst bestimmen:  Hier aber ein kurzer Auszug aus der Doku
Zitat
Filtern 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
« Letzte Änderung: 14 November 2017, 20:39:49 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Offline Gunther

  • Hero Member
  • *****
  • Beiträge: 1625
  • Perl? Copy & Paste... ;-)
Antw:Umgang mit Zahlenzusätzen (% oder °C ) in DOIFs und notifys
« Antwort #2 am: 14 November 2017, 21:00:13 »
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
« Letzte Änderung: 14 November 2017, 21:02:44 von Gunther »
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

Online Otto123

  • Tester
  • Hero Member
  • ****
  • Beiträge: 20855
  • schon mal restore trainiert?
    • Otto's Technik Blog
Antw:Umgang mit Zahlenzusätzen (% oder °C ) in DOIFs und notifys
« Antwort #3 am: 14 November 2017, 21:15:04 »
Für Deinen Fall brauchst Du doch nur [VBUSDEV_7321:speed_R03:d]
Das ist Alles  ;D
Viele Grüße aus Leipzig
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

Offline Gunther

  • Hero Member
  • *****
  • Beiträge: 1625
  • Perl? Copy & Paste... ;-)
Antw:Umgang mit Zahlenzusätzen (% oder °C ) in DOIFs und notifys
« Antwort #4 am: 14 November 2017, 21:31:57 »
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