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