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

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von Xel66 » 23.04.2020, 20:22

funkleuchtturm hat geschrieben:
23.04.2020, 19:39
... wie gut, daß wir hier eine "Richterinstanz" haben, die genau weiß, was richtig ist und was nicht
Darum geht es gar nicht und ich richte nicht, sondern lege nur meine Meinung dar. Ich war eigentlich der Überzeugung, dass dieses in Deutschland ein Grundrecht ist. Ich will auch niemandem auf die Füße treten. Nicht umsonst benutze ich Formulierungen wie "Ich finde...". Dieses ist eine Meinungsäußerung und nicht mehr oder weniger. Die Richterinstanz hat Du da reininterpretiert und was richtig und falsch ist, weiß ich ebenso nicht immer, habe aber ein recht gutes Gefühl dafür (auch wenn es mich manchmal trügen mag). Unabhängig davon schätze ich Deine Arbeit und Deine Projekte sehr.

Das Script an sich ist ja zielführend, wenn es z.B. um eine elevationsabhängige oder azimutale Steuerung geht oder wenn vorgezogene Sonnenauf- und Untergangszeiten für Steuerungen herangezogen werden. Für die scriptinterne Verwendung ist eine Rechnung mit Dezimalzahlen auch zielführend, aber als Output eben verzichtbar und eben problembehaftet. Siehe obiges Beispiel.

Mit diesen Uhrzeiten im Dezimalformat geht nichts, was nicht auch mit den originalem Zeitmodul möglich wäre (eigentlich sogar weniger, denn da kann man z.B. auch noch Wochentage für die Gültigkeit auswählen). Ich bin schon mehrmals hier im Forum auf Probleme gestoßen, die eben auf die zyklische Aktualisierung dieser Variablen zurückzuführen waren. Das ist das, was ich kritisiere. Nicht das Script als solches. Das Problem ist, was unerfahrene Anwender daraus machen. Oft kommt es eben zu Nebeneffekten, wenn eigentlich im System enthaltene Funktionen durch zyklisch getaktet Scripts ersetzt werden. Diese verhalten sich durch das zyklische Aktualisieren nämlich anders als die im System vorhandenen Zeittrigger. Und dieser Effekt tritt häufig auf.

Das Homematic-System ist eben ereignisgesteuert. Und solche Ereignisse werden eben bei solchen Aktualisierungen generiert, was dann eben auch Programme (oder zumindest deren Bedingungsprüfung) triggert. Enthalten solche Programme dann noch ein SONST wird den ganzen Tag fleißig in der Gegend rumgefunkt, was sich natürlich dann auch auf den Duty Cycle auswirkt. Wäre dieses nicht so eine "knappe" Ressource, wäre das grundsätzlich kein Problem. Sind dann aber ggf. noch Batterieaktoren beteiligt, dann wird es richtig spaßig. Dann fängt man nämlich an, Geister zu jagen, bevor man auf diese eigentlich profane Ursache kommt.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von Black » 24.04.2020, 08:17

Ich muss da Xel66 allerdings auch Recht geben. Die Zyklische programmverarbeitung ist eher was für Microcontroller oder eine SPS mit ihren OB1 Zyclen, eine CCU hat ihre Stärke halt bei der erreignisgesteuerten Abarbeitung.

In den letzten Jahren hat sich auch extrem viel getan am Erkenntnisstand über die rega und deren Funktionalität, so dass heutzutage auch dynamische veränderungen von zeitmodulen möglich sind. Empfehlungen der Verdrehungen der Geographischen lage um einen offset zu Erzeugen sind damit eher kontraporduktiv und "Schnee von gestern".

Hier habe ich mit Beispielen und der Konkreten Anwendung Rollosteuerung mal ein Beispiel zu publiziert
Dynamisches Zeitmodul

Die Eingriffmöglichketien in den Offset sind da auch flexible:
soll beispielsweite Monatsabhängig noch zu diesem offset noch ein Weiterer Wert aufgeschlagen werden, so sähe dies dann so aus:

SunriseOffset = SunriseOffset + (web.webGetValueFromList ("0;0;0;-10;-10;-20;-20;-20;-10;-5;0;0",localtime.Month ()-1)).ToInteger ();

Beispiel hier würde in den Monaten Januar, Februar,März,November,Dezember keine Offset zum Sonnenaufgang nehmen, im April 10 Minuten Vorher, im Mai auch uDas gleiche geht auch für Sunsetoffset.

Und das ganze arbeitet dann Eventgetriggert.

