[Gelöst] Event triggert unbeabsichtigt auch andere Notifies

Begonnen von Kläwwerhäusle0.1, 05 April 2020, 18:00:56

Vorheriges Thema - Nächstes Thema

Kläwwerhäusle0.1

Hallo zusammen,

in den letzten gut sechs Wochen habe ich mich näherungsweise full-time mit FHEM (und soweit bisher relevant Perl) beschäftigt und die gewünschten Funktionen (soweit schon implementiert) auch alle hinbekommen - vielen Dank an alle, die in diesem Forum so engagiert ihr Wissen teilen!

An einer Stelle komme ich aber seit Tagen nicht zum Ziel (wenngleich immer mal ein Stückchen voran): ich habe eine ganze Reihe ZWave-Tür- bzw. Fenstersensoren von Sensatives, die ich mit notifies abfrage und die dann auch die gewünschte Funktion auslösen.

Allerdings werden dabei (durch eigentlich unbeteiligte notifies) zahllose weitere Aktivitäten ausgelöst, die zwar meist (aber nicht immer) ohne reale Auswirkung und damit in der Praxis meist unbemerkt bleiben (also z.B. wird ein Rolladen, der schon unten ist, nochmal auf unten gesetzt o.ä.). Aber sie beschäftigen das System, produzieren Events und Log-Einträge und bewirken manchmal eben doch tatsächliche ungewollte Aktionen.

Je nach Sensor sind es unterschiedliche "Neben-Reaktionen", aber in einem Fall habe ich mal drei notifies (den Rechtmäßigen und zwei Schwarzfahrer) näher untersucht. Alle drei notifies lasse ich per ,,Log 1 notify-Kennung Event:$EVENT Device:$NAME" sowie über ein Dummy-Device status_BT mitschreiben, was sie machen und da kommen Konstellationen heraus, die ich mir (jedenfalls derzeit noch) nicht erklären kann (die ich aber in einfachen Versuchsanordnungen stabil reproduzieren kann).

So wird z.B. beim Schließen der Tür das notify n_TM_BT ordnungsgemäß getriggert, aber zusätzlich auch noch das notify für das Fenster n_FM_BT und das für die structure der beiden Fenster in einem anderen Raum n_FM_BG.

Das List vom richtigerweise getriggerten notify plus das List vom Sensor:

Internals:
   DEF        TM_BT:open|closed

{ Log 1, "nTMBT Event: $EVENT Device: $NAME";
  my $status_BT = ReadingsVal("status_BT","state","000");
  my $helligkeit = ReadingsNum("BFM_BT","luminance","0","0");
  my $PH_pct = ReadingsNum("PH_pct","state","0","0");

  if ($EVENT eq "open" and $NAME eq "TM_BT")
     { if (ReadingsVal("ER_BT","state","000") eq "off" and   
           ReadingsVal("TZ","state","000") eq "Tag" and   
           $helligkeit >= 40
          ) 
          { fhem("set PH_BT_D pct 0");
            $status_BT = $status_BT." Tür_auf_kein_Licht"
          }
       else
          { fhem("set PH_BT_D pct 50");
            fhem("set PH_BT_D on-for-timer 600");
            $status_BT = $status_BT." Tür_auf_Licht_an"
          }
     };

  if ($EVENT eq "closed" and $NAME eq "TM_BT") { $status_BT = $status_BT." Tür_zu" };
     
  $status_BT = $status_BT." nTMBT_was_here";
  fhem ("set status_BT ".$status_BT)
}
   FUUID      5e89066e-f33f-c885-c032-1a75136ec22676a4
   NAME       n_TM_BT
   NR         357
   NTFY_ORDER 50-n_TM_BT
   REGEXP     TM_BT:open|closed
   STATE      2020-04-05 17:26:45
   TRIGGERTIME 1586100405.86546
   TYPE       notify
   READINGS:
     2020-04-05 17:18:50   state           active
Attributes:
   room       07_BT
   verbose    5


