DOIF wird nicht ausgelöst (HmIP Wassersensor)

Begonnen von errazzor, 09 Januar 2020, 00:49:07

Vorheriges Thema - Nächstes Thema

errazzor

Sorry, ich hatte es zuerst im falschen Bereich gepostet. Deshalb nun hier:

ich bekomme ein einfaches DOIF nicht hin und stehe völlig auf dem Schlauch....es geht um einen HMIP Wassersensor (HmIP-SWD).

Das Device:


Internals:
   DEF        HmIP-SWD-Wassersensor defaults
   FUUID      5e161d47-f33f-d150-de87-46b1d6f1f15820f3
   IODev      CCU2
   NAME       KG_HWR_Wassersensor
   NR         1192
   STATE      Initialized
   TYPE       HMCCUDEV
   ccuaddr    00189A4995CDBC
   ccudevstate active
   ccuif      HmIP-RF
   ccuname    HmIP-SWD-Wassersensor
   ccutype    HmIP-SWD
   channels   3
   statevals  devstate
   READINGS:
     2020-01-08 23:52:53   0.ERROR_CODE    0
     2020-01-08 23:52:53   0.ERROR_NON_FLAT_POSITIONING 0
     2020-01-08 23:52:53   0.LOW_BAT       ok
     2020-01-08 23:52:53   0.UNREACH       alive
     2020-01-08 23:52:53   1.ALARMSTATE    ok
     2020-01-08 23:52:53   1.MOISTURE_DETECTED ok
     2020-01-08 23:52:53   1.WATERLEVEL_DETECTED ok
     2020-01-08 23:52:53   battery         ok
     2020-01-08 23:52:53   hmstate         Initialized
     2020-01-09 00:04:24   state           Initialized
   hmccu:
     devspec    HmIP-SWD-Wassersensor
Attributes:
   IODev      CCU2
   ccureadingfilter (^ALARMSTATE|^LOW_BAT|^UNREACH|^MOISTURE_DETECTED|^WATERLEVEL_DETECTED|^ERROR_NON_FLAT_POSITIONING|^ERROR_CODE)
   ccureadingformat datapoint
   ccureadingname 0.(LOWBAT|LOW_BAT):+battery
   event-on-change-reading . *
   genericDeviceType LeakSensor
   group      Schaltdosen
   homebridgeMapping LeakDetected=1.ALARMSTATE,values=ok:0;Alarm:1 StatusTampered=0.ERROR_NON_FLAT_POSITIONING StatusFault=0.ERROR_CODE
   room       Hausstatus
   stateFormat Status: 1.ALARMSTATE | Feuchtigkeitserkennung: 1.MOISTURE_DETECTED | Wassererkennung: 1.WATERLEVEL_DETECTED
   substitute ALARMSTATE!(0|false):ok,(1|true):Alarm;LOW_BAT!(0|false):ok,(1|true):low;MOISTURE_DETECTED!(0|false):ok,(1|true):Alarm;WATERLEVEL_DETECTED!(0|false):ok,(1|true):Alarm;ERROR_NON_FLAT_POSITIONING!(0|false):0,(1|true):1


Ich möchte eine Telegram-Nachricht, wenn sich der Alarm- und/oder Batteriestatus ändert.

Aber das DOIF wird einfach nicht ausgelöst, bei keinem Reading:


Internals:
   DEF        ([KG_HWR_Wassersensor:1.ALARMSTATE] eq "Alarm") (set Telegram message Wassersensor KG_HWR ALARM!)
   FUUID      5e165ff8-f33f-d150-f0f3-932ee175156e796b
   MODEL      FHEM
   NAME       Wassersensor_Alarmierung_DOIF
   NOTIFYDEV  global,KG_HWR_Wassersensor
   NR         1198
   NTFY_ORDER 50-Wassersensor_Alarmierung_DOIF
   STATE      initialized
   TYPE       DOIF
   VERSION    20500 2019-11-12 17:54:48
   READINGS:
     2020-01-09 00:37:06   cmd             0
     2020-01-09 00:37:06   mode            enabled
     2020-01-09 00:37:06   state           initialized
   Regex:
     accu:
     cond:
       KG_HWR_Wassersensor:
         0:
           1.ALARMSTATE ^KG_HWR_Wassersensor$:^1.ALARMSTATE:
   condition:
     0          ::ReadingValDoIf($hash,'KG_HWR_Wassersensor','1.ALARMSTATE') eq "Alarm"
   do:
     0:
       0          set Telegram message Wassersensor KG_HWR ALARM!
     1:
   helper:
     DEVFILTER  ^global$|^KG_HWR_Wassersensor$
     NOTIFYDEV  global|KG_HWR_Wassersensor
     globalinit 1
     last_timer 0
     sleeptimer -1
   readings:
     all         KG_HWR_Wassersensor:1.ALARMSTATE
   uiState:
   uiTable:
Attributes:
   do         always
   room       Licht




Internals:
   DEF        ([KG_HWR_Wassersensor:battery] eq "low") (set Telegram message Wassersensor KG_HWR Batterie leer!)
   FUUID      5e165ff8-f33f-d150-f0f3-932ee175156e796b
   MODEL      FHEM
   NAME       Wassersensor_Alarmierung_DOIF
   NOTIFYDEV  global,KG_HWR_Wassersensor
   NR         1198
   NTFY_ORDER 50-Wassersensor_Alarmierung_DOIF
   STATE      initialized
   TYPE       DOIF
   VERSION    20500 2019-11-12 17:54:48
   READINGS:
     2020-01-09 00:35:47   cmd             0
     2020-01-09 00:35:47   mode            enabled
     2020-01-09 00:35:47   state           initialized
   Regex:
     accu:
     cond:
       KG_HWR_Wassersensor:
         0:
           battery    ^KG_HWR_Wassersensor$:^battery:
   condition:
     0          ::ReadingValDoIf($hash,'KG_HWR_Wassersensor','battery') eq "low"
   do:
     0:
       0          set Telegram message Wassersensor KG_HWR Batterie leer!
     1:
   helper:
     DEVFILTER  ^global$|^KG_HWR_Wassersensor$
     NOTIFYDEV  global|KG_HWR_Wassersensor
     globalinit 1
     last_timer 0
     sleeptimer -1
   readings:
     all         KG_HWR_Wassersensor:battery
   uiState:
   uiTable:
Attributes:
   do         always
   room       Licht


Ich teste dann immer mit


trigger KG_HWR_Wassersensor 1.ALARMSTATE: Alarm
oder
trigger KG_HWR_Wassersensor battery: low


Im Eventmonitor kann ich sehen, dass der Wert gesetzt wird. Aber im DOIF passiert gar nichts.

Was mache ich verkehrt?



amenomade

trigger generiert ein Ereignis, setzt das Reading aber nicht.

([KG_HWR_Wassersensor:1.ALARMSTATE] eq "Alarm") ist kein Ereignissteuerung sondern Zustandsteuerung: Kommando wird ausgeführt wenn das Reading sich ändert (oder mit do always mind. aktualisiert wird)

Teste lieber mit
setreading KG_HWR_Wassersensor 1.ALARMSTATE Alarm

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

errazzor

Zitat von: amenomade am 09 Januar 2020, 01:30:18

Teste lieber mit
setreading KG_HWR_Wassersensor 1.ALARMSTATE Alarm

Danke. Allerdings funktioniert das bei mir nur, wenn ich dann manuell im DOIF ein "checkall" ausführe (also set KG_HWR_Wassersensor_DOIF checkall).
Von alleine erkennt das DOIF die Änderung des Readings nicht....?

amenomade

Weilevent-on-change-reading . *falsch ist. Kein Leerzeichen zwischen Punkt und Stern
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

errazzor

DANKE. Das war es, es funktioniert. Ich hätte den Fehler mit Leerzeichen nicht gefunden, da hätte ich nicht mehr drauf geschaut. Nochmals Danke.

amenomade

#5
Schön. Überleg aber ob do always in Kombination mit event-on-change-reading sinnvoll ist...
Bei weiderkehrendem "Alarm" Status wird durch event-on-change-reading das DOIF nicht mehr getriggert. do always stört nicht... aber ist überflüssig. Erst wenn inzwischen eine Zustandsänderung (z.B. auf noAlarm) erfolgt ist, wird eine erneuete "Alarm" ein neues Telegram anstossen
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

errazzor

Ok danke, dann muss ich mir das nochmal genau ansehen. Ich dachte eigentlich, "do always" würde genau das bewirken - ein erneutes ausführen des gleichen Befehls bei erneutem Trigger.


amenomade

#7
Zitat von: errazzor am 09 Januar 2020, 02:03:50
Ich dachte eigentlich, "do always" würde genau das bewirken - ein erneutes ausführen des gleichen Befehls bei erneutem Trigger.

So ist es auch. Nur... mit event-on-change-reading gibt es kein "bei erneutem Trigger" solange das Reading nicht geändert wird.

Mit attr repeatcmd auf dem DOIF kannst Dir trotzdem regelmässig ein Telegram schicken lassen, solange der Wassersensor bei Alarm bleibt. Wäre auch eine Alternative.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

errazzor

Ich merke gerade - das denken funktioniert zu dieser Uhrzeit nicht mehr so richtig. Natürlich hast Du Recht  :)
Vielen Dank für den Hinweis !