(Gelöst) Notify nach sleep stoppen?

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

Vorheriges Thema - Nächstes Thema

Otto123

#15
Das erste Semikolon ; gehört da nicht hin!
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!")}
https://wiki.fhem.de/wiki/Notify

$NAME ist das auslösenden Gerät. In deinem FALL also Fenster_BadP
Erklärung in der Doku https://fhem.de/commandref_modular_DE.html#notify

Gemischte Befehlytypen funktionieren nicht zwangsläufig! https://fhem.de/commandref_modular_DE.html#command
sleep 5600;{} ist eine Mischung aus einem FHEM und einem Perl Befehl!

Mann könnte es in der Art machen {if (open) {fhem("sleep 5600 Fenster ; set laberlaber")} elsif (closed) {fhem("cancel Fenster")}}

Fenster_BadP:offen|Fenster_BadP:geschlossen {if ($EVENT eq 'offen') { fhem("sleep 5600 Fenster; set ECHO_S,ECHO_H,ECHO_C,ECHO_6,ECHO_F speak $NAME ...")} elsif ($EVENT eq 'geschlossen') {fhem("cancel Fenster")}}

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

is2late

Peinlich....hab nur die runden Klammern gezählt. Danke für Eure Geduld!
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

Otto123

Was neben meinem "Wachhund Nachbau" oben auch geht ist ein watchdog:
defmod WD_BadOg_open watchdog FensterBOg:open 00:10 FensterBOg:closed set Sonos_Arbeitszimmer speak 15 de Fenster im oberen Bad offen
attr WD_BadOg_open autoRestart 1
attr WD_BadOg_open room Bad
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

is2late

Danke, Otto!

Der Watchdog ist vermutlich die beste Lösung.
Bei der obigen "if-Variante" ist es nämlich so, dass bei den Sonos-Lautsprechern der Speak-Text "in den Kleidern" zu hängen scheint, dh es werden nur die ECHO-Durchsagen unterdrückt, nicht jedoch die Sonos. Oder ich mache wieder etwas falsch...
Ist aber jetzt egal; ich mag gar nicht mehr fragen und nehme die Sonos einfach raus. Also nur akademisches Interesse  ;)