Wobei sich hierbei noch, wenn SunsetOffset und Sunriseoffset nicht als Konstante sondern aus einer Systemvariable geladen werden, dieser Offset noch komfortable von einem Externen System aus, wie z.B. bei mir IOBroker, einstellen lassen.

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Xel66
Beiträge: 14085
Registriert: 08.05.2013, 23:33
System: Alternative CCU (auf Basis OCCU)
Wohnort: Nordwürttemberg
Hat sich bedankt: 580 Mal
Danksagung erhalten: 1492 Mal

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von Xel66 » 24.04.2020, 11:54

Noch kleine Ergänzung zum Topic. Wer die unterschiedlichen Sonnenverläufe im Sommer- und Winterhalbjahr (Kurve flacher im Winterhalbjahr, dadurch längere Dämmerung) berücksichtigen will, triggert auf die Elevation (Höhe der Sonne über oder unter dem Horizont) des Scripts eine Systemvariable vom Typ Logik und lässt diese dann die Schaltaufgabe durchführen. Die Helligkeit sollte dann im im Winter- und im Sommerhalbjahr gleich sein, da ja auf den gleichen Sonnenwinkel reagiert wird. So kann man auch recht einfach auf die verschiedenen Dämmerungsstufen reagieren.

Das Programm zum Umschalten der Variable sollte aber auch eine verUNDete Zustandsabfrage enthalten und nur dann umschalten, wenn die Systemvariable nicht den gewünschten Zustand hat, denn je nach Programmierung würde diese auch im Takt des Scripts aktualisiert. Programme, die diese Variable als Trigger enthalten, würden dann auch in diesem Takt eine Bedingungsprüfung machen. Das Verhalten wäre also identisch zur direkten Ansteuerung, was ja gerade durch diese Programmierung verhindert werden soll.

Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch

wolleMatic
Beiträge: 58
Registriert: 21.08.2014, 19:45
Hat sich bedankt: 6 Mal

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von wolleMatic » 12.05.2021, 20:59

Hütte hat geschrieben:
27.01.2020, 11:24
Du kannst im "Sonst-Wenn-Zweig", die Prüfung auf die Behanghöhe aus der "Oder"-Verknüpfung rausnehmen und dann eine zweite Gruppe von Prüfungen einbauen, die mit der ersten Gruppe in dieser Abfrage per "UND" verbunden sind. Dafür das "Oder" in der Auswahlliste durch ein "Und" ersetzen und danach die Plus-Taste davor drücken. Auf diese Weise kannst dun dann theoretisch jede Menge an Gruppen, die per UND verknüpft sind hinzufügen und innerhalb jeder dieser Gruppen sind dann die Bedingungen per "Oder" verknüpft.
Diese UND-Verknüpfung benötigst du auf jeden Fall, wenn du den Tipp umsetzt, der verhindert, dass Programme unnötig bei Start ausgeführt werden.
Hallo Hütte,
hast du ein Screenshot von dem was du beschreibst? Das würde es einfacher machen. Meinst du mit deinem letzten Satz "...unnötig bei Start..." das Relais klickern?
VG Wolle

Hütte
Beiträge: 746
Registriert: 08.02.2017, 11:08
Hat sich bedankt: 32 Mal
Danksagung erhalten: 75 Mal

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von Hütte » 16.05.2021, 18:20

Das bezog ich auf den Beitrag von jogi2573.

Und gleich darüber hatte ich auf die Tipps für Anfänger an (viewtopic.php?t=22801), Speziell Tipp 14 - "Programme bei Zentralenstart nicht ausführen" verwiesen.

Und dieser Tip bezog sich darauf, dass bei einem Neustart die Programme nicht unnötig ausgeführt werden, was eben ansonsten dazu führen kann, dass dann die Rollos unnötig bei einem Neustart der Zentrale rauf und runter fahren.

Paradox
Beiträge: 213
Registriert: 18.02.2021, 19:30
System: Alternative CCU (auf Basis OCCU)
Wohnort: Schwarzenbek
Hat sich bedankt: 115 Mal
Danksagung erhalten: 5 Mal

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von Paradox » 01.12.2021, 09:06

Hallo zusammen,


ich verzweifle gerade ein bisschen an diesem skript, mehr als copy and paste kann man ja nicht machen...

Ich habe wie die Anleitung gegeben die SVs angelegt, genauso, nichts verändert, den CuxD Timer habe ich auch zum laufen bekommen.
Das Programm wird alle 2min ausgelöst, so wie es sein soll. Jedoch werden die SVs nicht wie gewünscht alle 2min neubefüllt.
Wenn ich das Skript teste, geht es bzw. wenn ich das Programm manuell starte, aber danach passiert nichts mehr. Wo ist mein Fehler?

