Hallo Leute,
hoff es ist hier richtig, habe keine untergruppe für Notify gefunden.
ich habe mir ein Notify mit eventmonitoring angelegt. Dieses Schalter nun auch so wie es soll. Nun würde ich gerne noch ein zusätzliche abfrage mit einbauen. Also als "elsif" nur leider schaltet nun garnichts mehr. Vielleicht hat jemand eine Idee und im WIKI steht leider nix genaues dirn.
Also dieses Schalter so wie es soll:
defmod MQTT2_zigbee_Mehrfachschalter1_notify_1 notify MQTT2_zigbee_Mehrfachschalter1:action:.1_single set IT_0FF000000F on;;\
jetzt hatte ich es umgebaut in sowas:
MQTT2_zigbee_Mehrfachschalter1:action:.* { if ($EVENT eq ".1_single") {fhem("set IT_0FF000000F on");
{
elsif ($EVENT eq ".1_double") {fhem ("set IT_0FF000000F on");
InternalTimer(gettimeofday() +60 "fhem", "set IT_0FF000000F on");
}
}
Leider klappt nun garnix. Das mit InternalTimer(gettimeofday) habe ich unter Google gefunden.
Danke schon mal im vorraus
Du weißt das fhem auf perl basiert?
Wie wäre es mit "perl if else" in die Suchmaschine Deines Vertrauens?
Oder hier mal die Suchfunktion benutzt?
https://forum.fhem.de/index.php?topic=90170.msg826258#msg826258 (https://forum.fhem.de/index.php?topic=90170.msg826258#msg826258)
Ich suche nochmal weiter schon mal danke.
my $GesStatus = (Value("Anwesenheit"));
if ($GesStatus eq "niemandda")
{
fhem("set A off");
}
elsif ($GesStatus eq "jemandda")
{
fhem("set A on");
}
Hallo,
schau Dir hier (https://wiki.fhem.de/wiki/Notify#Syntax) auch mal die Tabellen mit den Beispielen an, was und wie in $EVENT und $EVTPART1 steht.
Im Suchmuster würde ich genau die zwei Events angeben, auf die später in Perl auch verglichen wird und nicht immer auf alles (andere) "lauschen".
Warum InternalTimer und nicht einfach sleep 60?
{fhem ("set IT_0FF000000F on;sleep 60;set IT_0FF000000F on");
Gruß Thomas
Zitat von: Wasserwerk33 am 24 Januar 2025, 14:21:50Vielleicht hat jemand eine Idee und im WIKI steht leider nix genaues dirn.
Ich finde hier steht alles drin? https://wiki.fhem.de/wiki/Notify
Zitat von: Otto123 am 24 Januar 2025, 17:23:28Ich finde hier steht alles drin? https://wiki.fhem.de/wiki/Notify
Weiß nicht. Hier würde mir bspw. ein mustergültiges Beispiel fehlen, welches mit NOTIFYDEV vereinbar ist, wenn nur auf genau zwei (oder mehr) Events getriggert werden soll.
schreib eins auf ich trage es ein :)
Keine Ahnung ¯\_(ツ)_/¯, sowas in der Art:
defmod MQTT2_zigbee_Mehrfachschalter1_notify_1 notify MQTT2_zigbee_Mehrfachschalter1:action:.1_single|MQTT2_zigbee_Mehrfachschalter1:action:.1_double {Debug $EVTPART1}
um im Faden zu bleiben?
Hallo
so habe heute wieder zeit dafür.
Aber verstehen tu ich dieses überhaupt nicht, mit Perl tu ich mich so schwer ich will es ja auch verstehen.
an diesem habe ich mach dran entlang gehangelt.
define nt.sonnenlichtpersolar notify sv:currentPower.* { \
if ($EVTPART1 < 3000 ) {\
fhem('set Flur1 Auf')\
}else {\
if ($EVTPART1 > 5000 ) {\
fhem('set Flur1 Ab')\
} \
}\
}
Das ist meiner. Aber er reagiert nicht mal auf die Taster betätigung.
MQTT2_zigbee_Mehrfachschalter1:action:.* {
if ($EVTPART1 eq ".1_single") {
fhem("set IT_0FF000000F on")
}else {
if ($EVTPART1 eq ".1_double") {
fhem ("set IT_0FF000000F on;sleep 60;set IT_0FF000000F on")
}
}
}
wo ist den mein Fehler. ich habe es doch genauso abgeschrieben wie im Wiki
Zitat von: Wasserwerk33 am 26 Januar 2025, 10:09:59Das ist meiner. Aber er reagiert nicht mal auf die Taster betätigung.
MQTT2_zigbee_Mehrfachschalter1:action:.* {
if ($EVTPART1 eq ".1_single") {
Bist Du sicher, dass es
.1_single heißt und nicht
1_single, also ohne Punkt??
Zitat von: Wasserwerk33 am 26 Januar 2025, 10:09:59ich will es ja auch verstehen.
der Punkt steht weiter oben für "jedes Zeichen" im Suchmuster "MQTT2_zigbee_Mehrfachschalter1:action:.1_single" das Readings selbst wird auf "1_single" gesetzt. Du vergleichst Strings :) keine Suchmuster.
Der Event selbst hat an der Stelle ein Leerzeichen (kannst Du Dir im Eventviewer anschauen) das Leerzeichen wird im Suchmuster mit einem . gefunden.
Habe es auch schon Punkt gemacht.
Also das der schalter ankommt kann ich im event sehen. das Notify reagiert garnicht.
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 battery: 81
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 operation_mode: event
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 action: 1_single
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 voltage: 2900
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 linkquality: 116
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 linkquality: 116
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 operation_mode: event
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 action: 1_single
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 voltage: 2900
2025-01-26 10:27:17 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 battery: 81
2025-01-26 10:27:20 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 battery: 81
[color=blue]2025-01-26 10:27:20 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 action: 1_double
2025-01-26 10:27:20 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 operation_mode: event
2025-01-26 10:27:20 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 voltage: 2900
2025-01-26 10:27:20 MQTT2_DEVICE MQTT2_zigbee_Mehrfachschalter1 linkquality: 116[/color]
Zitat von: Otto123 am 26 Januar 2025, 10:27:09Zitat von: Wasserwerk33 am 26 Januar 2025, 10:09:59ich will es ja auch verstehen.
der Punkt steht weiter oben für "jedes Zeichen" im Suchmuster "MQTT2_zigbee_Mehrfachschalter1:action:.1_single" das Readings selbst wird auf "1_single" gesetzt. Du vergleichst Strings :) keine Suchmuster.
Der Event selbst hat an der Stelle ein Leerzeichen (kannst Du Dir im Eventviewer anschauen) das Leerzeichen wird im Suchmuster mit einem . gefunden.
Das verstehe ich nicht?? Bin zu Blond
Zitat von: Wasserwerk33 am 26 Januar 2025, 10:29:05das Notify reagiert garnicht.
ich vermute eher Dein Code tut nicht was er soll. Das notify wird doch bestimmt getriggert?
Zitat von: Wasserwerk33 am 26 Januar 2025, 10:31:56Das verstehe ich nicht?? Bin zu Blond
Tja gegen "Blond" gibts wohl kein Mittel. :) Was verstehst Du denn nicht? Im Wiki ist es doch genau erklärt, auch wie man alles testen kann.
Mach Dir doch einfach mal einen Log oder einen Print in deinen code,
und schau Dir dann im Logfile an was passiert. Dann kannst Du das doch ganz einfach debuggen, und siehst welchen Wert EVTPART1 hat. Also etwa so:
MQTT2_zigbee_Mehrfachschalter1:action:.* {
Log 3, "EVTPART1=$EVTPART1";
if ($EVTPART1 eq ".1_single") {
fhem("set IT_0FF000000F on")
}else {
if ($EVTPART1 eq ".1_double") {
fhem ("set IT_0FF000000F on;sleep 60;set IT_0FF000000F on")
}
}
}
Im device MQTT2_zigbee_Mehrfachschalter1 evtl. noch das Attribut event-on-change-reading gesetzt?
Das würde dann ggf. erklären, warum bei wiederholten 1_single kein Event und damit kein Triggern des notify ausgelöst wird.
so nun brauch ich mal eine genaue antwort warum es nun funktoniert und leider vorher nicht
das habe ich eingefügt
attr MQTT2_zigbee_Mehrfachschalter1_notify_1 event-on-change-reading action
es schaltet sogar auf double nur fährt es noch 60sek noch nicht runter
Zitat von: Nobbynews am 26 Januar 2025, 10:47:46Im device MQTT2_zigbee_Mehrfachschalter1 evtl. noch das Attribut event-on-change-reading gesetzt?
Das würde dann ggf. erklären, warum bei wiederholten 1_single kein Event und damit kein Triggern des notify ausgelöst wird.
in der einfachen schaltung hat es aber ohne event on change reading immer wieder getriggert.
Zitat von: Wasserwerk33 am 26 Januar 2025, 10:49:09das habe ich eingefügt
attr MQTT2_zigbee_Mehrfachschalter1_notify_1 event-on-change-reading action
So war das nicht gemeint.
Bitte wieder löschen.
Das attribut verhindert, dass bei gleichem Wert des readings
action ein Event ausgelöst wird.
Und ohne Event halt kein Triggern des notify.
Bitte mal ein list vom device.
Sonst wird das nix.
Zitat von: Wasserwerk33 am 26 Januar 2025, 10:49:09es schaltet sogar auf double nur fährt es noch 60sek noch nicht runter
fhem ("set IT_0FF000000F on;sleep 60;set IT_0FF000000F on")
Ist es richtig hier jeweils den gleichen Befehl abzusetzen?
Also es läuft auch bei mehrfacher auslösung des selben Befehls. Es schaltet das garagentor wieder on. Einmal fährt es mit on= hoch; das andere mal mit on=runter. Es ist ein 433Mhz schalter mal gewesen in der Garage aber der ist defekt. Nur noch der Empfänger ist am Hörmann tor angeschlossen.
Genauso fährt es nun nach 60 sek bei double triggern wieder automatisch runter. Hatte ein ; vergessen/gelöscht beim experiementieren
Internals:
CFGFN
DEF MQTT2_zigbee_Mehrfachschalter1:action:.* {
if ($EVTPART1 eq "1_single") {
fhem("set IT_0FF000000F on")
}else {
if ($EVTPART1 eq "1_double") {
fhem("set IT_0FF000000F on;sleep 60;set IT_0FF000000F on")
}
}
}
FUUID 67937dab-f33f-c6b9-5325-e0f2eb7a37e112a5
NAME MQTT2_zigbee_Mehrfachschalter1_notify_1
NOTIFYDEV MQTT2_zigbee_Mehrfachschalter1
NR 11830
NTFY_ORDER 50-MQTT2_zigbee_Mehrfachschalter1_notify_1
REGEXP MQTT2_zigbee_Mehrfachschalter1:action:.*
STATE 2025-01-26 10:55:10
TRIGGERTIME 1737885310.10845
TYPE notify
eventCount 29
READINGS:
2025-01-26 10:25:57 state active
2025-01-26 10:55:10 triggeredByDev MQTT2_zigbee_Mehrfachschalter1
2025-01-26 10:55:10 triggeredByEvent action: 1_single
Attributes:
event-on-change-reading action
room Draußen
könnte man dieses mit ins WIki packen??
Zitat von: Wasserwerk33 am 26 Januar 2025, 11:00:50Attributes:
event-on-change-reading action
das ist Unfug und hat im notify so nix zu suchen - stört nicht und hilft nicht :)
Du
könntest (Du musst nicht!) das im mqtt Device setzen um da die Events zu begrenzen.
wenn ich das attr unter dem Mehrfachschalter setzte triggert der schalter nur einmal. Sobald ich es wieder unter dem notiy setzte reagiert es jedes mal wenn ich den Taster nur single oder double drücke.
so sieht die list des Schalters aus
Internals:
CFGFN
CID zigbee_Mehrfachschalter1
DEF zigbee_Mehrfachschalter1
FUUID 679235cd-f33f-c6b9-44b5-1ee194ce33bdbd84
IODev myBroker
LASTInputDev myBroker
MSGCNT 489
NAME MQTT2_zigbee_Mehrfachschalter1
NR 11130
STATE Action: 1_single Batterie: 81 %
TYPE MQTT2_DEVICE
eventCount 486
myBroker_CONN myBroker_127.0.0.1_52326
myBroker_MSGCNT 489
myBroker_TIME 2025-01-26 11:15:42
OLDREADINGS:
READINGS:
2025-01-23 13:27:57 IODev myBroker
2025-01-26 11:15:42 action 1_single
2025-01-23 13:27:57 associatedWith MQTT2_zigbee2mqtt
2025-01-24 12:37:40 attrTemplateVersion 20200904
2025-01-26 11:15:42 battery 81
2025-01-26 11:15:42 linkquality 112
2025-01-26 11:15:42 operation_mode event
2025-01-26 11:15:42 voltage 2900
Attributes:
alias Mehrfachschalter Garage
devicetopic zigbee2mqtt/Mehrfachschalter1
event-on-change-reading action
icon control_home
model zigbee2mqtt_scene_controller
readingList $DEVICETOPIC:.* { json2nameValue($EVENT) }
room MQTT2_DEVICE
stateFormat Action: action Batterie: battery %
so vom Notify
Internals:
CFGFN
DEF MQTT2_zigbee_Mehrfachschalter1:action:.* {
if ($EVTPART1 eq "1_single") {
fhem("set IT_0FF000000F on")
}else {
if ($EVTPART1 eq "1_double") {
fhem("set IT_0FF000000F on;sleep 60;set IT_0FF000000F on")
}
}
}
FUUID 67937dab-f33f-c6b9-5325-e0f2eb7a37e112a5
NAME MQTT2_zigbee_Mehrfachschalter1_notify_1
NOTIFYDEV MQTT2_zigbee_Mehrfachschalter1
NR 11830
NTFY_ORDER 50-MQTT2_zigbee_Mehrfachschalter1_notify_1
REGEXP MQTT2_zigbee_Mehrfachschalter1:action:.*
STATE 2025-01-26 11:14:19
TRIGGERTIME 1737886459.29802
TYPE notify
eventCount 29
READINGS:
2025-01-26 10:25:57 state active
2025-01-26 11:14:19 triggeredByDev MQTT2_zigbee_Mehrfachschalter1
2025-01-26 11:14:19 triggeredByEvent action: 1_single
Attributes:
room Draußen
Zitat von: Wasserwerk33 am 26 Januar 2025, 11:19:02wenn ich das attr unter dem Mehrfachschalter setzte triggert der schalter nur einmal. Sobald ich es wieder unter dem notiy setzte reagiert es jedes mal wenn ich den Taster nur single oder double drücke.
Das ist ein völlig korrektes Verhalten.
Daher ja meine Frage, ob das Attribut GESETZT ist.
Ich schrieb nicht, dass es gesetzt werden soll.
Also bitte wieder im MQTT2-device LÖSCHEN!!!
Und wie Otto schon schrieb: Im notify macht das ÜBERHAUPT KEINEN Sinn. Also auch hier bitte wieder LÖSCHEN!!
Auch wenn ich kein Pocorn mag.....
habe ich schon gelöscht.
ich lösche es nun nochmal komplett und baue es dann nochmal neu auf. Hatte es schonmal das es dann funktonierte und vorher wollte es einfach nicht.
Vielleicht hilft es. Den es müsste ja funktonieren sagt ihr.
Zitat von: Wasserwerk33 am 26 Januar 2025, 11:19:02 jedes mal wenn ich den Taster nur single oder double drücke.
wenn das Verhalten gewünscht ist, darf man event-on-change-reading nicht setzen
Guten MOrgen,
hatten gestern etwas Zeit mich um mein Notify zu kümmern. Hatte ja gesagt ich lösche es einfach nochmal und setzte es nochmal noch auf.
Nun läuft es. Weiß aber nicht wieso. Habe sogar noch ein Bereich mehr mit eingefügt. Es läuft nun ohne Probleme.
So sieht es nun aus.
Internals:
DEF MQTT2_zigbee_Mehrfachschalter1:action:.* {
if ($EVTPART1 eq "1_single") {
fhem("set IT_0FF000000F on")
}else {
if ($EVTPART1 eq "1_double") {
fhem("set IT_0FF000000F on;sleep 60;set IT_0FF000000F on")
}else {
if ($EVTPART1 eq "2_single") {
fhem("set IT_0FF000000F on;sleep 15;set IT_0FF000000F on")
}
}
}
}
FUUID 67937dab-f33f-c6b9-5325-e0f2eb7a37e112a5
NAME MQTT2_zigbee_Mehrfachschalter1_notify_1
NOTIFYDEV MQTT2_zigbee_Mehrfachschalter1
NR 189
NTFY_ORDER 50-MQTT2_zigbee_Mehrfachschalter1_notify_1
REGEXP MQTT2_zigbee_Mehrfachschalter1:action:.*
STATE Letzte Action: action: 1_single
TRIGGERTIME 1738736335.52022
TYPE notify
READINGS:
2025-01-29 07:24:43 state active
2025-02-05 07:18:55 triggeredByDev MQTT2_zigbee_Mehrfachschalter1
2025-02-05 07:18:55 triggeredByEvent action: 1_single
Attributes:
room Draußen
stateFormat Letzte Action: triggeredByEvent
Es gibt in Perl auch elsif ;) statt:
else{ if() {}}
EDIT: und evtl. tut ein abschließendes else <- wenn nix von dem zuvor passt / anzuwenden und dort dann zumindest eine Logausgabe zu machen, nach dem Motto "das kam an, wurde aber nicht behandelt"... Dann kannst du später sehen, warum etwas nicht so gelaufen ist, wie erwartet, sollte es mal dazu kommen...
In etwa:
if(Bedingung1)
{
Ausführung 1
}
elsif(Bedingung 2)
{
Ausführung 2
}
elsif(Bedingung 3)
{
Ausführung 3
}
else
{
Logausgabe: unbehandelter Fall
}
Gruß, Joachim
Es gibt auch noch "return;", wenn man nach einem Zweig schon fertig ist ;) .
Dann ist alles danach automatisch ein logisches "else".