Erweiterte Astrofunktion mit Homematic

Wir verwirklichen Ihre Ideen!

Homematic Alarmanlage
Erweiterte Astrofunktion

Ziel: Es soll möglich sein über eine Systemvariable bsp. immer vormittags ein Gerät zu schalten.
Stacks Image 1934
Komponenten
Zentrale
Allgemein
Mein Programm soll die Astrofunktionen der Homematic erweitern. Es störte mich, dass ich nur Sonnenaufgang und Sonnenuntergang als Funktion im Zeitmodul wählen konnte. Ich finde aber, dass man bsw. vormittag, nachmittag und abends auch nutzen könnte.
Programm
  • Als erstes lege ich in der Homematic WebUI eine neue Systemvariable an. In meinem Fall heisst die Variable "Tageszeit" und hat eine Werteliste.
  • Die Werte kann man von hier kopieren:
  • Nacht; Morgen; Vormittag; Mittag; Nachmittag; Abend;
Programm Astrofunktion 1
  • Nun erstelle ich ein neues Programm und nenne es "System - Tageszeit". Diese Programm prüft alle 5 Minuten die Zeit und schaltet dann die Systemvariable. Als Wenn: Bedingung füge ich das Zeitmodul ein.
Programm Astrofunktion 2
  • Im Zeitmodul muss dann die Zeitspanne auf Ganztägig und das Zeitintervall auf alle 5 Minuten stellen. Das Ende muss nicht definiert werden.
Zeitmodul Astrofunktion
Script
  • Als Aktivität wählt man dann Script aus und kopiert die u.g. Zeilen hinein. Fertig!

real c_zeit = (0.01 * system.Date("%M").ToInteger()) + system.Date("%H").ToInteger();real c_beginn = (0.01 * system.SunriseTime("%M").ToInteger()) + system.SunriseTime("%H").ToInteger();real c_ende = (0.01 * system.SunsetTime("%M").ToInteger()) + system.SunsetTime("%H").ToInteger();real c_mittag = 0.5 * (c_beginn + c_ende);integer v_tageszeit = 0; ! Nachtif ((c_zeit < c_ende + 2) || (c_zeit < 22.00)) { v_tageszeit = 7; ! Abend}if (c_zeit < c_ende) { v_tageszeit = 5; ! Nachmittag}if (c_zeit < c_mittag + 1) { v_tageszeit = 4; ! Mittag}if (c_zeit < c_mittag - 1) { v_tageszeit = 3; ! Vormittag}if (c_zeit < c_beginn) { v_tageszeit = 2; ! Morgen}if ((c_zeit < c_beginn - 2) && (c_zeit < 04.00)) { v_tageszeit = 0; ! Nacht}object s_tageszeit = dom.GetObject("Tageszeit");if (s_tageszeit.Value() != v_tageszeit) { s_tageszeit.State(v_tageszeit);}

Ich nutze diese Variable z.B. im Garten um meinen Bachlauf nur am Nachmittag laufen zu lassen. Die Möglichkeiten sind damit unbegrenzt.
Logic
Wenn: Alle 5 Minuten
Dann: Schalte die Variable Tageszeit mit Astrofunktion
Wenn alles geklappt hat…
Kommentare