(Gelöst) Notify nach sleep stoppen?

Begonnen von is2late, 14 März 2021, 09:37:38

Vorheriges Thema - Nächstes Thema

is2late

Guten Morgen,

ein Notify soll melden, wenn ein Fenster längere Zeit geöffnet ist. So funktioniert es aktuell:

defmod n_BadfensterP notify Fenster_BadP:offen ;; sleep 5600 ;; set ECHO_Gxxx speak Badfenster ist immer noch offen. Bitte schließen!

Allerdings wird die Meldung auch ausgegeben, wenn das Fenster während der Wartezeit geschlossen wurde. Gibt es eine einfache Möglichkeit, das Notify durch eine weitere Bedingung zu stoppen? Ich hab mit Watchdog und DOELSE herumprobiert, es aber nicht hinbekommen.

LG Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

TomLee

Du brauchst nach der Wartezeit eine Bedingung die prüft ob das Fenster weiterhin offen ist, sonst wird doch nach der Wartezeit einfach immer die Sprachansage erfolgen ?

Könnte so aussehen:

defmod n_BadfensterP notify Fenster_BadP:offen sleep 5600; {if (ReadingsVal($NAME,'state','zu') eq 'offen') {set ECHO_Gxxx speak Badfenster ist immer noch offen. Bitte schließen!} }

Gruß

Thomas

is2late

Super, vielen Dank, Thomas!

Bitte noch eine Zusatzfrage, welche die Syntax betrifft:

Wenn die Sprachdurchsage über mehrere Echos erfolgen soll, werden die set-Befehle dann jeweils in eigene geschweifte Klammern gesetzt und einfach einander gereiht? Also zB

defmod n_BadfensterP notify Fenster_BadP:offen sleep 5600; {if (ReadingsVal($NAME,'state','zu') eq 'offen') {set ECHO_Gxxx speak Badfenster ist immer noch offen. Bitte schließen!} {set ECHO_Gyyy.......}}

Vielen Dank!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

MadMax-FHEM

Nein.

Und es fehlt verm. noch der "fhem-Befehl":


{fhem("set ECHO_Gxxx speak Badfenster ist immer noch offen. Bitte schließen!; set ECHO_Gyyy.......")}


Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

#4
Ja, an den fhem-Befehl hab ich nicht gedacht, einfach nur kopiert.


Nein, die werden dann in dem Ausführungsteil (den geschweiften Klammern) des if Semikola-getrennt angegeben.

{fhem('set ECHO_Gxxx speak Badfenster ist immer noch offen. Bitte schließen!;set ECHO_Gyyy...')}

geht aber auch etwas kürzer:

Zitat{fhem('set ECHO_Gxxx,ECHO_Gyyy... speak Badfenster ist immer noch offen. Bitte schließen!')}

TomLee

noch etwas kürzer wenn die Sprachansage auf allen Echos erfolgen soll:

{fhem('set TYPE=echodevice:FILTER=model!=ACCOUNT speak bla')}

jhohmann

Hat aber dann den Nachteil, wenn man in der Zwischenzeit das Fenster mehrfach auf und zu macht, dass mehrere sleeps im System rumdümpeln. Ich definiere mir dafür ein eindeutiges at, das ich auch wieder löschen kann. Einem sleep kann man auch eine ID mitgegeben, habe ich selbst noch nicht genutzt.
Bei mir wird nach Fenster offen die Heiztemperatur verzögert hoch gesetzt.
Hier mal mein notify im RAW Format:
defmod ntArbeitszimmerFenster_STATE notify ArbeitszimmerFenster:1.STATE.* {\
fhem("delete atAZHeizungToAuto") if (defined($defs{atAZHeizungToAuto}));;\
my $state=ReadingsVal("ArbeitszimmerFenster", "1.STATE", "");;\
if ($state eq "closed") {\
  fhem("set ArbeitszimmerHeizung datapoint SET_POINT_TEMPERATURE 14");;\
  fhem("define atAZHeizungToAuto at +00:03:00 set ArbeitszimmerHeizung Auto");;\
}\
}

Fenster offen Meldungen laufen bei mir über einen Watchdog, da muss ich selbst nichts aufräumen:
defmod wdArbeitszimmerFensterOpen watchdog ArbeitszimmerFenster:1.STATE.*open 00:04:00 ArbeitszimmerFenster:1.STATE.*closed {\
fhem("set teleBot message ".telegramEmpfaenger(1)." Das Fenster im Arbeitszimmer ist schon länger offen!");;\
fhem("trigger wdArbeitszimmerFensterOpen .");;\
}
Raspberry Pi 4 - bookworm / EnOcean - Rollo+Licht, deCONZ - Licht+Sensoren, ZWave - CO Messung, HMCCU mit piVCCU - Heizung+Rollo
plus dovecot, minidlna

