FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: mark79 am 29 Januar 2018, 22:26:25

Titel: [gelöst]: mehrere Readings abfragen. Wenn nur eins zutrifft, cmd ausführen
Beitrag von: mark79 am 29 Januar 2018, 22:26:25
Hallo,

ich versuche gerade ein DOIF zu erstellen, der meinem Xiaomi Staubsaugrobotor (Staubi) ausschaltet.
Das Problem was ich habe, ist das es viele state Readings (14 Stück) gibt die ich abfragen möchte und wenn dabei nur eins zutrifft, soll das cmd ausgelöst werden.
Dazu muss erst eine Sonoff Steckdose (WZ_Sonoff_Staubi) abgeschaltet werden und danach ein ESP8266 (WZ_ESP_Staubi_Shutdown) der einen Tastendruck simuliert. Das funktioniert auch alles...

Was ich suche ist eine Optimierung, sonst wird das DOIF ziemlich groß.

So funktioniert es leider nicht, ich denke das liegt daran, das alle Bedienungen auf einmal zutreffen müssen:
defmod Staubi_Shutdown DOIF ([Staubi:state] eq "Docked|Charging|Sleeping" and [Staubi:batteryLevel] > "90") (set WZ_Sonoff_Staubi OFF) (set WZ_ESP_Staubi_Shutdown on) DOELSE (set WZ_ESP_Staubi_Shutdown off)
attr Staubi_Shutdown room DOIF
attr Staubi_Shutdown wait 5,5


Gibt es da irgendwie eine Abkürzung, oder muss ich es wirklich so umsetzen:

defmod Staubi_Shutdown DOIF ([Staubi:state] eq "Docked") or ([Staubi:state] eq "Charging") or ([Staubi:state] eq "Sleeping" and [Staubi:batteryLevel] > "90") (set WZ_Sonoff_Staubi OFF) (set WZ_ESP_Staubi_Shutdown on) DOELSE (set WZ_ESP_Staubi_Shutdown off)
attr Staubi_Shutdown room DOIF
attr Staubi_Shutdown wait 5,5


Vielen Dank!
Titel: Antw:Optimierung: mehrere Readings abfragen. Wenn nur eins zutrifft, cmd ausführen
Beitrag von: Damian am 29 Januar 2018, 22:29:59
Regex mit =~ abfragen (das hatten wir heute hier schon mal ;) )

DOIF ([Staubi:state] =~ "Docked|Charging|Sleeping" and [Staubi:batteryLevel] > "90")
Titel: Antw:Optimierung: mehrere Readings abfragen. Wenn nur eins zutrifft, cmd ausführen
Beitrag von: mark79 am 29 Januar 2018, 22:40:16
Das funktioniert, vielen lieben Dank für den Tipp! :) Wieder was dazu gelernt.  ;)