DOIF aqara Vibrationssensor bei Reading Änderung

Begonnen von Udomatic, 24 Januar 2021, 13:02:55

Vorheriges Thema - Nächstes Thema

Udomatic

Hallo,

mit DOIF tue ich mir immer noch schwer. Habe einen aqara Virbrationssensor und möchte ein DOIF auf mehrere Readings anwenden. Das zweite Bedingung möchte ich so definieren, dass sie ohne spezifischen Wert wahr wird.

Über den Event Monitor habe ich mir Unterstützung geholt. Was mir aber nicht klar, wie ich die Definition auf irgendeinen Wert des Readings durchführe. Stimmt das also mit dem .* in der Bedingung zum Reading ,, vibrationstrength" ?
Das hab ich als Beispiel in der commandref nicht gefunden oder überlesen



Internals:
   DEF        ([Vibrationssensor:vibration] == 1 or [Vibrationssensor:"^vibrationstrength:.*$"] and [07:00-20:00]) (set Sonos_Buero speak 25 de Die Post ist da Bitte Briefkasten leeren , set Sonos_Wohnzimmer speak 25 de Die Post ist da Bitte Briefkasten leeren , set Sonos_Kueche speak 25 de Die Post ist da Bitte Briefkasten leeren , set Sonos_Schlafzimmer speak 25 de Die Post ist da Bitte Briefkasten leeren)
   FUUID      5fd133e7-f33f-45fc-f1e8-799bbc0fd719a40f
   MODEL      FHEM
   NAME       Post_Eingang
   NOTIFYDEV  Vibrationssensor,global
   NR         489
   NTFY_ORDER 50-Post_Eingang
   STATE      initialized
   TYPE       DOIF
   VERSION    23466 2021-01-03 17:14:46
   .attraggr:
   .attrminint:
   READINGS:
     2021-01-24 12:49:41   cmd             0
     2021-01-24 12:49:41   mode            enabled
     2021-01-24 12:49:41   state           initialized
     2021-01-24 12:49:41   timer_01_c01    25.01.2021 07:00:00
     2021-01-24 12:49:41   timer_02_c01    24.01.2021 20:00:00
   Regex:
     accu:
     cond:
       Vibrationssensor:
         0:
           &STATE     ^Vibrationssensor$
           vibration  ^Vibrationssensor$:^vibration:
   attr:
     cmdState:
     wait:
     waitdel:
   condition:
     0          ::ReadingValDoIf($hash,'Vibrationssensor','vibration') == 1 or ::EventDoIf('Vibrationssensor',$hash,'vibrationstrength:.?$',1) and ::DOIF_time($hash,0,1,$wday,$hms)
   days:
   do:
     0:
       0          set Sonos_Buero speak 25 de Die Post ist da Bitte Briefkasten leeren , set Sonos_Wohnzimmer speak 25 de Die Post ist da Bitte Briefkasten leeren , set Sonos_Kueche speak 25 de Die Post ist da Bitte Briefkasten leeren , set Sonos_Schlafzimmer speak 25 de Die Post ist da Bitte Briefkasten leeren
     1:
   helper:
     DEVFILTER  ^global$|^Vibrationssensor$
     NOTIFYDEV  global|Vibrationssensor
     globalinit 1
     last_timer 2
     sleeptimer -1
     triggerDev
   interval:
     0          -1
     1          0
   intervalfunc:
   localtime:
     0          1611554400
     1          1611514800
   readings:
     all         Vibrationssensor:vibration
   realtime:
     0          07:00:00
     1          20:00:00
   time:
     0          07:00:00
     1          20:00:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
     all         Vibrationssensor
   triggertime:
     1611514800:
       localtime  1611514800
       hash:
     1611554400:
       localtime  1611554400
       hash:
   uiState:
   uiTable:
Attributes:
   do         always



Wenn das DOIF passt soll natürlich nur eine Nachricht ausgegeben werden wenn sich das Reading ändert. Im Device habe ich dazu noch ein event-on-change-reading auf das reading vibrationstrength angelegt.

