Events bei Kalendern vom Typ holiday

Begonnen von Spartacus, 19 Juni 2014, 16:24:50

Vorheriges Thema - Nächstes Thema

Spartacus

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.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

betateilchen

#3
Irgendwie denkst Du viel zu kompliziert.

  • Du solltest kein notify direkt auf "state" machen.
  • Dein Schritt 2 passt so nicht.
  • Du musst kein "get NRW today" machen, das passiert ganz automatisch kurz nach Mitternacht.

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).
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

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.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

betateilchen

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.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

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
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R

betateilchen

Die beiden schließenden runden Klammern bei den fhem() Funktionsaufrufen hatten gefehlt.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

Spartacus

#8
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.
Fhem-System: 1 x raspberry PI Typ B, 1 x enOcean PI Typ B | Enocean: PTM210, FMS61NP, FAM14, 2 x FSR14-4x, FTS14-EM | LaCrosse: 2 x TX29D über Jeelink V3 | 1-Wire: 2 x DS18B20 über DS9490R