Seite auswählen

Universelles Astro/Zeit-Skript für Rolladen, Lampen …

,
Universelles Astro/Zeit-Skript für Rolladen, Lampen …
Print Friendly

Im Homematic Zeitmodul fehlen eine Reihe wichtiger Zeitfunktionen wie Datumsbereiche, Monate, Wochentage und Kalenderwochen. Aber besonders die Astrofunktion ist unbefriedigend, weil man nur selten genau zum Sonnenaufgang(SA) oder Sonnenuntergang(SU) etwas schalten möchte. Meist benötigt man nämlich Schaltvorgänge vor oder nach diesem Sonnenereignis.

Um diesen Mangel „auszubügeln“ , gibt es in den einschlägigen  Foren eine Vielzahl von mehr oder weniger gelungener Hilfslösungen, die aber meist nur auf spezielle Fragestellungen abgestimmt wurden. Mit diesem universell einsetzbaren Astro/Zeitskript werden verschiedene Systemvariablen berechnet, welche die verschiedenen Zeitinformationen abbilden. Die gewählte Benamung der Systemvariablen erklären selbstredend die Funktion.

Und das geht so:

1. Folgende Systemvariablen anlegen:

Minuten_vor_SA als Zahl , Wertebereich -1000 bis +1000
Minuten_vor_SU als Zahl , Wertebereich -1000 bis +1000
Tageszeit_hh.mm als Zahl in h
Datum_MM.TT als Zahl
Monat als Werteliste Januar;Februar; …
Monatstag als Werteliste 1;2;3; … ;31
Wochennummer als Zahl
Woche_gerade logisch wahr ist gerade , unwahr ist ungerade
Wochentag als Zahl
Jahrestag als Zahl
Jahr als Zahl

2. WebUI Programm anlegen, in dem beispielsweise alle 3min das folgende Astro/Zeit-Skript aufgerufen wird:

astro_skript1
Das Skript dazu verwendet nur eine (!) Skriptvariable, was für eine gute „Skripthygiene“ wichtig ist.

 

!Skript zur Berechnung der Minuten vor SA und SU        !  
!stall.biz  04.04.2016  Dieses Skript verwendet nur eine (!) Skript-Variable     
!folgende Systemvariablen anlegen
!Minuten_vor_SA"    als Zahl , Wertebereich  -1000 bis +1000
!Minuten_vor_SU"    als Zahl , Wertebereich  -1000 bis +1000
!"Tageszeit_hh.mm"  als Zahl  in h
!"Datum_MM.TT"    als Zahl  
!"Monat"    als Werteliste Januar;Februar;  ...  
!"Monatstag"    als Zahl 
!"Wochennummer"    als Zahl  
!"Woche_gerade"    logisch   wahr ist gerade , unwahr ist ungerade
!"Wochentag"    als Zahl  
!"Jahrestag" als Zahl
!"Jahr" als Zahl 
 
real c_zeit =(system.Date("%M").ToFloat()+ (60.0*system.Date("%H").ToFloat())); 
 
if (c_zeit >720.0) { dom.GetObject("Minuten_vor_SA").State(999); 
  c_zeit = system.SunsetTime("%M").ToFloat() + (60.0*system.SunsetTime("%H").ToFloat());
  c_zeit = c_zeit -  (system.Date("%M").ToFloat()+ (60.0*system.Date("%H").ToFloat()));
  dom.GetObject("Minuten_vor_SU").State(c_zeit); 
}
else {dom.GetObject("Minuten_vor_SU").State(999); 
  c_zeit = system.SunriseTime("%M").ToFloat() + (60.0*system.SunriseTime("%H").ToFloat());
  c_zeit = c_zeit - (system.Date("%M").ToFloat()+ (60.0*system.Date("%H").ToFloat()));
  dom.GetObject("Minuten_vor_SA").State(c_zeit); 
}
 
