[gelöst] Kann keine zwei FHEM-Befehle in ein notify eingeben?

Begonnen von kosi, 11 Januar 2024, 18:01:18

Vorheriges Thema - Nächstes Thema

kosi

Hallo!

Ich habe ein notify geschrieben und bin gerade dabei, einen teil davon etwas komplizierter zu gestalten. Dafür habe ich ein neues notify in kombination mit einem dummy angelegt, bin dabei aber auf ein Problem gestoßen.

Ich vereinfache etwas (das Problem tritt trotzdem noch auf):
Ich habe drei dummys, test1, test2, test3

und folgendes notify:

define n_TEST notify test3:state:.* {if((ReadingsVal("test3","state","-") eq "off")) {fhem("set test1 off;set test2 off")}}
Dabei bekomme ich den Error:

Can't find string terminator '"' anywhere before EOF at (eval 6341) line 1.
Habe auch schon gelesen, dass Fhem zweimal das ; benötigt. Wenn ich es jedoch so probiere

define n_TEST notify test3:state:.* {if((ReadingsVal("test3","state","-") eq "off")) {fhem("set test1 off;;set test2 off")}}
Dann lässt sich zwar ein notify definieren, bei einem Trigger wird jedoch mit test1 gar nichts gemacht und test2 wird auf
off")}} gesetzt.

Lustigerweise hat es bei meinem ersten Notify, dass, das ich erweitern will, mit einfachem ; ganz problemlos funktioniert.

Ich bin etwas verloren. Vielen Dank für jede Hilfe!

Jamo

#1
Hallo Kosi,
- den trigger auf on/off geht ohne das state, das ist bei fhem ein Sonderfall. Also einfach "n_TEST test3:.*"
- die doppelten klammern um Readingsval koennen auch weg. Also if (ReadingsVal("test3","state","-") eq "off") ..
- Die Abfrage auf ReadingsVal("test3","state","-") eq "off" ist unnötig, wenn das notify nur auf das off triggered, also "n_TEST test3:off"
- die doppelten ;; sind nur nötig bei eingabe in der Kommandozeile.
- set test 1 off und set test 2 off kann man zusammenfassen, als set test1,test2 off

Also für die Kommandozeile:defmod n_TEST notify test3:off set test1,test2 off
Bullseye auf iNUC, Homematic + HMIP(UART/HMUSB), Debmatic, HUEBridge, Zigbee/Conbee III, FB7690, Alexa (fhem-lazy), Livetracking, LaCrosse JeeLink, LoRaWan / TTN / Chirpstack, Sonos, ESPresence

passibe

Jetzt war Jamo schneller, hier trotzdem mal meine Antwort (Jamo hat natürlich Recht, dass die if-ReadingsVal-Abfrage unnötig ist, aber das scheint hier nicht das Problem zu sein).

Ich glaube irgendetwas ist bei dir an einer anderen Stelle falsch. Bei mir läuft dein notify ohne Probleme.

Mal unabhängig davon ist es meistens am einfachsten, wenn du zuerst ein leeres notify definierst. Dann musst du dich nämlich nicht mit doppelten Semikola o.ä. rumschlagen.
Also:
define n_TEST notify test3:state:.* {}
Dann das notify in FHEMWeb mit Klick auf "DEF" füttern:
test3:state:.* {if (ReadingsVal("test3","state","-") eq "off") {fhem("set test1 off; set test2 off")}}
Das müsste eigentlich funktionieren, wenn nicht der Fehler – wie ich vermute – anderswo liegt.
Was ich geändert habe, damit der Code ein bisschen schöner ist (dürfte aber die Funktionalität nicht beeinträchtigen):
1. Leerzeichen nach if weg
2. Unnötige Klammer um ReadingsVal weg
3. Leerzeichen zwischen den beiden FHEM-Befehlen hinzugefügt

Wenn der Fehler immer noch auftritt, gib uns vielleicht mal ein list aller drei test-dummies. Sonst funktioniert FHEM bei dir aber ohne Probleme?

kosi

Hallo!

Danke für die Vereinfachungen! Ich war es schon so gewohnt, diese Definition mit so vielen Klammern zu schreiben, weil ich in dem wirklichen Notify im if zwei Bedingungen abfragen muss und dann auch noch ein else einbauen muss!

Habe beide vereinfachten Lösungen trotzdem interessehalber probiert, keine davon funktioniert :(

Ein list aller drei test-dummies:

Internals:
   FUUID      65a016da-f33f-13df-b8f5-dc672c47fa11c7bc
   NAME       test1
   NR         239
   STATE      on
   TYPE       dummy
   eventCount 1
   READINGS:
     2024-01-11 19:30:53   state           on
Attributes:

Internals:
   FUUID      65a016e0-f33f-13df-594a-e6b4d6c777574abc
   NAME       test2
   NR         240
   STATE      on
   TYPE       dummy
   eventCount 1
   READINGS:
     2024-01-11 19:30:56   state           on
Attributes:

Internals:
   FUUID      65a01c9f-f33f-13df-dfc6-c64cce189fbd3fe2
   NAME       test3
   NR         241
   STATE      off
   TYPE       dummy
   eventCount 5
   READINGS:
     2024-01-11 19:33:42   state           off
Attributes:

betateilchen

Zitat von: kosi am 11 Januar 2024, 19:35:48Danke für die Vereinfachungen!

Es geht noch einfacher, wenn man statt

fhem("set test1 off; set test2 off")
das hier verwendet:

fhem("set test1,test2 off")
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

passibe

Zitat von: kosi am 11 Januar 2024, 19:35:48keine davon funktioniert
Welche Fehlermeldung bekommst du jetzt?

Wie gesagt, ich glaube immer noch nicht, dass das an deinem notify liegt. Hier ist irgendetwas anderes falsch. Funktioniert denn sonst alles (z.B. andere notifys)? Hast du die fhem.cfg von Hand bearbeitet?

Gib uns vielleicht mal noch ein list von deinem notify.

betateilchen

Zitat von: passibe am 11 Januar 2024, 19:03:07test3:state:.*

Die regex ist falsch.

Es sollte besser

test3.*
heißen.

Warum? Weil "state" nicht als reading im Event auftaucht.
Wenn man das notify von FHEM direkt aus dem EventMonitor anlegen lässt, stolpert man nicht in solche Fallen.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

kosi

Zitat von: passibe am 11 Januar 2024, 20:20:47Welche Fehlermeldung bekommst du jetzt?

Gar keinen, das definieren an sich funktioniert. Nur dann beim Ausführen ist nichts passiert.

Wenn ich die richtige regex von betateilche verwende, funktioniert es. Mit der falschen Regex funktioniert es nur wenn man nur einen einzelnen Fhem Befehl ausführen will.

Habe diese regex dann auch auf das eigentliche notify angewendet, trotzdem noch der gleiche fehler. Habe dann probiert das notify zuerst leer zu definieren und dann nachher richtig zu definieren. Da kommt keine Fehlermeldung, scheint bis jetzt auch zu funktionieren.

Keine Ahnung wo jetzt der Fehler gelegen ist bzw. immer noch liegt, aber es scheint zu funktionieren. Danke!