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.
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
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
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! ::)
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.