Internals:
   Aeotec_Dongle_MSGCNT 6
   Aeotec_Dongle_RAWMSG 0004002d03300300
   Aeotec_Dongle_TIME 2020-04-05 17:26:45
   DEF        c6189c8c 45
   FUUID      5e8904d6-f33f-c885-2dbc-4789d2b2f0ec05ed
   IODev      Aeotec_Dongle
   LASTInputDev Aeotec_Dongle
   MSGCNT     6
   NAME       TM_BT
   NR         355
   STATE      closed
   TYPE       ZWave
   ZWaveSubDevice no
   homeId     c6189c8c
   isWakeUp   1
   nodeIdHex  2d
   READINGS:
     2020-04-05 00:11:36   CMD             ZW_APPLICATION_UPDATE
     2020-04-05 00:11:35   alarm           HomeSecurity: Tampering - Invalid Code, arg 000
     2020-04-05 00:06:21   battery         100 %
     2020-04-05 00:06:21   batteryPercent  100
     2020-04-05 00:06:21   batteryState    ok
     2020-04-05 00:06:15   model           Sensative Strips
     2020-04-05 00:06:15   modelConfig     sensative/strips.xml
     2020-04-05 00:06:15   modelId         019a-0003-0003
     2020-04-05 17:26:45   reportedState   closed
     2020-04-05 17:26:45   state           closed
     2020-04-05 00:11:39   timeToAck       0.025
     2020-04-05 00:11:39   transmit        OK
     2020-04-05 00:06:17   zwavePlusInfo   version:01 role:SleepingReportingSlave node:Z-Wave+Node installerIcon:0c07 userIcon:0c07
Attributes:
   IODev      Aeotec_Dongle
   classes    ZWAVEPLUS_INFO VERSION MANUFACTURER_SPECIFIC SENSOR_BINARY CONFIGURATION ALARM DEVICE_RESET_LOCALLY ASSOCIATION ASSOCIATION_GRP_INFO BATTERY WAKE_UP POWERLEVEL
   event-on-change-reading state
   room       07_BT,ZWave
   vclasses   ALARM:4 ASSOCIATION:2 ASSOCIATION_GRP_INFO:1 BATTERY:1 CONFIGURATION:1 DEVICE_RESET_LOCALLY:1 MANUFACTURER_SPECIFIC:1 POWERLEVEL:1 SENSOR_BINARY:1 VERSION:2 WAKE_UP:2 ZWAVEPLUS_INFO:2


Und die beiden Notifies, die (in dieser Situation) nicht getriggert werden sollen - plus ihre Sensoren:

Internals:
   DEF        FM_BT:open|closed
{ Log 1, "nFMBT Event: $EVENT Device: $NAME";
  my $status_BT = ReadingsVal("status_BT","state","000");

  if   ($EVENT eq "open" and $NAME eq "FM_BT")
       { $status_BT = $status_BT." Fenster_auf";
         fhem("set MR_BT on")
       };

  if   ($EVENT eq "closed" and $NAME eq "FM_BT")   
       { $status_BT = $status_BT." Fenster_zu";
         fhem("set MR_BT off")
       };
  $status_BT = $status_BT." nFMBT_was_here";
  fhem ("set status_BT ".$status_BT)
}
   FUUID      5e88e933-f33f-c885-2487-bfaec56651b2a78e
   NAME       n_FM_BT
   NR         354
   NTFY_ORDER 50-n_FM_BT
   REGEXP     FM_BT:open|closed
   STATE      2020-04-05 17:26:45
   TRIGGERTIME 1586100405.84582
   TYPE       notify
   READINGS:
     2020-04-05 17:17:48   state           active
Attributes:
   room       07_BT
   verbose    5


Internals:
   DEF        c6189c8c 44
   FUUID      5e87951b-f33f-c885-30dc-ab1814a847c7cc1d
   IODev      Aeotec_Dongle
   NAME       FM_BT
   NR         352
   STATE      closed
   TYPE       ZWave
   ZWaveSubDevice no
   homeId     c6189c8c
   nodeIdHex  2c
   READINGS:
     2020-04-03 21:59:43   CMD             ZW_APPLICATION_UPDATE
     2020-04-03 21:59:42   alarm           HomeSecurity: Tampering - Invalid Code, arg 000
     2020-04-03 21:57:21   battery         100 %
     2020-04-03 21:57:21   batteryPercent  100
     2020-04-03 21:57:21   batteryState    ok
     2020-04-03 21:57:16   model           Sensative Strips
     2020-04-03 21:57:16   modelConfig     sensative/strips.xml
     2020-04-03 21:57:16   modelId         019a-0003-0003
     2020-04-05 12:39:19   reportedState   closed
     2020-04-05 12:39:19   state           closed
     2020-04-04 18:40:49   timeToAck       0.025
     2020-04-04 18:40:49   transmit        OK
     2020-04-04 18:40:47   wakeup          notification
     2020-04-03 21:57:17   zwavePlusInfo   version:01 role:SleepingReportingSlave node:Z-Wave+Node installerIcon:0c07 userIcon:0c07
