Hi,
folgendes Problem:
Device A wird getriggert. Das Notify gibt daraufhin eine Meldung aus. Nun läuft unter Beteiligung eines AT eine Wartezeit mit Bedingungen, nach deren Ablauf/Erfüllung das Notify erneut melden soll.
Wie bekomme ich das hin, ohne zwischenzeitlich das Device A aus- und wieder angeschaltet zu haben? Gibt es einen "Aufruf" des Notify oä, ohne ein zusätzliches DOIF zu nutzen?
Das AT sieht so aus:
defmod a_Froster_Temperatur at +*01:00:00 {if (Value("Meldung") eq "ein" UND Value(Froster_Alarm") eq "on") {fhem("starte Notify erneut)}}
wobei ich im Klartext die noch fehlenden Teile umschrieben habe.
Vielen Dank,
Ingo
Im Code des "notify" das "notify" selbst auf "inactive" setzen (set $SELF inactive) und durch "das" at dann wieder auf "active" setzen (set notifyA active).
Gruß
Dan
P.S. Evtl. solltest Du Dir auch mal "watchdog" ansehen.
Ein notify kannst du mit trigger auch erneut "manuell" triggern...
https://wiki.fhem.de/wiki/Trigger
Aber schreib doch lieber was du eigentlich willst?
Wenn du nur nach Ablauf der Zeit erneut (1x) das machen willst, was "normalerweise" das notify macht: rufe im notify eine Sub auf und genau diesselbe Sub auch aus dem at -> es passiert dann ja (normalerweise) das gleiche...
Vermutlich denkst du viel zu kompliziert...
EDIT: oder ist das hier das gleiche wie das: https://forum.fhem.de/index.php/topic,124551.msg1191077.html#msg1191077 ? -> warum dann doppelt gefragt? Wenn nicht: wo ist der Unterschied?
Gruß, Joachim
eventuell kann hier auch sequenz (https://fhem.de/commandref_DE.html#sequence) hilfreich sein.
Hi,
vielen Dank!
@Dan: das klingt einfach; werde ich probieren.
@Joachim: Mit Subs kenne ich mich nicht aus. Hast Du vielleicht eine einfache verständliche Quelle zur Hand?
Über meine vorherige Frage (jedenfalls den ersten Teil; der zweite ist noch nicht beantwortet) bin ich mE schon hinweg. Ich will in dem Konstrukt unbedingt die Notifys behalten und höchstens anpassen, daher geht es mir hier speziell um deren erneuten Aufruf.
Trigger klingt aber gut, vielen Dank!
@ Cooltux: Sequenz kannte ich (auch;-) noch nicht, dankeschön!
LG Ingo
Zitat von: is2late am 06 Dezember 2021, 15:27:54
@Joachim: Mit Subs kenne ich mich nicht aus. Hast Du vielleicht eine einfache verständliche Quelle zur Hand?
Hallo Ingo,
https://wiki.fhem.de/wiki/99_myUtils_anlegen
Gruß, Joachim
Habs jetzt mit dem Trigger versucht, produziere aber wohl einen Syntaxfehler:
defmod a_Froster_Temperatur at +*00:03:00 {if (Value("Meldung") eq "ein") & (Value("Froster_Alarm") eq "on") {fhem("trigger n_Froster_Temperatur_on on")}}
Sieht jemand das Problem?
Gibt es übrigens - abgesehen vom RAW in FHEM - eine Testmöglichkeit wie bei Regex, die bei der Fehlersuche hilfreich ist?
Dankeschön,
Ingo
Hm, hab jetzt mal die Klammern abgezählt und "ausgeglichen":
defmod a_Froster_Temperatur at +*00:03:00 {if (Value("Meldung") eq "ein" & (Value("Froster_Alarm") eq "on")) {fhem("trigger n_Froster_Temperatur_on on")}}
Keine Fehlermeldung im RAW, Funktion muss ich noch testen.
LG
Ich denke nicht, dass das so geht.
Steht doch ganz klar im Wiki: NICHT das notify triggern sondern einen Event mit Trigger erzeugen, der dann auf das notify matcht... ;)
Also das ist nat. nur vermutet, anhand der Namen, also Annahme, dass n_Froster_Temperatur_on das notify ist...
...triggern musst du aber das Device, welches auch normalerweise das notify triggert.
Da du hier das notify nicht gepostet hast, kann man auch nicht sagen wie der Trigger sein müsste...
Zitat
define KellerLicht notify BueroOben1 set Keller1 $EVENT
kann angestoßen werden mit
trigger BueroOben1 on oder
trigger BueroOben1 off
Falsch wäre jedoch z.B.:
trigger KellerLicht on
Gruß, Joachim
Hi Joachim,
Du hast völlig Recht. Der Hinweis im Wiki war zu subtil für mich :(
Richtig war auch Deine Annahme bezüglich des Notify.
So funktioniert es jetzt:
defmod n_Froster_Temperatur_on notify Froster_Alarm:on set ECHO_G090LF1072270A6S speak Der Tiefkuehlschrank verliert Temperatur ;; set Meldung ein ;; set a_Froster_Temperatur active
Herzlichen Dank für Deine erneute Hilfe!
LG Ingo
Eine Frage kommt noch auf:
Wie bringe ich ein "else" in dem Code unter? Das AT soll sich selbst deaktivieren, wenn eine der Bedingungen nicht erfüllt ist.
Verdammte Syntax ;)
Das hier bringt jedenfalls einen Error
Zitatsyntax error at (eval 32826) line 1, near "else ("
defmod a_Froster_Temperatur at +*00:03:00 {if (Value("Meldung") eq "ein" & (Value("Froster_Alarm") eq "on")) {fhem("trigger Froster_Alarm on")} else ("set a_Froster_Temperatur inactive")}
LG Ingo
Das else soll wo rein?
Ins notify oder ins at?
Und: ich würde kein Value(Devicename) verwenden! Value frägt STATE ab, also das Internal! Das kann z.B. durch stateFormat "geändert" werden und dann liefert Value schon mal "unerwartete Dinge"...
Besser mit ReadingsVal oder ReadingsNum den Wert eines Readings abfragen...
Gruß, Joachim
Das "else" soll ins AT, also das Runde ins Eckige.
Meinst du sowas:
defmod a_Froster_Temperatur at +*00:03:00 {if (Value("Meldung") eq "ein" & (Value("Froster_Alarm") eq "on")) {fhem("trigger n_Froster_Temperatur_on on")}else{fhem("set a_Froster_Temperatur inactive")}}
mit dem Handy gedaddelt, also bzgl. Klammern etc. noch mal prüfen ;)
EDIT: und wer/wo/wie soll das dann wieder aktiviert werden?
Gruß, Joachim
Hi Joachim,
tausend Dank!
Das AT wird durch das Notify aktiviert, das seinerseits von dem Dummy, das die Alarmanlage triggert, in die Spur gesetzt wird.
Habs ausprobiert: Die Wiederholung der Meldung bleibt jetzt kurioserweise auf der Strecke, obwohl das AT bei Vorliegen der Bedingungen ordnungsgemäß aktiv ist. Das Notify wird scheinbar nicht mehr angesprochen??? Ich restarte FHEM mal eben.
-> Bleibt dabei, keine Meldungen mehr, egal, ob mit oder ohne Deaktivierung des AT.
Wo ist denn da der logische Fehler:
1. Lupusec triggert Dummy Froster_Alarm (=on)
2. Notify n_Froster_Temperatur_on gibt daraufhin
a) Meldungen aus
b) setzt Dummy ,,Meldung" auf ,,ein"
c) aktiviert AT a_Froster_Temperatur_on
3. AT a_Froster_Temperatur_on wartet bestimmte Zeit. Ist danach das Dummy ,,Meldung" noch auf ,,ein" UND
Froster_Alarm auf ,,on", wird das Notify per trigger-Befehl wieder losgetreten.
Andernfalls deaktiviert sich das AT selbst.
Ich bin ja blöd.... Hab Dir als Vorlage den falschen Code gegeben, bei dem der Trigger auf das Notify und nicht das Dummy gesetzt ist. Korrigiere und probiere....
Das war der Fehler; jetzt klappt alles. Heute wieder einiges gelernt... Wenn es in dem Tempo weitergeht, bin ich schon in ein paar Jahren ein mittelguter Anfänger :D
Vielen Dank, Joachim!
LG Ingo
Ah, ok, geht jetzt...
(war unterwegs und hätte eh erst jetzt schauen können)
Gratuliere!
Auch wenn ich denke, dass das alles viel zu kompliziert gedacht und dann nat. auch gemacht ist...
...aber jeder fängt mal an.
Manches was bei mir noch so läuft finde ich heute auch "eigenartig" und setze es auf die Liste: mal besser machen...
Und wenn dann Zeit ist, mache ich das auch :)
Solltest das hier evtl. auch mal auf die Liste setzen ;)
Und wie bereits geschrieben: ich würde von Value() die Finger lassen...
Viel Spaß noch, Joachim