(Gelöst) Notify bzw. Sonos per Knopfdruck vorübergehend stilllegen

Begonnen von is2late, 01 Juli 2020, 15:20:20

Vorheriges Thema - Nächstes Thema

TomLee

#15
defmod dummy_notify_1 notify dummy {("$EVENT" eq "off") ? return : fhem"set n_Briefkasten inactive";;fhem "define MeineAT at +00:45:00 set n_Briefkasten active"}

Tommis Lösung gibst du genauso in die Befehlszeile ein oder tippst in irgendeinem beliebigem Device auf Raw Defintion (ganz unten, unter jedem Device) und ersetzt den Inhalt durch das Beispiel und drückst Execute Command, keine Angst die vorherige Definition bleibt erhalten.

Der Dummy könnte so aussehen:

defmod dummy dummy
attr dummy devStateIcon .*:noIcon
attr dummy room Test
attr dummy setList on off


Die Zeitangabe sagt das in 45 Minuten wieder auf active geschalten wird.
Im Attribut comment, im Beispiel von oben, befindet sich nur noch eine andere Lösung die nach 10 Sekunden wieder active schaltet.

MeineAT ist ein einfaches at

("$EVENT" eq "off") ? return : fhem"set n_Briefkasten inactive" ist eine kurze Varinate von if  keine Ahnung wie man das nennt.

Wenn ( ? ) der dummy state off ist dann mache nichts ( dafür sorgt das einfache return), sonst ( : ) setze das notify auf inactive.
Danach hänge ich einfach nur noch einen Befehl an und der erstellt ein at welches in 45 Minuten das notify wieder auf active setzen soll.

is2late

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

is2late

...und die Erde dreht sich doch!
Tausend Dank, Tommy, und natürlich auch an alle anderen, die Lösungen ersonnen haben!
Funktioniert bestens, bin happy.

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

TomLee

gelöst ?

ist das mit devspec jetzt klar ?

Du hast doch noch die diversen weiteren notifys ?

is2late

Ja, danke, Tommy, bisher läuft es super. Hab jetzt Folgendes nach Deiner Vorlage:

1. das Dummy
defmod dummy dummy
attr dummy devStateIcon .*:noIcon
attr dummy room Sonos
attr dummy setList on off


2. Das Dummy-Notify
defmod dummy_notify_1 notify dummy {("$EVENT" eq "off") ? return : fhem "set n_Briefkasten inactive";;fhem "define MeineAT at +00:45:00 set n_Briefkasten active"}

3. Das Sonos-Notify
defmod n_Briefkasten notify Briefkasten:offen set Sonos_Unnamed_Room Speak 50 de |TempleBell| Hallo, es ist Post im Briefkasten!