Anbei ein paar ScreenShots:
2021-12-01 08_53_57-.jpg
2021-12-01 08_55_01-.jpg
2021-12-01 08_56_01-Window.jpg
2021-12-01 08_56_39-Window.jpg
2021-12-01 08_58_01-Window.jpg
Das Skript, wie gesagt auch nur kopiert und eingefügt:

Code: Alles auswählen

!Skript zur Berechnung der Minuten vor SA und SU        !  
!stall.biz  18.02.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 Werteliste 1;2;3; ... ;31  
!"Wochennummer"    als Zahl  
!"Woche_gerade"    logisch   wahr ist gerade , unwahr ist ungerade
!"Wochentag"    als Zahl  
!"Jahrestag" 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); 
}

real c_zeit = (1.0*system.Date("%H").ToInteger()) +(0.01*system.Date("%M").ToInteger());                      
dom.GetObject("Tageszeit_hh.mm").State(c_zeit);

real c_zeit  = (0.01 * system.Date("%d").ToInteger()) + system.Date("%m").ToInteger();
dom.GetObject("Datum_MM.TT").State(c_zeit );

integer c_zeit   = system.Date("%m").ToInteger();
dom.GetObject("Monat").State(c_zeit  -1);

integer c_zeit    = system.Date("%d").ToInteger();
dom.GetObject("Monatstag").State(c_zeit    -1);

integer 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);}

integer  c_zeit = system.Date("%u").ToInteger();
dom.GetObject("Wochentag").State( c_zeit);

integer c_zeit = system.Date("%j").ToInteger();
dom.GetObject("Jahrestag").State( c_zeit);

Wo ist mein Fehler?
CCU3 mit RaspberryMatic

Lernt gerne und stetig dazu! :idea:

MichaelN
Beiträge: 9562
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 696 Mal
Danksagung erhalten: 1608 Mal

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von MichaelN » 01.12.2021, 09:12

Welchen Vorteil soll der Cuxd Timer haben? Nimm einfach das normale Zeitmodul, dann hast Du schon mal eine Fehlerquelle weniger
LG, Michael.

Wenn du eine App zur Bedienung brauchst, dann hast du kein Smarthome.

Wettervorhersage über AccuWeather oder OpenWeatherMap+++ Rollladensteuerung 2.0 +++ JSON-API-Ausgaben auswerten +++ undokumentierte Skript-Befehle und Debugging-Tipps +++

Benutzeravatar
Baxxy
Beiträge: 10648
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 597 Mal
Danksagung erhalten: 2180 Mal

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von Baxxy » 01.12.2021, 09:40

Paradox hat geschrieben:
01.12.2021, 09:06
Das Programm wird alle 2min ausgelöst, so wie es sein soll.
Nur weil der Zeitstempel das suggeriert muss es noch lange nicht so sein.
Hast du das mal mit einem der üblichen Debugging-Tips (Script / SysVar) verifiziert?

In der CUxD-Doku (Seite 93) wird ja sicherlich nicht umsonst von "TIMER_EVENT" abgeraten. :wink:

Grüße, Baxxy

Paradox
Beiträge: 213
Registriert: 18.02.2021, 19:30
System: Alternative CCU (auf Basis OCCU)
Wohnort: Schwarzenbek
Hat sich bedankt: 115 Mal
Danksagung erhalten: 5 Mal

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von Paradox » 01.12.2021, 09:58

MichaelN hat geschrieben:
01.12.2021, 09:12
Welchen Vorteil soll der Cuxd Timer haben? Nimm einfach das normale Zeitmodul, dann hast Du schon mal eine Fehlerquelle weniger
Danke, aber auch nach Umstellung auf das Zeitintervall der CCU funktioniert es nur einmal und danach nicht mehr. was mache ich denn bitte falsch das das Programm nicht in Endlosschleife läuft?
2021-12-01 09_46_40-Window.jpg
2021-12-01 09_47_51-Window.jpg
CCU3 mit RaspberryMatic

Lernt gerne und stetig dazu! :idea:

Tyfys
Beiträge: 531
Registriert: 17.04.2021, 17:12
System: CCU
Hat sich bedankt: 26 Mal
Danksagung erhalten: 121 Mal

Re: Universelles Astro/Zeit-Skript für Rolladen, Lampen und mehr

Beitrag von Tyfys » 01.12.2021, 10:09

ich sehe nur Zeitpunkt UM 9.45 Uhr

Du müsstest dann auch bei Zeitspanne etwas auswählen
Gruß
Harry

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“