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

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

Vorheriges Thema - Nächstes Thema

is2late

Hi,
ich suche eine Idee zur Lösung folgenden Problems:

Diverse Notifys melden über Sonos Betriebszustände, zB Waschmaschine fertig, Post ist da usw.
Nun gibt es ja Situationen, da diese Meldungen durchaus störend sein können. Ich würde die Meldungen also gern über einen Switch zeitlich befristet aussetzen, also zB: Switch on = Ruhe in den nächsten beiden Stunden. Danach sollen die Meldungen dann wieder erfolgen können.
Ich habe an ein DOIF gedacht, komme aber nicht darauf, wie es mit den Notifys zu verknüpfen wäre. Beispiel für ein solches Notify :
defmod n_Briefkasten notify Briefkasten:offen set Sonos_Unnamed_Room Speak 50 de |TempleBell| Hallo, es ist Post im Briefkasten!

Hat jemand eine Idee, wie obiges Vorhaben zu realisieren wäre?

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

binford6000

Zitat von: is2late am 01 Juli 2020, 15:20:20
Hi,
ich suche eine Idee zur Lösung folgenden Problems:

Diverse Notifys melden über Sonos Betriebszustände, zB Waschmaschine fertig, Post ist da usw.
Nun gibt es ja Situationen, da diese Meldungen durchaus störend sein können. Ich würde die Meldungen also gern über einen Switch zeitlich befristet aussetzen, also zB: Switch on = Ruhe in den nächsten beiden Stunden. Danach sollen die Meldungen dann wieder erfolgen können.
Ich habe an ein DOIF gedacht, komme aber nicht darauf, wie es mit den Notifys zu verknüpfen wäre. Beispiel für ein solches Notify :
defmod n_Briefkasten notify Briefkasten:offen set Sonos_Unnamed_Room Speak 50 de |TempleBell| Hallo, es ist Post im Briefkasten!

Hat jemand eine Idee, wie obiges Vorhaben zu realisieren wäre?

LG is2late
Hallo,
zB. ganz billig ohne DOIF mit einem Switch = dummy mit set-Extensioons (on-for-timer buw. off-for-timer)

In den notifys den dummy abfragen:
if (Value('dummy') eq "on") {msg bla bla}

VG Sebastian

Otto123

#2
Hi,

Wenn alle Deine notify gleich beginnen, z.B. so
set n_Sonos.* inactive

Ansonsten musst Du die devSpec anders machen.

Ob du den befehl über ein DOIF oder sonstwas absetzt ist Deiner Vorliebe überlassen.

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

Beta-User

Vielleicht nicht die naheliegendste, aber m.E. eine ziemlich verkannte Option:

disabledForIntervalsIf parts of the attribute value are enclosed in {}, they are evaluated:  {sunset_abs()}-24 {sunrise_abs()}-08
Leider finde ich die Fundstelle nicht, in der Rudi das mal erläutert hatte, aber es sollte gehen, dass du da was in myUtils reinpackst, das dann via disableForIntervals aufgerufen wird, und z.B. wahlweise 00 oder 24 zurückgibt (00=inaktiv, 24=aktiv). Das ganze ohne irgendwelche rote Fragezeichen im laufenden Betrieb ;) :attr n_Briefkasten disabledForIntervals {myCheckSonosActive()}-24
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

Das sind super Ideen!
ZitatHallo,
zB. ganz billig ohne DOIF mit einem Switch = dummy mit set-Extensioons (on-for-timer buw. off-for-timer)
Das klingt wirklich einfach; werde ich probieren.

ZitatAnsonsten musst Du die devSpec anders machen.
Otto, was ist das?

ZitatVielleicht nicht die naheliegendste, aber m.E. eine ziemlich verkannte Option:
disabledForIntervals
Oje, das bekomme ich nie hin....

Ich werde mal etwas probieren und muss dann sicher nachfragen.

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

Beta-User

Zitat von: is2late am 01 Juli 2020, 16:52:51
Oje, das bekomme ich nie hin....
Sieht so aus, als müßtest du noch viel lesen, wenn nicht mal beim Begriff "devspec" der Groschen fällt.

Mundgerecht aufbereitet könnte das auf Basis der dummy-Lösung von binford6000 so aussehen:
attr n_Briefkasten disabledForIntervals {Value('dummy') eq "on" ? "00" : "24"}-24
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: is2late am 01 Juli 2020, 16:52:51
Otto, was ist das?
Das hier n_Sonos.*
Details findest Du natürlich in der Doku https://commandref.fhem.de/commandref_DE.html#devspec ;)

@Beta-User wird das wirklich aktualisiert wenn man den dummy ändert?
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

#7
ZitatSieht so aus, als müßtest du noch viel lesen, wenn nicht mal beim Begriff "devspec" der Groschen fällt.
Keine Frage, ich bin blutiger Anfänger.
Hab jetzt den Dummy angelegt:
defmod Sonos_Aus dummy
attr Sonos_Aus room Sonos
attr Sonos_Aus webCmd on:off

Dazu set Sonos_Aus on-for-timer 120".

Das Notify sieht aus wie folgt:
defmod n_Briefkasten notify Briefkasten:offen if (Value(Sonos_Aus) eq "off") set Sonos_Unnamed_Room Speak 50 de |TempleBell| Hallo, es ist Post im Briefkasten!