Die weiteren Sonos-Notifys will ich jetzt in das Dummy-Notify einbinden, am Beispiel der Heizung etwa so:
defmod dummy_notify_1 notify dummy {("$EVENT" eq "off") ? return : fhem "set n_Briefkasten inactive";; fhem "set n_Heizung_aus;; fhem "define MeineAT at +00:45:00 set n_Briefkasten active";; fhem "define MeineAT at +00:45:00 set n_Heizung_aus active" }

Habs nur noch nicht getestet. Siehst Du, ob die Syntax passt? Vielleicht kann man das zweite define MeineAT at +00:45:00 weglassen und gleich zum set kommen? Oder das erste "vor die Klammer ziehen"?

LG und vielen Dank,
is2late
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

TomLee

Erklären kann ich dir das mit devspec nicht, das liegt mir nicht.

Anhand dem Beispiel welches Otto oben genannt hat, versuch das mal nachzuvollziehen nach_einmal_drüber schlafen:

Alle deine "diversen weiteren notifys" umbenennen und zwar ein "n_Sonos_...." davor schreiben, anhand dem letzten Beispiel n_Sonos_Briefkasten

Dann kannst du alle betroffenen notifys mit dieser Definition für x Minuten auf inactive setzen

defmod dummy_notify_1 notify dummy {("$EVENT" eq "off") ? return : fhem"set n_Sonos_.* inactive";;fhem "define MeineAT at +00:45:00 set n_Sonos_.* active"}

Otto123

Das mit devSpec ist doch in der Doku gut erklärt, nehmen wir die ersten Beispiele

set lamp1 on
set lamp1,lamp2,lamp3 on
set lamp.* on
set room=kitchen off

Auf Dich umgemünzt
set n_Briefkasten inactive - hast Du jetzt, ein gerät
set n_Briefkasten,n_Gerät2,n_gerät3,n_gerät27 inactive - währen jetzt 4 Geräte von Dir. Solange das nicht zu unübersichtlich wird mach es so!
Sind es mehr kannst Du es so machen wie schon zweimal vorgeschlagen: umbennen...
Oder Du packst Sie z.B. alle in einen Raum n_Sonos (Beispiel) so schaltest Du alle Geräte in diesem speziellen Raum
set room=n_Sonos inactive

Dazu gäbe es jetzt noch 100 Möglichkeiten, aber diese genügen denke ich. ;D

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

ZitatErklären kann ich dir das mit devspec nicht, das liegt mir nicht.
Also Du hast den Code toll erklärt; besser geht es nicht.

@super, danke, Otto, so werde ich es machen.

Allen Mitdenkern herzlichen Dank! Obige Funktion erhöht den WAF ganz gewaltig.
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox

is2late

Jetzt muss ich doch noch einmal nachfragen...

Ich möchte gern, dass der Switch (also das Dummy), der das Notify schaltet, welches die Meldungs-Notifys deaktiviert, nach der eingestellten Zeit automatisch wieder auf off geht. Dazu habe ich den Code wie folgt ergänzt (hab die obigen Namen an mein Ssystem angepasst und die Zeit testweise auf 2 Minuten gesetzt):

defmod n_Notify_Schalter notify Notify_Schalter {("$EVENT" eq "off") ? return : fhem "set n_Briefkasten,n_FunksteckdoseTrockner_on,n_FunksteckdoseWasch_on inactive";;fhem "define NotifySchalterAT at +00:02:00 set n_Briefkasten,n_FunksteckdoseTrockner_on,n_FunksteckdoseWasch_on active;; set Notify_Schalter off"}

Das führt aber dazu, dass der Switch SOFORT wieder auf off geht, also nicht erst nach der für die Notify-Reaktivierung eingestellten Zeit. Genau das aber ist das Ziel. Sicher ist das ";" vor dem set Notify_Schalter falsch, aber ein Komma führt zu einer Fehlermeldung. Wie bitte wäre die Syntax richtig?

LG is2late

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

Beta-User

Das Stichwort wäre escapen: Also hinten 4 statt 2 ";;". Steht in der commandref unter "Perl specials", wie.

Nochmal eine generelle Anmerkung: Dieses Hin- und Hergeschubse von Infos ist überwiegend unnötig, und wenn du das ganze System am Ende auf solchen Konstruktionen aufbaust, würde es mich sehr wundern, wenn du in 3 Wochen noch durchblickst, was du dir da jeweils dabei gedacht hast.

Just my2ct...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

is2late

Danke, hat geklappt!

Bitte noch eine Frage zum AT:
Das Logfile meldet jetzt
n_Notify_Schalter return value: NotifySchalterAT already defined, delete it first

Ist es so, dass das Codeteil .....fhem "define NotifySchalterAT at +00:02:00............ dazu führt, dass JEDESMAL beim Aufruf des Notify das AT neu angelegt werden soll und dies FHEM nicht gefällt?

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

Beta-User

Ja. Es wird nicht angelegt oder verändert, weil es schon existiert.

Abhilfe (Stichwort für die SuFu): "defmod".
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

TomLee

 
ZitatDieses Hin- und Hergeschubse von Infos ist überwiegend unnötig

Kannst du bitte erläutern wie das genau gemeint ist, welches Konstrukt misfällt dir, ich verstehe die Aussage "Hin- und Hergeschubse von Infos" schlicht nicht.

Beta-User

Zitat von: TomLee am 02 Juli 2020, 22:56:50
Kannst du bitte erläutern wie das genau gemeint ist, welches Konstrukt misfällt dir, ich verstehe die Aussage "Hin- und Hergeschubse von Infos" schlicht nicht.
Also: Aus der Grundannahme (die man auch hinterfragen könnte => presence?), dass man ein klickbares Element haben will, das dann Auswirkungen auf das Verhalten genau eines anderen Eventhandlers (und am Ende dann einer bestimmten Hardware oä.) haben soll, für die binford6000 bereits die richtigen Stichworte genannt hatte und die sich - mit etwas Lektüre der Doku und ggf. Erweiterungen wie einem eventMap on=>on-for-timer - bei genau diesen beiden Geräten abbilden lassen, haben wir jetzt
- ein klickbares Element, das dann
- ein notify in Gang setzt, das dann wieder
- zwei at definiert und
- zwei oder drei andere Geräte direkt bedient und am Ende über die at
- wieder das Ausgangsdevice und evtl. irgendwas anderes bedient...

Für alle anderen Eventhandler-Geräte hätte es gereicht, die einfache, vorgeschlagene if-Abfrage da in den Ausführungsteil mit reinzubasteln; dann wäre auch in der Detailansicht dieser Eventhandler direkt erkennbar gewesen, was Sache ist...

So ist alles irgendwie indirekt, was ggf. dann ok wäre, wenn es dynamisch verknüpft wäre, und nicht "hartvercoded" (alle Geräte sind namentlich benannt, devspec für Schaltanweisungen ist nicht von bestimmten Reading- oder Attributwerten abhängig usw.).

Zitat von: Otto123 am 01 Juli 2020, 17:56:51
@Beta-User wird das wirklich aktualisiert wenn man den dummy ändert?
Bisher war mein Verständnis des Codes zu IsDisabled() (dazu gehört die Auswertung der disabledForIntervals-Angaben) so, dass das @runtime ausgewertet wird, also jedes Mal, wenn der Trigger für den Eventhandler (bzw. z.B. bei RandomTimer, der das u.a. auch nutzt: der nächste eventuelle Schaltzeitpunkt) paßt. Im Zweifel: Ausprobieren...

@is2late: Das war das ganze als vereinfachter "one-liner" ohne myUtils. myUtils macht dann Sinn, wenn man was komplexeres auswerten will, das sich nicht so einfach in einer einzigen Zeile abbilden läßt.
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: MiLight@ESP-GW, BT@OpenMQTTGw | MySensors: seriell, v.a. 2.3.1@RS485 | ZWave | ZigBee@deCONZ | SIGNALduino | MapleCUN | RHASSPY
svn: u.a MySensors, Weekday-&RandomTimer, Twilight,  div. attrTemplate-files

Otto123

Zitat von: Beta-User am 03 Juli 2020, 09:24:50
Bisher war mein Verständnis des Codes zu IsDisabled() (dazu gehört die Auswertung der disabledForIntervals-Angaben) so, dass das @runtime ausgewertet wird, also jedes Mal, wenn der Trigger für den Eventhandler (bzw. z.B. bei RandomTimer, der das u.a. auch nutzt: der nächste eventuelle Schaltzeitpunkt) paßt. Im Zweifel: Ausprobieren...
Stimmt, auch die Doku dazu liest sich genauso. Anders macht ja die Angabe einer Funktion wie sunset_abs() auch keinen Sinn. ;)
Sorry für mein zweifeln, man lernt ja eben immer wieder in solchen Diskussionen :) unbedingt probieren!
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