c_zeit = (1.0*system.Date("%H").ToInteger()) +(0.01*system.Date("%M").ToInteger());                      
dom.GetObject("Tageszeit_hh.mm").State(c_zeit);
 
c_zeit  = (0.01 * system.Date("%d").ToInteger()) + system.Date("%m").ToInteger();
dom.GetObject("Datum_MM.TT").State(c_zeit );
 
c_zeit   = system.Date("%Y").ToInteger();
dom.GetObject("Jahr").State(c_zeit);
 
 
c_zeit   = system.Date("%m").ToInteger();
dom.GetObject("Monat").State(c_zeit  -1);
 
c_zeit    = system.Date("%d").ToInteger();
dom.GetObject("Monatstag").State(c_zeit );
 
c_zeit =  system.Date("%V").ToInteger();
dom.GetObject("Wochennummer").State(c_zeit);
 
if ((c_zeit - 2*(c_zeit/2.0)) == 1) {dom.GetObject("Woche_gerade").State(0);} else {dom.GetObject("Woche_gerade").State(1);}
 
c_zeit = system.Date("%u").ToInteger();
dom.GetObject("Wochentag").State( c_zeit);
 
c_zeit = system.Date("%j").ToInteger();
dom.GetObject("Jahrestag").State( c_zeit);

3. Wer CuxD installiert hat, der kann den manchmal instabilen regelmäßigen Zeitaufruf des Astro/Zeit-Skripts mit einem CuxD-Timer realisieren. Wie das geht, ist an verschiedenen Stellen im Homematic-Forum bereits beschrieben, so daß hier auf eine weitere Erklärung verzichtet wird. Das Programm zum regelmässigen Aufruf des Astro/Zeit-Skriptes sieht mit einem CuxD-Timer dann so aus:

astro_skript5
Der Vorteil bei diesem Verfahren ist, daß fast die gesamten Zeitsteuerungen der WebUI-Programme nun über die neuen Astro/Zeit-Systemvariablen erfolgen kann. Und diese Systemvariablen werden nur über einen(!) viel zuverlässigeren CuxD-Timer aktualisiert. Damit wird das gesamte Zeitmanagement deutlich stabiler und zuverlässiger.

4. So wird das Astro/Zeit-Skript eingesetzt
Zum Beispiel eine Rollade so steuern, daß sie morgens 30min vor Sonnenaufgang hoch geht, aber nicht vor 6h45 und abends 45min nach Sonnenuntergang runter fährt,aber nicht später als 22h00.

Das WebUI -Programm dazu ist mit Verwendung der soeben definierten Systemvariablen ganz einfach:

astro_skript4
…und mit der Verwendung der Systemvariablen aus der Astro/Zeitsteuerung sind die WebUI-Programm viel besser lesbar, als mit dem „verkorksten“Zeitmodul!

Einige User hatten das Problem, daß bei dem obigen Programm der Rolladenaktor jedesmal „klickt“, wenn die Systemvariable Minuten_vor_SA alle 2 Minuten aktualisiert wird. Das kann man verhindern mit folgendem geänderten Programm:

rollladen_astro

 

Hier noch einige Erläuterungen zur Astrofunktion:
Da die meisten Steuerungsaufgaben sehr oft mit dem Sonnenaufgang und -untergang verknüpft ist, hat man die sog. Astrofunktion eingeführt. Diese ist aber oft unzureichend, weil man oft lieber einige Minuten vorher oder nachher den Schaltvorgang ausführen möchte. Dazu wurden in dem Astro/Zeit-Skript die zwei Systemvariablen Minuten_vor_SA und Minuten_vor_SU eingeführt. Der Wert dieser Variablen ändert sich über den Tagesverlauf entsprechend dem folgenden Bild:


Die Systemvariable Minuten_vor_SA ist nur von 00h00 bis 12h00 aktiviert und wird im zweiten Tagesabschnitt auf einen Wert von 999 gesetzt.
Bei der Systemvariablen Minuten_vor_SU ist es genau umgekehrt. Diese Definition hat Vorteile bei Anwendung in WebUI -Programmen.

Viel Spaß mit dem neuen „Zeitgefühl“

Fähigkeiten

Gepostet am

19. Februar 2016

39 Kommentare

  1. Hallo,
    ich möchte mich auch erstmal für das script bedanken!
    hatte die letzten Tage auch genau das Problem wie Michael und Mirko.
    Hab dann alles wieder gelöscht und neu aufgesetzt und bis jetzt läuft es.
    Hätte für mich noch gerne das die Rollos morgens nicht vor als 6 Uhr aufgehen
    und am Wochenende nicht vor 8 Uhr. Bekomme das irgendwie nicht hin.
    Könnte mir da vielleicht jemand helfen. Bin Homematic Neuling und ich glaube ich habe die Logik hinter den Programmen noch nicht begriffen.

  2. Sieht denn das Programm exakt so aus wie das zweite Beispielprogramm ??
    So kann man nur „Glaskugel-Lesen“!

  3. Hallo Admin,
    ich habe das gleiche Problem wie Mirko. Um 12:02h fahren alle Rolladen (12Stk) jeden Tag runter. Was kann man da machen? Alles läuft sonst super. Ich habe nicht den CuxD Timer installiert. Vielen Dank
    Gruß
    Michael

  4. Habe das Script 1:1 übernommen. Aber sie Variablen Wochennummer, Wochentag, Monatstag, Monat und Jahrestag werden nicht aktualisiert.
    Die Berechnung der Minuten vor SA bzw. SU sowie die Tageszeit funktioniert aber.
    Jemand eine Idee woher das kommen könnte?
    Dirk

  5. Hallo Admin,

    auch ich möchte mich für das Skript hier bedanken. Bin auch vor kurzem erst in die Homemeatic eingestiegen. HAbe bis jetzt erst eine Rollade automatisiert und möchte aber doch mein ganzes Haus damit ausrüsten.
    Zum Problem nun, gestern furh die Rollade um 12:02 Uhr runter und sie ist heute wohl auch wieder um 12:02 Uhr runter gefahren. Ich weiß jetzt nicht wo das herkommt. Die 2 Tage davor lief das ohne Probleme. Ich kann natürlich erstmal veruschen die beiden Programme, das Skript und die Variablen zu löschen und noch mal neu programmieren. Ich habe bisher nur die 3 Sachen auf der Homematic laufen.

    Gruß Mirko

  6. Nachtrag:
    Ich habe dein Script ein wenig angepasst und das setzen der Variablen Minuten_vor_SU und Minuten_vor_AS auf 999 raus genommen. Seit dem fahren die Rolläden schonmal nicht mehr um 12Uhr und 0Uhr.

  7. Danke für die schnelle Rückmeldung.
    Allerdings liegt genau da mein Problem.
    Die Programme sind exakt so aufgebaut wie deine.
    Bestes Beispiel gestern Abend: das Esszimmerrollo fuhr wie es sollte 45Min nach Sonnenuntergang runter (17:57Uhr) und direkt wieder hoch. Langsam zweifel ich an der Zuverlässigkeit meiner CCU.
    Alle meine Programme laufen. Batteriewarnungen per Pushnachricht, Wetterdatenabfrage bei WU und auch das astro_zeit_script. Nur die Rolladenprogramme nicht. Ich habe gestern zum testen und zum schonen der Nerven meiner Frau anstatt die Rolladen anzusteuern nur noch Pushnachrichten schicken lassen und das lief.
    Nachdem ich dachte alles klappt habe ich nur die dann-Aktivität wieder von Pushnachricht auf Rolladenansteuerung geändert und plötzlich machten die Rolläden wieder was Sie wollten.
    Ich habe Automatierierungstechnik gelernt und im Zuge meiner Technikerschule auch alles mögliche an Programmierung gelernt aber sowas unerklärliches ist mir noch nie passiert.
    Die Logik der Homematic ist doch eigentlich die gleiche wie die bei C++, oder liege ich falsch?

  8. Wichtig ist, dass Du Deine einzelnen Rollladenprogramme wie mein Beispielprogramm aufgebaut hast. Da ist auch ein witeres Programm dabei, dass ggf. ungewolltes Auslösen verhindert.
    Sehr wichtig ist auch, dass die Rollladen um einige Sekunden versetzt ausgeführt werden, da sonst gleichzeitig zuviel Funktraffic ist.

  9. Hallo Admin,
    erstmal danke für das tolle Script. Ich versuche jetzt seit gut einer Woche meine Rolladenaktoren damit zum laufen zu bringen. Das Script an sich läuft tadellos. Die Variablen werden korrekt gefüllt. Leider habe ich bei den Rolladenprogrammen unerklärliche Phänomene.

    Immer um 12Uhr und 0Uhr rum wenn die Zeit vor SA bzw. die Zeit vor SU auf 999Min gesetzt wird reagieren die Programme der Rolladen darauf und fahren runter. Um 0Uhr ist das nicht tragisch aber gegen Mittag hätte ich doch gerne Licht im Haus.
    Dafür fahren die Rollos Morgens nicht hoch und Abends nicht runter.
    Immer nur sporadisch ein oder zwei.
    Zur Erklärung sollte ich erwähnen das ich Homematic selbst erst seit ein paar Wochen nutze und folglich noch als Anfänger ein zu stufen bin.
    Könnte es daran liegen das die Programme sich gegenseitig in die Quere kommen?
    Wenn ich mir die letzte Ausführung anschaue sehe ich das 10 Programme gelichzeitig ablaufen und diese dann alle jedesmal beim aktualisieren der Systemvariablen erneut angestossen werden.
    Allerdings wird immer nur die Dann-Aktivität eines Programmes ausgeführt.
    Ich wäre für jede Hilfe dankbar.

    Gruß
    Stephan

  10. Korrektur: Auch das Testprogramm löst sporadisch aus…

  11. Hallo Admin,
    danke danke für die sehr guten Scripte 🙂 .

    Ich habe die Feiertage genutzt um meine alte CCU1 gegen eine neue CCU2 zu tauschen und in diesem Zuge habe ich anhand dieser Anleitung gearbeitet.

    Leider ist es so das trotz der gesetzten Bedingungen das Prog SU_LivingRoom:

    SU im Wertebereich kleiner als 0 (Änderung)
    UND
    Jalousie Wohnzimmer „Behanghöhe“ > 30% (Prüfen)
    DANN
    Jalousie Wohnzimmer verzögert um 30MIN „Behanghöhe 20%“
    Jalousie Esszimmer verzögert um 35MIN „Behanghöhe 20%“
    Jalousie Wohnzimmertür verzögert um 40MIN „Behanghöhe 20%“

    nicht zu dem zu erwartenden Sonnenuntergang fahren, sondern, sporadisch. 🙁 .

    Ich habe dazu ein Testprogramm mit den selben Bedingungen geschrieben, allerdings um die Nerven meiner Frau zu schonen, statt die Jalousien zu fahren, lasse ich mir Pushnachrichten senden. Auch die Nachrichten mit den Verzögerungen.

    Das Kuriose ist dabei, das Testprogramm läuft sauber 🙂 ,
    nicht aber das Programm mit den Jalousie Aktoren 🙁

    Es fällt auf das unter Startseite > Status und Bedienung > Programme Letzte Ausführung
    das Prog SU_LivingRoom gleichzeitig mit den dem Prog skript_astro_zeitsteuerung jedesmal neu „gestartet“ wird ??

    Hast du eine Idee wie ich den Fehler weiter eingrenzen kann ??

    Bin dankbar für jeden Tip.
    BR Guido

  12. Danke für die schnelle Antwort,

    das scheint bei der überwiegenden Anzahl der Rolladen zu funktionieren.
    Bei einem führts dazu, das alle 20 Sek. (Verzögerung) das Rollo hoch bzw. wieder runter geht. Bei den anderen Rollos erzeugt es spontane unspezifische Aktivitäten. Das Programm ist bis auf ein/zwei Ausnahmen überall gleich. Ich werd nun aber erstmal selber noch ein wenig rumprobieren …

    Gruß Michael

  13. … auf die Schnelle: versuch’s mal so:
    Bedingung: Wenn…
    Systemzustand roll_nacht bei Nacht bei Änderung auslösen
    UND
    Systemzustand roll_AutoManuell bei Automatik bei Änderung auslösen
    UND
    Behanghöhe > 80% bei Änderung
    ODER
    Geräteauswahl Rollos runter bei Tastendruck lang
    UND
    Behanghöhe >80% bei Änderung
    Aktivität: Dann…Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
    Geräteauswahl Schlafzimmer verzögert um 25 Sekunden Behanghöhe auf 40.00%
    Bedingung: Sonst, wenn…
    Systemzustand roll_AutoManuell bei Automatik bei Änderung auslösen
    UND
    Systemzustand Tageszeit_hh.mm größer 8:00 h bei Änderung auslösen
    UND
    Systemzustand Wochentag im Wertebereich kleiner als 5.00 nur prüfen
    UND
    Behanghöhe < 80% bei Änderung ODER Geräteauswahl Rollos hoch bei Tastendruck lang UND Behanghöhe < 80% bei Änderung Aktivität: Dann…Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern). Geräteauswahl Schlafzimmer verzögert um 25 Sekunden Behanghöhe auf 100.00% Aktivität:Sonst..

  14. Hallo, vielen dank für dein(e) Script(e). Allein würde ich an der Steuerung komplett verzweifeln. Ich nutze (versuche es) dieses Script in Kombination mit den Sonnenstandsskript und steuere meine Rolläden. Das funktioniert soweit auch ganz flüssig.
    Nun versuche ich die CCU-interne Zeitsteuerung nach und nach auszurangieren und nutze eben das o.g. Script in folgendem Beispielprogramm

    Bedingung: Wenn…
    Systemzustand roll_nacht bei Nacht bei Änderung auslösen
    UND
    Systemzustand roll_AutoManuell bei Automatik bei Änderung auslösen
    ODER
    Geräteauswahl Rollos runter bei Tastendruck lang
    Aktivität: Dann…Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
    Geräteauswahl Schlafzimmer verzögert um 25 Sekunden Behanghöhe auf 40.00%
    Bedingung: Sonst, wenn…
    Systemzustand roll_AutoManuell bei Automatik bei Änderung auslösen
    UND
    Systemzustand Tageszeit_hh.mm im Wertebereich von 7.58 h bis kleiner 8.02 h bei Aktualisierung auslösen
    UND
    Systemzustand Wochentag im Wertebereich kleiner als 5.00 bei Änderung auslösen
    ODER
    Geräteauswahl Rollos hoch bei Tastendruck lang
    Aktivität: Dann…Vor dem Ausführen alle laufenden Verzögerungen für diese Aktivitäten beenden (z.B. Retriggern).
    Geräteauswahl Schlafzimmer verzögert um 25 Sekunden Behanghöhe auf 100.00%
    Aktivität:Sonst..

    Die Rollen gehen dabei zuverlässig runter und auch hoch. Aber…ein (nur eine..die anderen nicht) Aktor klickt im Rythmus des Script-Programmdurchlaufes. Bei allen Rolläden läuft das permanent durch. Das führt eben dazu, dass ich ein Rollo welches abends runterfährt nicht hochfahren kann um die Hunde rauszulassen. Es fährt selbständig bei Programmdurchlauf runter. was mache ich falsch?

    Ich meine herausgefunden zu haben, dass die „Rollo wieder Hoch“ Bedingung das Phänomen hervorruft. Wenn ich dort das Standard Zeitmodul nehme und sage, dass die Rollos um 8 hochgehen sollen funktioniert alles wie es soll. (Rollos immer um 8 hoch außer Freitag und WE wenn Automatik an)

    Mfg MIchael

  15. Hi Frank,
    danke Dir für Deine Antwort. Werde ich heute Abend gleich mal in mein Programm mit einbauen.
    Gibt es eine Erklärung warum solch unterschiedliches Verhalten bei Programmausführung zustande kommt?
    Danke und Gruß,
    Manuckl

  16. Hallo Manuckl,
    ich würde mal folgende Änderungen machen:
    WENN
    Minuten_vor_SA im Wertebereich kleiner als 30.00 (bei Ändernung auslösen)
    UND Jalousie West-Fenster Wohnbereich:1 „Behanghöhe“ kleiner „80“ (nur prüfen)
    UND
    Jalousie-Automatik bei „wahr“ (nur prüfen)
    UND
    Drehgriff Terrassentür Wohnbereich:1 bei „Fensterzustand: verriegelt“ (nur prüfen)
    DANN
    Jalousie West-Fenster Wohnbereich:1 „Behanghöhe“ auf „100“

    SONST WENN
    Minuten_vor_SU im Wertebereich kleiner als -45.00 (bei Änderung auslösen)
    UND Jalousie West-Fenster Wohnbereich:1 „Behanghöhe“ größer „20“ (nur prüfen)

    UND
    Jalousie-Automatik bei „wahr“ (nur prüfen)
    UND
    Drehgriff Terrassentür Wohnbereich:1 bei „Fensterzustand: verriegelt“ (nur prüfen)
    DANN
    Jalousie West-Fenster Wohnbereich:1 „Behanghöhe“ auf „0“

    SONST

  17. Hallo Frank,

    vielen Dank für Deinen Beitrag und das bereitgestellte Skript zur Zeitsteuerung. Habe das Skript die Tage in meiner CCU2 hinterlegt und musste nun feststellen (wie John Doe), dass ich morgens (nach dem Öffnen der Jalousien) alle zwei Minuten das Klicken in den Jalousie-Aktoren vernehme 🙁 Das Klicken geht genau bis 12 Uhr – danach ist Ruhe.
    Abends, wenn die Jalousien schließen ist kein Klicken zu hören. Hast Du bzw. John Doe zwischenzeitlich eine Erklärung/Lösung für diese Problematik?

    Mein Programm sieht wie folgt aus:
    WENN
    Minuten_vor_SA im Wertebereich kleiner als 30.00 (bei Ändernung auslösen)
    UND
    Jalousie-Automatik bei „wahr“ (nur prüfen)
    UND
    Drehgriff Terrassentür Wohnbereich:1 bei „Fensterzustand: verriegelt“ (nur prüfen)
    DANN
    Jalousie West-Fenster Wohnbereich:1 „Behanghöhe“ auf „100“

    SONST WENN
    Minuten_vor_SU im Wertebereich kleiner als -45.00 (bei Änderung auslösen)
    UND
    Jalousie-Automatik bei „wahr“ (nur prüfen)
    UND
    Drehgriff Terrassentür Wohnbereich:1 bei „Fensterzustand: verriegelt“ (nur prüfen)
    DANN
    Jalousie West-Fenster Wohnbereich:1 „Behanghöhe“ auf „0“

    SONST

    Würde mich über kurze Rückmeldung freuen.

    Vielen Dank und schöen Grüße,
    Manuckl

  18. @Doc Spider:
    Lasse mal die Werteliste für Monatstag mit 0 beginnen, dann klappts auch mit dem Datum 🙂

    Gruß
    Frank

  19. @Thomas:
    Die Werteliste für Monatstag sollte mit 0 beginnen…

    Gruß
    Frank

Kommentar absenden

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Translate »