Fenster_BadP:offen sleep 60 ; {if (ReadingsVal($NAME,'state','zu') eq 'offen') {fhem("set ECHO_S,ECHO_G000JN06748607KH 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

Otto123

#19
Hallo Ingo,

Du hast mein Post #15  irgendwie nicht gelesen! Ich hatte da noch editiert.

Edit: Ich glaube ich weiß was Du meinst: gerade probiert, der zweite Sprachbefehl wird irgendwie im sleep und nochmal extra ausgeführt - das wundert mich jetzt....

Gruß Otto
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

is2late

Hallo Otto,

ja, sorry, den Post #15 habe ich tatsächlich überlesen. Tja, seltsam ist dieses Verhalten. Hab die Reihenfolge der Geräte probeweise einmal umgedreht, den Sonos also nach vorn geholt, um auszuschließen, dass es am Sonos liegt:

defmod n_BadfensterP notify Fenster_BadP:offen sleep 60 ;; {if (ReadingsVal($NAME,'state','zu') eq 'offen') {fhem("set Sonos_Unnamed_Room Speak 50 de |TempleBell| Badfenster ist immer noch offen. Bitte schließen!;;set ECHO_S,ECHO_H speak Badfenster ist immer noch offen. Bitte schließen!")}}

Jetzt wird die Sonos-Meldung unterdrückt, während die ECHOs Laut geben.... Sonos trägt also keine Schuld. Scheint so, als wenn der zweite "set-Befehl" vom "if" unbeeindruckt bleibt.

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

is2late

Das Logfile gibt folgenden Hinweis aus:

After sleep: Unknown command {if, try help.

An der Syntax des "if" kanns doch wohl nicht liegen, weil dieses jedenfalls für das erste "set" funktioniert. Oder ist die Klammer Schuld, womöglich vor dem Hintergrund Deines Hinweises, dass hier gemischte Befehlstypen zum Einsatz kommen?

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

DeeSPe

Zitat von: is2late am 14 März 2021, 14:01:27
Das Logfile gibt folgenden Hinweis aus:

After sleep: Unknown command {if, try help.

An der Syntax des "if" kanns doch wohl nicht liegen, weil dieses jedenfalls für das erste "set" funktioniert. Oder ist die Klammer Schuld, womöglich vor dem Hintergrund Deines Hinweises, dass hier gemischte Befehlstypen zum Einsatz kommen?

LG Ingo

Mach das mal so in eine Raw-Def:
defmod n_BadfensterP notify Fenster_BadP:offen sleep 60;; {fhem "set Sonos_Unnamed_Room Speak 50 de |TempleBell| Badfenster ist immer noch offen. Bitte schließen!;; set ECHO_S,ECHO_H speak Badfenster ist immer noch offen. Bitte schließen!" if (ReadingsVal($NAME,'state','zu') eq 'offen')}

Gruß
Dan
MAINTAINER: 22_HOMEMODE, 98_Hyperion, 98_FileLogConvert, 98_serviced

Als kleine Unterstützung für meine Programmierungen könnt ihr mir gerne einen Kaffee spendieren: https://buymeacoff.ee/DeeSPe

Otto123

#23
ich sage es gern nochmal: sleep 60;{Ein Perlbefehl} ist KEIN korrekter FHEM Syntax.
Aussage von Rudi dazu war: kann funktionieren - muss aber nicht! Deswegen würde ich mich darauf in keinster Weise einlassen und probieren solange er tut. Wenn das nächste Zeichen geändert wird muss er nicht mehr tun. ::)

Außerdem ist der Ausdruck ReadingsVal($NAME,'state','zu') CO2 Verschwendung wenn der Wert schon in der Variable $EVENT steht ;) ;D

Was ist schlecht an meiner Variante in #15?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

#24
Unabhängig von dem dann wohl nur korrektem Vorschlag aus #15, hab ich noch eine Anmerkung zu der Variante von if aus #22 (die mir besser gefällt).

Angenommen bei einem anderen Anwendungsfall (also ohne sleep), kommt die Variante bei der Bedingung auch ohne Klammern aus (die um ReadingsVal mein ich, hier jetzt $EVENT):

defmod bla notify du_t1:on {return fhem("saysonos bla;;") if $EVENT eq 'on'}

defmod n_BadfensterP notify Fenster_BadP:offen {fhem "set Sonos_Unnamed_Room Speak 50 de |TempleBell| Badfenster ist immer noch offen. Bitte schließen!;; set ECHO_S,ECHO_H speak Badfenster ist immer noch offen. Bitte schließen!" if ReadingsVal($NAME,'state','zu') eq 'offen'}

Otto123

Wobei die Abfrage in der abgekürzten? Form auch redundant ist - wenn vorne bloß on reinkommt - braucht man nicht nochmal fragen ob es wirklich on war.

Es ging ja darum das sleep abzubrechen, das geht mit id und cancel. Um noch eine Variante in den Thread zu werfen: Es geht auch mit dem Dreier :)
defmod n_fenster notify Fenster_BadP:offen|Fenster_BadP:geschlossen {$EVENT eq 'offen' ? fhem("sleep 10 Fenster;; set alias=Test speak 25 offen") : fhem("cancel Fenster")}
Aber wie gesagt: ist das doch eigentlich bloß watchdog nachgebaut?
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

TomLee

ZitatWobei die Abfrage in der abgekürzten? Form auch redundant ist - wenn vorne bloß on reinkommt - braucht man nicht nochmal fragen ob es wirklich on war.

dann war das halt ein doofes Beispiel, mir gings doch nur um die unnötigen Klammen bei dem "kurzen" if.

defmod bla notify du_t1:.* {return fhem("saysonos $EVENT") if $EVENT eq 'on'}

besser, zufrieden  :P

is2late

#27
@Dan: Habs probiert; das zweite "set" wird auch bei geschlossenem Fenster  ausgeführt. Logfile:After sleep: Unknown command {fhem, try help.
@Thomas, #24, Otto #25: Beide Meldungen kommen sofort nach Öffnen des Fensters. Vermutlich verstehe ich Euch falsch - wo bleibt das sleep?
@Otto #15: Verstehe das "$NAME...." nicht.... Bei diesem Code
Fenster_BadP:offen|Fenster_BadP:zu {if ($EVENT eq 'offen') { fhem("sleep 60 Fenster_BadP; set ECHO_6,ECHO_S speak Badfenster ist immer noch offen. Bitte schließen! $NAME ...")} elsif ($EVENT eq 'zu') {fhem("cancel Fenster_BadP")}}

wird tatsächlich NICHT gemeldet bei geschlossenem Fenster.  Wie/wo baue ich jetzt die Sonos ein? Semikolon hinter "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

is2late

#28
Hab die Sonos so eingesetzt:

defmod n_BadfensterP notify Fenster_BadP:offen|Fenster_BadP:zu {if ($EVENT eq 'offen') { fhem("sleep 60 Fenster_BadP;; set ECHO_G6,ECHO_S 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!")} elsif ($EVENT eq 'zu') {fhem("cancel Fenster_BadP")}}

Ergebnis: Meldungen werden wunschgemäß unterdrückt bei geschlossenem Fenster. Bei geöffneten Fenster meldet jedoch NUR die Sonos... Es ist wie verhext!

Korrektur: Jetzt klappt es plötzlich auch mit den ECHO-Meldungen, also alles bestens. Ganz herzlichen Dank für Eure Hilfe und die lehrreichen Codes!

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

Otto123

Zitat von: is2late am 14 März 2021, 17:53:56
@Thomas, #24, Otto #25: Beide Meldungen kommen sofort nach Öffnen des Fensters. Vermutlich verstehe ich Euch falsch - wo bleibt das sleep?
@Otto #15: Verstehe das "$NAME...." nicht.... Bei diesem Code
das war ja kein kompletter Code, das $NAME habe ich eingeworfen - dann hätte er Fenster_BadP gesagt :)
Mein Code in #25 funktioniert, den habe ich getestet. Das sleep ist drin!
Vielleicht verstehst Du mein "Benanntes sleep" nicht? Du kannst anstatt sleep 10 Fenster ... cancel Fenster auch  sleep 10 Willi ... cancel Willi schreiben
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz