FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Spartacus am 19 Juni 2014, 16:24:50

Titel: Events bei Kalendern vom Typ holiday
Beitrag von: Spartacus am 19 Juni 2014, 16:24:50
Hallo,
ich möchte meinen Wecker im Sonos an WE und Feiertagen abschalten. Dazu habe ich einen Feiertagskalender angelegt. Das funzt soweit auch ganz gut. Heute ist Fronleichnam und der Wecker wurde deaktiviert. Derzeit läuft der u.a. Code täglich um 04:00 Uhr.
Schöner fände ich es, wenn der Wechsel des Kalenders ein Event auslösen könnte um das Ganze über ein Notify zu steuern. In der commandref steht unter "holiday" nichts von Attributen wie " event-on-change-reading".
Hat jemand noch eine Idee, wie man das besser lösen könnte?

{
if (($wday == 5) || 
     ($wday == 6) || 
     (fhem("get NRW today") !~ m/none/))
     {fhem ("set Sonos_Buero Alarm Update 203 {Recurrence_Monday => 1, Recurrence_Tuesday => 1, Recurrence_Wednesday => 1, Recurrence_Thursday => 1, Recurrence_Friday=> 1, Enabled => 0}")}
else
     {fhem ("set Sonos_Buero Alarm Update 203 {Recurrence_Monday => 1, Recurrence_Tuesday => 1, Recurrence_Wednesday => 1, Recurrence_Thursday => 1, Recurrence_Friday=> 1, Enabled => 1}")}
}


Danke und Gruß,
Spartacus.
Titel: Antw:Events bei Kalendern vom Typ holiday
Beitrag von: betateilchen am 19 Juni 2014, 16:51:15
Events für die Readings von yesterday, state und tomorrow werden einmal pro Tag ausgelöst, und zwar kurz nach Mitternacht, wenn das holiday Modul den aktuellen Tag "analysiert" und die Readings aktualisiert. Du musst dazu gar keine Abfrage manuell starten.
Titel: Antw:Events bei Kalendern vom Typ holiday
Beitrag von: Spartacus am 20 Juni 2014, 09:47:03
Hallo,
danke für die Antwort. Bin mir aber noch nicht ganz sicher, ob ich verstanden habe, wie man auf das Ereignis reagiert, welches um kurz nach Mitternacht auftritt:

Schritt 1:
define NRW holiday

Schritt 2:
define TimerOffanFeiertag notify NRW:state.*1  \
{\
if (fhem ("get NRW today") !~ m/none/) \
    {fhem ("set Sonos_Buero Alarm Update 203 {Enabled => 0}")}\
else\
    {fhem ("set Sonos_Buero Alarm Update 203 {Enabled => 1}")}\


Danke
Spartacus
Titel: Antw:Events bei Kalendern vom Typ holiday
Beitrag von: betateilchen am 20 Juni 2014, 10:20:16
Irgendwie denkst Du viel zu kompliziert.

Eigentlich ist das Ganze doch sehr einfach:


define TimerOffanFeiertag notify NRW {
if ((ReadingsVal('NRW','state','none') eq 'none')
  {  fhem("set Sonos_Buero Alarm Update 203 {Enabled => 0}") }
else
  {  fhem("set Sonos_Buero Alarm Update 203 {Enabled => 1}") }
}


(Die Backslashes hab ich der Übersichtlichkeit halber nicht dargestellt, die sind so unnötig wie Fußpilz).
Titel: Antw:Events bei Kalendern vom Typ holiday
Beitrag von: Spartacus am 20 Juni 2014, 15:03:57
Hallo,
vielen Dank für die Unterstützung. Ich lasse das heute Abend mal laufen. Mal sehen, ob sich der Timer morgen verändert...

Spartacus.
Titel: Antw:Events bei Kalendern vom Typ holiday
Beitrag von: betateilchen am 20 Juni 2014, 15:17:34
ich hab grade mal noch zwei fehlende Klammern ergänzt.

Es nützt übrigens nichts, wenn Du einfach code per copy&paste übernimmst. Du musst die Funktionsweise verstehen.
Titel: Antw:Events bei Kalendern vom Typ holiday
Beitrag von: Spartacus am 20 Juni 2014, 19:42:45
Hallo,
ja damit hast Du natürlich recht! Ich versuche immer alles nachzuvollziehen und spiele auch mit dem Code, bevor ich den final einsetze. Dabei lerne ich am Besten. Nur manchmal komme ich einfach nicht auf den Lösungsweg und brauche jemanden, der mir auf die Sprünge hilft.

Ich weiß jetzt nicht , wo Du die Klammern korrigiert hast, anscheinend habe ich es in meinem Code korrekt gemacht, obwohl ich ziemlich auf Kriegsfuß mit den Klammern stehe... :-)

Spartacus
Titel: Antw:Events bei Kalendern vom Typ holiday
Beitrag von: betateilchen am 20 Juni 2014, 19:44:54
Die beiden schließenden runden Klammern bei den fhem() Funktionsaufrufen hatten gefehlt.
Titel: Antw:Events bei Kalendern vom Typ holiday
Beitrag von: Spartacus am 23 Juni 2014, 09:37:16
Hallo,
danke! Ist aber m.E. noch ein Fehler drin!
if ((ReadingsVal('NRW','state','none') eq 'none')
da ist nach dem "if" eine runde Klammer zu viel!

...aber noch mal eine Frage zu dem notify:
um kurz nach Mitternacht wird die holiday Datei geladen und das notify wird ausgeführt. Das passiert offenbar auch beim Starten von fhem. Jetzt ist es aber so, dass beim Starten von fhem mein sonos noch nicht initialisiert ist. Das dauert immer 2min. Gibt es eine andere Möglichkeit das notify zu testen? Also das Laden der hiliday Datei anzustossen? Mit get NRW today gibt er mir zwar das "none" aus, aber das notify wird nicht ausgeführt.

Gruß,
Spartacus.