(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

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

Beta-User

Zitat von: Otto123 am 03 Juli 2020, 09:38:18
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!
Na ja, als Rudi bei der damaligen Diskussion (mit jemand anderem, ich meine, es war eine feature-Anfrage) angemerkt hatte, das angefragte feature existiere bereits, weil man könne ja eine passende Uhrzeit zurückliefern kann, war ich auch erst irritiert, aber grade wegen dieser Irritation steht es eben jetzt auf meiner "ist ja interessant"-Liste ;D .
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

Guten Morgen,

ich als Anfänger kann gar nicht beurteilen, wie unübersichtlich eine Lösung in der Theorie ist.
Die von TomLee so konvenient angebotene und sehr gut kommentierte Lösung entsprach am ehesten meinem  bescheidenen Verständnishorizont (so war es ja auch wohl beabsichtigt, nachdem ich durch die zahlreichen angebotenen und verlinkten Varianten schon nicht mehr durchstieg) und ließ sich direkt nutzen.

Und was die Verschachtelung oä anbelangt: Ich halte immer den gesamten Lösungsweg mit allen Links fest und kann daher den Gedankengang zuverlässig nachvollziehen. Überdies nutze ich "sprechende" Namen für alle Devices, Notifys etc, was bislang gut als Erinnerungsstütze funktioniert hat.

Wenn mir jetzt noch jemand sagen kann, wie ich die Fehlermeldung wegen des immer wieder neu angelegten .....fhem "define NotifySchalterAT at +00:02:00............ wegbekomme (kann das "define MeineAT" im Code einfach weggelassen werden, wenn es einmal angelegt ist??), dann steht der Glückseligkeit nichts im Wege  ;)

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

Beta-User

Zitat von: is2late am 03 Juli 2020, 10:02:34
Wenn mir jetzt noch jemand sagen kann, wie [...]
Sagen nicht, aber nochmal das Stichwort SCHREIBEN (in der Hoffnung, dass es gelesen wird...)
Zitat von: Beta-User am 02 Juli 2020, 17:56:38Ja. Es wird nicht angelegt oder verändert, weil es schon existiert.

Abhilfe (Stichwort für die SuFu): "defmod".
Zitat von: is2late am 03 Juli 2020, 10:02:34
Und was die Verschachtelung oä anbelangt: Ich halte immer den gesamten Lösungsweg mit allen Links fest und kann daher den Gedankengang zuverlässig nachvollziehen. Überdies nutze ich "sprechende" Namen für alle Devices, Notifys etc, was bislang gut als Erinnerungsstütze funktioniert hat.
Ich habe keine Ahnung, was mit "ich halte ..." gemeint sein könnte, aber den Verdacht, dass damit cfg-Editing umschrieben wird... (no comment!)

Jedenfalls: Es geht nicht alleine darum, dass DU weißt, was Sache ist, sondern NOTFALLS auch jemand anderes sich zurechtfindet, und der wird sich "bedanken", wenn du ständig solche Umwege gehst...

Hier wäre auch mit der "kurzen" Lösung ala binford6000 alles direkt in FHEMWEB so als verknüpft zu erkennen, dass JEDER halbwegs erfahrene FHEM-User (z.B. auch jeder eventuelle Helfer hier im Forum) auf Anhieb sieht, was Sache ist; er braucht nur zwei list oder den Blick auf dein FHEMWEB...

Aber jeder ist seines eigenen Glückes Schmied, und wer nicht will, hat eben gehabt. Ich werde jedenfalls niemanden helfen, der wider besseres Anraten auf so einem "von hinten durch die Brust ins Auge"-Weg weiterläuft, nur weil er ein kleines Problemchen beim Einstieg in die Perl-Syntax und der Adaption eines einfachen Grundgedankens an die eigenen Bedarfe hatte.

Viel Glück noch!
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

Zitat von: TomLee l Readings darstellt.ink=topic=112595.msg1069254#msg1069254 date=1593620208
disabledForIntervals find ich aber eleganter, aber noch nicht ganz verstanden.

Aber jetzt. Das Problem war das ich mir kurzum irgendeinen Testdummy geschnappt hatte, der mit stateformat Text eines irgendwann mal definierten Readings formatiert hatte. STATE also gar nicht on sein konnte ( Value("dummy") eq "on" ) :o

Aber auch nach dem löschen von stateformat und dem auslösen des dummy auf on ist nicht direkt erkennbar das disabledForIntervals auch greift, man muss es anhand irgendeiner Aktion auch wirklich testen, das war etwas irritierend.
Hatte irgendwie erwartet dass das notify ein disable-Attribut in der Zeit bekommt ist aber nicht so und alles klappt genauso wie gleich vorgeschlagen.

Jetzt stellt sich mir die Frage wozu ein Eventmap für on-for-timer ?

Es klappt auch wie vorgesehen ohne eventMap dass das notify für die Zeit von on-for-timer disabled wird.
Folgender dummy zeigt den Zustand während eines on-for-timer, in STATE und auch state steht immer nur on bei aktivem on-for-timer

defmod dummy dummy
attr dummy devStateIcon .*:noIcon
attr dummy group Test1
attr dummy room Test
attr dummy setList on off
attr dummy useSetExtensions 1

setstate dummy on
setstate dummy 2020-07-03 15:17:39 state on





Zitat
(no comment!)

@is2late, wenn er Recht hat: aber in comment (dem Attribut ;D)

Zitatalles direkt in FHEMWEB so als verknüpft zu erkennen, dass JEDER halbwegs erfahrene FHEM-User (z.B. auch jeder eventuelle Helfer hier im Forum) auf Anhieb sieht, was Sache ist; er braucht nur zwei list oder den Blick auf dein FHEMWEB...

Na_ja, beim dummy mit Sicherheit nicht. Wenn ich mir den in FHEMWEB anschaue dann seh ich einen dummy mehr nicht, Probably associated with ist er mit keinem Device.
Und das list/Raw Defintion siehst ja oben.

Beta-User

Ja, Value(), da war doch was... (ich rate v.a. aus dem von dir genannten Grund eigentlich grundsätzlich davon ab, das überhaupt zu verwenden und habe es hier nur gemacht, weil der TE sowieso schon verwirrt genug war ::) ). Jetzt aber ausdrücklich an den TE: nimm' besser ReadingsVal() auf "state". Das ist eindeutig, selbst wenn du irgendwelche "Aufhübschungen" mit stateFormat machen solltest. (Man kann dann auch setExtensionEvent setzen, was ggf. laufende Timer in STATE visualisiert...).

Das mit der eventMap war nur ein Gedanke, falls es nur ein einziges klickbares Element geben soll und der dummy zwangsweise immer nach Zeitablauf off werden soll. Sonst würde ich eher zu "vollmanueller Bedienung" tendieren und weitere select-Buttons für unterschiedliche Dauern vorsehen ;D . (oder einen slider? *duckundweg*)



Was die Querbezüge angeht:
zumindest an dem notify könnte ausdrücklich was "associatedWith" stehen, wenn nicht, sieht man es m.e. trotzdem mit hinreichender Gewissheit im list des notify. Wer mag, kann ja das Reading "associatedWith" auch manuell setzen, dann hat man das von beiden Enden aus ;) . Und wer ggf. configDB nutzt  ;) , kann sowieso auch ein "configdb search %dummy-name%" machen, dann bekommt man auch sowas "frei Haus" raus, ganz ohne "comment" oder ausdrückliches "associatedWith"...
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