is2late

#7
Klasse, herzlichen Dank an alle!

Allerdings schaffe ich es als Syntaxspasti immer noch, eine Fehlermeldung zu erzeugen:

Bareword "Fenster_BadP" not allowed while "strict subs" in use at (eval 6358862) line 1.
Missing right curly or square bracket at (eval 6358862) line 1, at end of line
syntax error at (eval 6358862) line 1, at EOF


bei folgendem Code:

Fenster_BadP:offen ; sleep 5600 ; {if (ReadingsVal(Fenster_BadP,'state','zu') eq 'offen') {fhem("set ECHO_S,ECHO_H,ECHO_C,ECHO_6,ECHO_F speak Badfenster ist immer noch offen. Bitte schließen!; set Sonos_Unnamed_Room Speak 50 de |TempleBell| Badfenster  ist immer noch offen. Bitte schließen!")}


LG Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

TomLee

Zitatdass mehrere sleeps im System rumdümpeln.

Unabhängig was korrekter, richtiger, besser ist lässt sich das, mein ich, ohne auszuprobieren, bei meinem gezeigten notify mit einem gesetzten Attribut disabledAfterTrigger 5600 verhindern.

is2late

Mache ich einen Fehler bei der Bezeichnung des Dummy?

{if (ReadingsVal(Fenster_BadP,.......

Das "$" gehört doch nicht davor, oder? Habe es als Hinweis verstanden, dass bei "$NAME" das Device eingesetzt werden soll.

LG Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

MadMax-FHEM

Zitat von: is2late am 14 März 2021, 11:07:56
Klasse, herzlichen Dank an alle!

Allerdings schaffe ich es als Syntaxspasti immer noch, eine Fehlermeldung zu erzeugen:

Bareword "Fenster_BadP" not allowed while "strict subs" in use at (eval 6358862) line 1.
Missing right curly or square bracket at (eval 6358862) line 1, at end of line
syntax error at (eval 6358862) line 1, at EOF


bei folgendem Code:

Fenster_BadP:offen ; sleep 5600 ; {if (ReadingsVal(Fenster_BadP,'state','zu') eq 'offen') {fhem("set ECHO_S,ECHO_H,ECHO_C,ECHO_6,ECHO_F speak Badfenster ist immer noch offen. Bitte schließen!; set Sonos_Unnamed_Room Speak 50 de |TempleBell| Badfenster  ist immer noch offen. Bitte schließen!")}


LG Ingo


ReadingsVal('Fenster_BadP','state','zu')


Also Fenster_BadP in Anführungszeichen. Je nachdem in einfache (wie hier) oder doppelte...

EDIT: nutze zwar DOIF nicht aber das klingt doch wie DOIF mit wait!? Da gibt es im DOIF Wiki/commendref doch bestimmt ein Beispiel was genau das macht was du willst...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

Du kannst doch wie gezeigt $NAME verwenden, da kann man die Hochkomma weglassen, wenn du den Namen des dummy nehmen möchtest dann sind die nötig.

Zitatdass bei "$NAME" das Device eingesetzt werden soll.

$NAME ist der dummy, das war kein Hinweis, lies dich halt mal zu notify ein.

is2late

Hi Joachim,

vielen Dank! Die Fehlermeldung ist jetzt tatsächlich weg, wird aber durch eine neue ersetzt:

Missing right curly or square bracket at (eval 6853437) line 1, at end of line
syntax error at (eval 6853437) line 1, at EOF


Auch mehrfaches Durchzählen der Klammern ergab kein abweichende Ergebnis ;-)

@Thomas: Dann muss $NAME doch irgendwo definiert sein, oder? Ich würde gern den Namen des Dummy nehmen, also Fenster_BadP in Anführungszeichen. Dann kommt aber die neue Fehlermeldung, s.o.

LG Ingo
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

MadMax-FHEM

Wie wäre es dann den Code zu posten!?

So KÖNNEN wir ja nicht helfen!!

Oder sollen wir "Phantasie-Klammern" zählen ;)

EDIT: $NAME ist beim notify "definiert". Es ist der Name des auslösenden Devices! Wie geschrieben: einlesen macht schlauer! ;)

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

TomLee

ZitatAuch mehrfaches Durchzählen der Klammern ergab kein abweichende Ergebnis ;-)

Mehrfach falsch gezählt, nach dem letzten gezeigten Code fehlt am Ende eine geschweifte Klammer.