Attributes:
   IODev      Aeotec_Dongle
   classes    ZWAVEPLUS_INFO VERSION MANUFACTURER_SPECIFIC SENSOR_BINARY CONFIGURATION ALARM DEVICE_RESET_LOCALLY ASSOCIATION ASSOCIATION_GRP_INFO BATTERY WAKE_UP POWERLEVEL
   event-on-update-reading state
   room       07_BT,ZWave
   vclasses   ALARM:4 ASSOCIATION:2 ASSOCIATION_GRP_INFO:1 BATTERY:1 CONFIGURATION:1 DEVICE_RESET_LOCALLY:1 MANUFACTURER_SPECIFIC:1 POWERLEVEL:1 SENSOR_BINARY:1 VERSION:2 WAKE_UP:2 ZWAVEPLUS_INFO:2


Internals:
   DEF        FM_BG:open|closed
{ Log 1, "nFMBG Event: $EVENT Device: $NAME";
  my $status_BT = ReadingsVal("status_BT","state","000");
  if ($EVENT eq "open" and $NAME eq "FM_BG")
     { fhem("set MR_BG on");
       $status_BT = $status_BT." FMBG_open"
     };
  if ($EVENT eq "closed"and $NAME eq "FM_BG")
     { fhem("set MR_BG off");
       $status_BT = $status_BT." FMBG_closed"
     };
  $status_BT = $status_BT." nFMBG_was_here";
  fhem ("set status_BT ".$status_BT)
}
   FUUID      5e72a1ec-f33f-c885-ab41-40daf6b97be7ca93
   NAME       n_FM_BG
   NR         194
   NTFY_ORDER 50-n_FM_BG
   REGEXP     FM_BG:open|closed
   STATE      2020-04-05 17:26:45
   TRIGGERTIME 1586100405.84089
   TYPE       notify
   READINGS:
     2020-04-05 17:17:04   state           active
Attributes:
   room       01_BG
   verbose    5


Internals:
   ATTR       Mehrfachsensor
   CHANGEDCNT 0
   DEF        Mehrfachsensor FM_BG1 FM_BG2
   FUUID      5e70b903-f33f-c885-c47d-7864e8854390b283
   NAME       FM_BG
   NR         183
   NTFY_ORDER 50-FM_BG
   STATE      open
   TYPE       structure
   READINGS:
     2020-04-05 01:07:50   LastDevice      FM_BG1
     2020-04-05 01:07:50   LastDevice_Abs  FM_BG1
     2020-04-05 01:07:50   state           open
Attributes:
   clientstate_behavior relative
   clientstate_priority open closed
   disable    0
   event-on-change-reading state
   room       01_BG
   setStateIndirectly 1



Nach einmal "Tür auf" und "Tür zu" meldet status_BT dann:

Internals:
   FUUID      5e804d30-f33f-c885-ff4b-664cbfd77966f0f8
   NAME       status_BT
   NR         293
   STATE      . Tür_auf_kein_Licht nTMBT_was_here nFMBG_was_here nFMBT_was_here Tür_zu nTMBT_was_here
   TYPE       dummy
   READINGS:
     2020-04-05 17:26:45   state           . Tür_auf_kein_Licht nTMBT_was_here nFMBG_was_here nFMBT_was_here Tür_zu nTMBT_was_here
Attributes:
   room       07_BT


wobei der Punkt am Anfang der Startwert ist, den ich selbst über set vorgebe. "nFMBG_was_here" und "nFMBT_was_here" sollten eigentlich nicht darin vorkommen.

Im Logfile geben die beiden unerwünscht aktiven notify's auch ganz unumwunden zu, dass sie auf ein Event von TM_BT reagieren (dass sie irgendetwas tun, habe ich diesen beiden notifies durch m.E. eigentlich nicht erforderliche Abfragen auf $NAME schon mal abgewöhnt, aber getriggert werden sie dennoch).