Hoffe, die Kombination gibt so Sinn?
2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

Otto123

#1
Hi,

diese Kombination:
([Vibrationssensor:vibration] == 1 or [Vibrationssensor:"^vibrationstrength:.*$"] and [07:00-20:00])wir im Wesentlich von dem Eintreffen dieses Events getriggert Vibrationssensor:"^vibrationstrength:.*$" wenn Dir egal ist was im Reading steht kannst Du auch so machen:
Vibrationssensor:"vibrationstrength" Schau Dir hier an was es bedeutet https://regex101.com/.
Die Kombination .*$ ist eventuell doppelt gemoppelt :) weil .* ist der Rest und $ steht für "am Ende"

Meist ist es genauer den or Teil zu Klammern sonst wird es falsch (wäre in deinem Fall so, denke ich)  https://perldoc.perl.org/perlop#Operator-Precedence-and-Associativity:
(([Vibrationssensor:vibration] == 1 or [Vibrationssensor:"^vibrationstrength:.*$"]) and [07:00-20:00])

Deinen set Sonos Befhel kannst Du kürzer machen:
Entweder: set Sonos_.* .... für alle, oder set Sonos_Kueche,Sonos_Büro usw. - im zweiten Fall musst Du (nur) bei DOIF eine doppelte Klammer um alles machen!

((set Sonos_Buero,Sonos_Wohnzimmer,Sonos_Kueche,Sonos_Schlafzimmer speak 25 de Die Post ist da Bitte Briefkasten leeren))

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

Udomatic

#2
Hallo Otto,

danke soweit

Zitat von: Otto123 am 24 Januar 2021, 14:04:09
Hi,

diese Kombination:
([Vibrationssensor:vibration] == 1 or [Vibrationssensor:"^vibrationstrength:.*$"] and [07:00-20:00])wir im Wesentlich von dem Eintreffen dieses Events getriggert Vibrationssensor:"^vibrationstrength:.*$" wenn Dir egal ist was im Reading steht kannst Du auch so machen:
Vibrationssensor:"vibrationstrength" Schau Dir hier an was es bedeutet https://regex101.com/.
Die Kombination .*$ ist eventuell doppelt gemoppelt :) weil .* ist der Rest und $ steht für "am Ende"

Ja, der Wert spielt hier keine Rolle für mich.

Zitat von: Otto123 am 24 Januar 2021, 14:04:09
Meist ist es genauer den or Teil zu Klammern sonst wird es falsch (wäre in deinem Fall so, denke ich)  https://perldoc.perl.org/perlop#Operator-Precedence-and-Associativity:
(([Vibrationssensor:vibration] == 1 or [Vibrationssensor:"^vibrationstrength:.*$"]) and [07:00-20:00])

Ok, danke für den Tipp

Zitat von: Otto123 am 24 Januar 2021, 14:04:09
Deinen set Sonos Befhel kannst Du kürzer machen:
Entweder: set Sonos_.* .... für alle, oder set Sonos_Kueche,Sonos_Büro usw. - im zweiten Fall musst Du (nur) bei DOIF eine doppelte Klammer um alles machen!

((set Sonos_Buero,Sonos_Wohnzimmer,Sonos_Kueche,Sonos_Schlafzimmer speak 25 de Die Post ist da Bitte Briefkasten leeren))

Gruß Otto

Sieht gleich besser aus :-) Werds gleich mal testen.

Was mir noch nicht klar ist, dass Sonos nur einen speak ausgibt, wenn sich das Reading vibrationstrength ändert. Wie muss ich das angehen?

2x Raspberry 3B+, 1x Raspberry 4, Signalduino 433 (Somfy), CUL_HM (HM-MOD-RPI-PCB), MQTT, Hue, ConBee 2, Sonos, AVM DECT, Netatmo, eufy, Nuki,

Otto123

deleteattr Post_Eingang do always
Dann macht er es genau einmal am Tag, egal was passiert :) - meine ich - wenn ich DOIF richtig verstanden habe
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