FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Wasserwerk33 am 24 Januar 2025, 14:21:50

Titel: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 24 Januar 2025, 14:21:50
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
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: rabehd am 24 Januar 2025, 14:28:17
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)
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 24 Januar 2025, 14:35:32
Ich suche nochmal weiter schon mal danke.
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: rabehd am 24 Januar 2025, 14:41:09
  my $GesStatus = (Value("Anwesenheit"));
  if ($GesStatus eq "niemandda")
  {
    fhem("set A off");
 }
  elsif ($GesStatus eq "jemandda")
  {
fhem("set A on");
  }
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: TomLee am 24 Januar 2025, 14:49:32
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
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Otto123 am 24 Januar 2025, 17:23:28
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
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: TomLee am 24 Januar 2025, 19:07:30
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.
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Otto123 am 24 Januar 2025, 21:22:17
schreib eins auf ich trage es ein :)
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: TomLee am 24 Januar 2025, 21:47:52
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?
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 26 Januar 2025, 10:09:59
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
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Nobbynews am 26 Januar 2025, 10:23:42
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??
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Otto123 am 26 Januar 2025, 10:27:09
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.
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 26 Januar 2025, 10:29:05
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]
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 26 Januar 2025, 10:31:56
Zitat von: Otto123 am 26 Januar 2025, 10:27:09
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.

Das verstehe ich nicht?? Bin zu Blond
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Otto123 am 26 Januar 2025, 10:34:30
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.
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Jamo am 26 Januar 2025, 10:38:31
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")
 }
 }
}
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Nobbynews am 26 Januar 2025, 10:47:46
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.
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 26 Januar 2025, 10:49:09
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
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 26 Januar 2025, 10:50:14
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.
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Nobbynews am 26 Januar 2025, 10:52:57
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.
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Nobbynews am 26 Januar 2025, 10:54:44
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?
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 26 Januar 2025, 11:00:50
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??
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Otto123 am 26 Januar 2025, 11:03:05
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.
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 26 Januar 2025, 11:19:02
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
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Nobbynews am 26 Januar 2025, 11:23:13
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.....
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 26 Januar 2025, 11:25:50
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.

Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Otto123 am 26 Januar 2025, 11:47:33
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
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Wasserwerk33 am 05 Februar 2025, 07:31:15
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
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: MadMax-FHEM am 05 Februar 2025, 09:13:17
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
Titel: Aw: notify: 2. Abfrage mit einbinden.
Beitrag von: Beta-User am 05 Februar 2025, 09:30:55
Es gibt auch noch "return;", wenn man nach einem Zweig schon fertig ist ;) .

Dann ist alles danach automatisch ein logisches "else".