Funktioniert aber nicht, evtl wegen eines Syntaxfehlers - das Logfile moniert
n_Briefkasten return value: IF: no left bracket:  set Sonos_Unnamed_Room Speak 50 de |TempleBell| Hallo, es ist Post im Briefkasten!
Setze ich die Zeile von "set" bis Ende in geschweifte Klammern, wird das Fehlen einer rechten Klammer beanstandet.
Und: Das set Sonos_aus on-for-timer 120" hilft insofern nicht weiter, als dass es nur flüchtig ist.
Puh..
@Beta-User: Danke dafür.. aber dann müsste ich laut Deinem ersten Post noch etwas in der MyUtils tun... soviel kann ich garnicht lesen, dass ich das in diesem Leben noch hinbekomme  8)

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

Otto123

#8
Vielleicht noch der Nachtrag, Du sprachst von vielen notify  ....
Ganz konkret für dein Eines sieht mein Vorschlag so aus:
set n_Briefkasten inactive

Dazu das DOIF aus der Doku abwandeln und fertig ist...
define di_lamp DOIF ([FB:"on"]) (set lamp on) DOELSEIF ([FB:"off"]) (set lamp off)

attr di_lamp devStateIcon cmd_1:on:cmd_2 initialized|cmd_2:off:cmd_1

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

MadMax-FHEM

#9
Zitat
Das Notify sieht aus wie folgt:

defmod n_Briefkasten notify Briefkasten:offen if (Value(Sonos_Aus) eq "off") set Sonos_Unnamed_Room Speak 50 de |TempleBell| Hallo, es ist Post im Briefkasten!


Funktioniert aber nicht, evtl wegen eines Syntaxfehlers - das Logfile moniert

n_Briefkasten return value: IF: no left bracket:  set Sonos_Unnamed_Room Speak 50 de |TempleBell| Hallo, es ist Post im Briefkasten!

Setze ich die Zeile von "set" bis Ende in KLammern, wird das Fehlen einer rechten Klammer beanstandet.

Naja: entweder ein fhem IF ODER eben (wie du) ein Perl-if ABER dann auch nach Perl wechseln!!

Also (Perl-if)


defmod nTest notify Device:Regex { if(Bedingung){Aktion} }


EDIT: wobei du dann (also wenn "in" Perl) für fhem Befehle die "fhem-Funktion" nutzen musst, also fhem("set irgendwas auf irgendwas")

ODER (fhem IF)


defmod nTest notify Device:Regex IF (Bedingung) (Aktion)


https://wiki.fhem.de/wiki/Klammerebenen

https://wiki.fhem.de/wiki/If-condition

https://fhem.de/commandref_DE.html#IF

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)

is2late

Danke, Otto.

Damit ich es richtig verstehe:

Kann denn
set n_Briefkasten inactive in den Dummy Sonos_Aus integriert werden? Denn das ist ja das Ziel: Switch betätigen, Sonos schweigt vorübergehend.
Und wie ist dann das "Vorübergehend" zu realisieren? Sonos soll ja nur für zwei Stunden still sein, danach automatisch wieder Meldungen abgeben.

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

TomLee

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"}
attr dummy_notify_1 comment dummy { if ("$EVENT" eq "on") { fhem"set n_Briefkasten inactive"};; {fhem "define MeineAktion at +00:00:10 set n_Briefkasten active"}}
attr dummy_notify_1 room Test


disabledForIntervals find ich aber eleganter, aber noch nicht ganz verstanden.

Gruß

Thomas

Otto123

#12
Zitat von: is2late am 01 Juli 2020, 18:13:40
Und wie ist dann das "Vorübergehend" zu realisieren? Sonos soll ja nur für zwei Stunden still sein, danach automatisch wieder Meldungen abgeben.
Das ist ne neue Aufgabe? Stand ursprünglich nicht drin :(

Aber mit dem DOIF was ich Dir gezeigt habe auch kein Problem, nimmst Du timer mit wait - so etwa

Edit: klappt so nicht ganz, müsste ich noch etwas drüber nachdenken   :-[
Edit2: es tut so was es soll nur die Anzeige im DOIF geht so nicht. Mit set di_lamp cmd_1


define di_lamp DOIF (0) (set n_Briefkasten inactive) (set n_Briefkasten active)
attr di_lamp wait 0,7200


Es gibt wahrscheinlich noch hundert Wege - bald haben wir ja alle :) readingsDingsBums kann doch sowas auch :)
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

MadMax-FHEM

Es gibt (wie immer/so oft) viele Möglichkeiten...

Direkt "in" den "Schalte aus" dummy wird eher schwierig (evtl. cmdalias)...

Aber du kannst doch ein notify auf den ausschalt-dummy machen.

Also bei on (oder off je nach Logik ;)  ) eben das oder die notify mit dem Befehl von Otto "still legen"...

Den dummy dann mittels setExtensions und on-for-timer schalten und dann eben bei off (oder on je nach Logik) das oder die notify wieder aktiv schalten...

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)

is2late

O Mann, mir brummt der Schädel...

Ich suche die einfachste Lösung, weil ich die am ehesten umsetzen kann.
Ist das die von Otto? Ich übersehe schon gar nicht mehr, was worauf aufbaut bzw womit in Verbindung steht.
Also:
1. Ausschalt-Dummy schaltet das Notify inaktiv
2. useSetExtensions habe ich jetzt auf "1" gesetzt, bekomme aber über set nur einen "flüchtigen" Timer in den Readings.
Wie bekommt man die Timeroption in den Dummy?

Bei Tommis Lösung verstehe ich die Zeitangaben nicht und kann sie auch nicht adaptieren. Was ist "MeineAT"? Erbarmen, bin Anfänger!

Joachims Ausführungen zur Syntax habe ich versucht umzusetzen, bleibt aber beim Fehler. Vermutlich kreiere ich jetzt laufend neue.
Pi4, Tahoma Jalousien, Hue, Echo, Sonos, Lupusec XT3, FritzBox