2020.04.05 17:26:32 5: Triggering n_TM_BT
2020.04.05 17:26:32 4: n_TM_BT exec { Log 1, "nTMBT Event: $EVENT Device: $NAME";;
  my $status_BT = ReadingsVal("status_BT","state","000");;
  my $helligkeit = ReadingsNum("BFM_BT","luminance","0","0");;
  my $PH_pct = ReadingsNum("PH_pct","state","0","0");;

  if ($EVENT eq "open" and $NAME eq "TM_BT")
     { if (ReadingsVal("ER_BT","state","000") eq "off" and   
           ReadingsVal("TZ","state","000") eq "Tag" and   
           $helligkeit >= 40
          ) 
          { fhem("set PH_BT_D pct 0");;
            $status_BT = $status_BT." Tür_auf_kein_Licht"
          }
       else
          { fhem("set PH_BT_D pct 50");;
            fhem("set PH_BT_D on-for-timer 600");;
            $status_BT = $status_BT." Tür_auf_Licht_an"
          }
     };;

  if ($EVENT eq "closed" and $NAME eq "TM_BT") { $status_BT = $status_BT." Tür_zu" };;
     
  $status_BT = $status_BT." nTMBT_was_here";;
  fhem ("set status_BT ".$status_BT)
}
2020.04.05 17:26:32 1: nTMBT Event: open Device: TM_BT
2020.04.05 17:26:45 5: Triggering n_FM_BG
2020.04.05 17:26:45 4: n_FM_BG exec { Log 1, "nFMBG Event: $EVENT Device: $NAME";;
  my $status_BT = ReadingsVal("status_BT","state","000");;
  if ($EVENT eq "open" and $NAME eq "FM_BG")
     { fhem("set MR_BG on");;
       $status_BT = $status_BT." FMBG_open"
     };;
  if ($EVENT eq "closed"and $NAME eq "FM_BG")
     { fhem("set MR_BG off");;
       $status_BT = $status_BT." FMBG_closed"
     };;
  $status_BT = $status_BT." nFMBG_was_here";;
  fhem ("set status_BT ".$status_BT)
}
2020.04.05 17:26:45 1: nFMBG Event: closed Device: TM_BT
2020.04.05 17:26:45 5: Triggering n_FM_BT
2020.04.05 17:26:45 4: n_FM_BT exec { Log 1, "nFMBT Event: $EVENT Device: $NAME";;
  my $status_BT = ReadingsVal("status_BT","state","000");;

  if   ($EVENT eq "open" and $NAME eq "FM_BT")
       { $status_BT = $status_BT." Fenster_auf";;
         fhem("set MR_BT on")
       };;

  if   ($EVENT eq "closed" and $NAME eq "FM_BT")   
       { $status_BT = $status_BT." Fenster_zu";;
         fhem("set MR_BT off")
       };;
  $status_BT = $status_BT." nFMBT_was_here";;
  fhem ("set status_BT ".$status_BT)
}
2020.04.05 17:26:45 1: nFMBT Event: closed Device: TM_BT
2020.04.05 17:26:45 5: Triggering n_TM_BT
2020.04.05 17:26:45 4: n_TM_BT exec { Log 1, "nTMBT Event: $EVENT Device: $NAME";;
  my $status_BT = ReadingsVal("status_BT","state","000");;
  my $helligkeit = ReadingsNum("BFM_BT","luminance","0","0");;
  my $PH_pct = ReadingsNum("PH_pct","state","0","0");;

  if ($EVENT eq "open" and $NAME eq "TM_BT")
     { if (ReadingsVal("ER_BT","state","000") eq "off" and   
           ReadingsVal("TZ","state","000") eq "Tag" and   
           $helligkeit >= 40
          ) 
          { fhem("set PH_BT_D pct 0");;
            $status_BT = $status_BT." Tür_auf_kein_Licht"
          }
       else
          { fhem("set PH_BT_D pct 50");;
            fhem("set PH_BT_D on-for-timer 600");;
            $status_BT = $status_BT." Tür_auf_Licht_an"
          }
     };;

  if ($EVENT eq "closed" and $NAME eq "TM_BT") { $status_BT = $status_BT." Tür_zu" };;
     
  $status_BT = $status_BT." nTMBT_was_here";;
  fhem ("set status_BT ".$status_BT)
}
2020.04.05 17:26:45 1: nTMBT Event: closed Device: TM_BT

jump to the top


Und noch der Eventmonitor:


2020-04-05 17:26:32 structure PH_BT_D pct 0
2020-04-05 17:26:32 dummy status_BT . Tür_auf_kein_Licht nTMBT_was_here
2020-04-05 17:26:32 ZWave TM_BT open
2020-04-05 17:26:33 structure PH_BT_D off
2020-04-05 17:26:33 HUEDevice PH_BT_D4 reachable: 1
2020-04-05 17:26:33 structure PH_BT_D off
2020-04-05 17:26:33 HUEDevice PH_BT_D1 reachable: 1
2020-04-05 17:26:33 structure PH_BT_D off
2020-04-05 17:26:33 HUEDevice PH_BT_D3 reachable: 1
2020-04-05 17:26:33 structure PH_BT_D off
2020-04-05 17:26:33 HUEDevice PH_BT_D2 reachable: 1
2020-04-05 17:26:45 dummy status_BT . Tür_auf_kein_Licht nTMBT_was_here nFMBG_was_here
2020-04-05 17:26:45 dummy status_BT . Tür_auf_kein_Licht nTMBT_was_here nFMBG_was_here nFMBT_was_here
2020-04-05 17:26:45 KLF200 Velux sessionID: 7121
2020-04-05 17:26:45 KLF200 Velux queueSize: 1
2020-04-05 17:26:45 KLF200Node MR_HCS on
2020-04-05 17:26:45 KLF200 Velux sessionID: 7122
2020-04-05 17:26:45 KLF200 Velux queueSize: 2
2020-04-05 17:26:45 KLF200Node MR_KF off
2020-04-05 17:26:45 KLF200 Velux sessionID: 7123
2020-04-05 17:26:45 KLF200 Velux queueSize: 3
2020-04-05 17:26:45 KLF200Node MR_TS off
2020-04-05 17:26:45 dummy status_BT . Tür_auf_kein_Licht nTMBT_was_here nFMBG_was_here nFMBT_was_here Tür_zu nTMBT_was_here
2020-04-05 17:26:45 ZWave TM_BT closed
2020-04-05 17:26:45 KLF200 Velux queueSize: 2
2020-04-05 17:26:45 SONOSPLAYER SN_KF LastActionResult: SetVolume: 20
2020-04-05 17:26:45 SONOSPLAYER SN_KF LastActionResult: Pause: Success!
2020-04-05 17:26:45 SONOS sonos LastProcessAnswer: 1586100405
2020-04-05 17:26:46 KLF200Node MR_HCS sessionID: 7121


Ich wäre sehr dankbar, wenn sich das einer von Euch mal ansehen könnte und mir einen Hinweis geben könnte, in welche Richtung ich nach einer Lösung suchen sollte - dass es an mir liegt, ist klar, bei allen anderen klappt's ja auch ;). Besten Dank im Voraus.

Viele Grüße
Martin.

alanblack

Wenn ich das richtig sehen, ist Dein Problem eine Klammer bzw. eine nicht vorhandene:

REGEXP TM_BT:open|closed => Wenn TM_BT:open oder closed (also .*:closed) eintritt

ist nicht

REGEXP TM_BT:[open|closed] => Wenn TM_BT:open oder TM_BT:closed eintritt
FHEM 6.0 auf raspi3&ODROID XU4 mit HMLAN und HM-MOD-RPI-PCB, LaCrosse via JeeLink, COC868 und CUL433, Xiaomi Aqara+div. Zigbee via deCONZ, Dooya via SIGNALDuino, ZWave mit Danalock
Jeder Witz kann ein Einzeiler sein mit genügend Semikolons

Otto123

#2
Ich würde (open|closed) machen, das matched exakt auf beide Begriffe, [open|closed] matched auf die Buchstaben ;)
kann man sich hier gut anschauen https://regex101.com/

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

alanblack

Zitat von: Otto123 am 05 April 2020, 20:43:27
Ich würde (open|closed) machen, das matched exakt auf beide Begriffe, [open|closed] matched auf die Buchstaben ;)
Korrekt! Sorry für meinen Denkfehler und Danke an Otto!  ::)
FHEM 6.0 auf raspi3&ODROID XU4 mit HMLAN und HM-MOD-RPI-PCB, LaCrosse via JeeLink, COC868 und CUL433, Xiaomi Aqara+div. Zigbee via deCONZ, Dooya via SIGNALDuino, ZWave mit Danalock
Jeder Witz kann ein Einzeiler sein mit genügend Semikolons

Kläwwerhäusle0.1

Hallo Ihr beiden,

vielen Dank für die schnelle Antwort.

Ich hab's schon mal schnell in die notifies für 13 Sensoren eingebaut - und wie's zu erwarten war - funktioniert's!


Internals:
   NAME       status_BT
   READINGS:
     2020-04-05 20:56:13   state           . Tür_auf_Licht_an nTMBT_was_here Tür_zu nTMBT_was_here


Perfekt!

Das heisst, TM_BT:open|closed entspräche quasi (TM_BT:open)|.*:closed (auch, wenn man das so nie schreiben würde).

Das macht Sinn! Sorry, dass ich nicht selbst darauf gestoßen bin, gefunden habe ich es bei tagelanger Suche (natürlich in verschiedene Richtungen) leider nicht. Aber vielleicht findet es der Nächste mit dem Problem ja jetzt im Forum ;-)

Herzlichen Dank!

Viele Grüße
Martin.