Zeitsteuerung über CuxD-Timer

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

Moderator: Co-Administratoren

Antworten
sissiwup
Beiträge: 222
Registriert: 10.03.2015, 10:54
Wohnort: Süd NDS

Zeitsteuerung über CuxD-Timer

Beitrag von sissiwup » 11.01.2019, 02:37

Hallo,

ich habe mich mit meinen Rollos beschäftigt.
Was möchte ich: Zeitgesteuert hoch bzw. runterfahren. Aber nicht vor oder nach einer bestimmten Zeit.

Ich habe dafür ein kleines Skript entwickelt:

Man kann zu einer exakten Zeit einen Timer auslösen, zu Sonnenaufgang oder Untergang.
Oder aber auch zum Maximum oder Minimum aus Zeit oder Sonnenaufgang/Untergang.
Zusätzlich kann man im gleichen Schritt auch noch einen Offset zum Sonnenuntergang oder Aufgang Hinzufügen.

Beispiel: Ich möchte mein Rolo 45 Minuten nach Sonnenaufgang aber nicht vor 7:30 aufgehen lassen:

1%07:30:00/SA=+45/MAX
Nutze Timer 1
Berechne den Sonnenaufgang, addiere 45 Minuten hinzu.
Ist die Summe < 7:30 nimm 7:30 sonst die Summe.

Code: Alles auswählen

! Zeitskript
! TimerNummer:Uhrzeit
! Timernummer:Uhrzeit/Sonnenzeit/Operator      
! Timernummer: 1-16 Kanal vom CuxD-Timer
! Uhreit: hh:mm:ss
! Sonnenzeit: SA=+30 Sonnenaufgang+30Minuten (nach Sonnenuntergang)  SU=-20 Sonennuntergang-20Minuten (vor Sonnenuntergang)
! Operator: MIN/MAX/SUN/TIM  MIN = Minimum der Zeiten, MAX = Maximium der Zeiten, SUN = Sonnenzeit, TIM = Uhrzeit (alternativ Schreibweise 1

string timer = "1%08:00:00/SA=+0/SUN;2%18:00:00/SU=+0/SUN;"#      
               "3%07:30:00/SA=-60/MAX;4%08:00:00/SA=-30/MAX;"#    
               "5%18:30:00/SU=+30/MAX;6%19:30:00/SU=+60/MAX";     
string cuxtm = "CUxD.CUX2800001";

! ################################################################
! keine Aenderungen notwendig
! ################################################################

integer sa=system.SunriseTime("%F %H:%M:%S").ToTime().ToInteger();
integer su=system.SunsetTime("%F %H:%M:%S").ToTime().ToInteger();
WriteLine("Aufgang:    "#sa.ToTime());
WriteLine("Untergang:  "#su.ToTime());

string tim;
foreach(tim,timer.Split(";")) {
  string timNr=tim.StrValueByIndex("%", 0);
  string timVal=tim.StrValueByIndex("%", 1);
  string valTime=timVal.StrValueByIndex("/", 0);
  string valSau=timVal.StrValueByIndex("/", 1);
  string sauP1=valSau.StrValueByIndex("=", 0);
  integer offset=valSau.StrValueByIndex("=", 1).ToInteger();
  string valFunk=timVal.StrValueByIndex("/", 2);
  string result=valTime;
  integer refTime=su;
  if (sauP1 == "SA") {  
    refTime=sa;
  } 
  refTime=refTime+offset*60;
  if (valFunk == "SUN") {  ! SONNE-Zeit 
    result=refTime.ToTime().Format("%H:%M:%S");
  }
  if (valFunk == "TIM") {  ! Exakte-Zeit 
    result=valTime;
  }
  if (valFunk == "MAX") {  ! Maximun aus Zeit 
    integer abstime=(system.SunsetTime("%F ")#valTime).ToTime().ToInteger();
    if (abstime<refTime) {
      result=refTime.ToTime().Format("%H:%M:%S");
    } else {
      result=valTime;
    }
  }
  if (valFunk == "MIN") {  ! Minimum aus Zeit
    integer abstime=(system.SunsetTime("%F ")#valTime).ToTime().ToInteger();
    if (abstime>refTime) {
      result=refTime.ToTime().Format("%H:%M:%S");
    } else {
      result=valTime;
    }
  }
  WriteLine(tim # "-> "# result);
  string obj=cuxtm#":"#timNr#".TIMER_SET";
  dom.GetObject(obj).State(result);
}
Das skript sollte 1x pro Nacht laufen. Ich hab es auf 01:00 gelegt.
Ich hab es auf 12:00 Mittage gelegt. Warum: Wenn ich morgens erst später die Timer per Hand stellen möchte so kann ich das ab 12:00 machen. Anschließend laufen die am nächsten morgen wie eingestellt. Die Timer am Abend kann ich ab 12:00 ändern. passt für mich auch.
Bildschirmfoto 2019-01-11 um 15.35.17.png
Ein Beispiel eines Rollos - besser in zwei einzelne Skripte auslagern!
Bildschirmfoto 2019-01-11 um 15.36.13.png
So sieht der Timer aus
Bildschirmfoto 2019-01-11 um 15.34.42.png
So sieht meine Oberfläche dazu aus:
Bildschirmfoto 2019-01-11 um 20.51.30.png
MfG

Sissiwup

--------------------------------------------
CCu3,CCu2Gateway,RaspiGateway,LanGateway
--------------------------------------------

sissiwup
Beiträge: 222
Registriert: 10.03.2015, 10:54
Wohnort: Süd NDS

Re: Zeitsteuerung über CuxD-Timer

Beitrag von sissiwup » 23.01.2019, 20:35

Hallo,

Was mich an den bestehenden Skripten gestört hat und hier nicht Auftritt:

Das Rollos mehrfach getriggert werden, z.B. Um 7:30 und zum Sonnenaufgang
Oder bei jeder Änderung einer Variablen wie beim Sonnenstandskripten, wenn
Variablen im Minutentakt geupdatet werden.
MfG

Sissiwup

--------------------------------------------
CCu3,CCu2Gateway,RaspiGateway,LanGateway
--------------------------------------------

sissiwup
Beiträge: 222
Registriert: 10.03.2015, 10:54
Wohnort: Süd NDS

Re: Zeitsteuerung über CuxD-Timer

Beitrag von sissiwup » 06.03.2019, 23:01

Hallo,

hier sieht man mal die berechneten Zeiten im Verhältnis zur Helligkeitssteuerung:
Bildschirmfoto 2019-03-06 um 22.57.27.png
Lila = bürgerliche Helligkeit
Violett = Sonnensteuerung Homatic

Rest = Helligkeit von 3 Bewegungsmeldern (bei blau und orange sieht man den Einfluss des Ausschalten des Lichts bei erreichen der bürgerlichen Helligkeit)

=> Steuerung über Helligkeit anhand der Bewegungsmeldern ist schwierig, da im unteren Helligkeitsbereich zu wenig Dynamik da ist,
aber durch Wolken etc. Sonne recht große Einflüsse im oberen Bereich da sind.
MfG

Sissiwup

--------------------------------------------
CCu3,CCu2Gateway,RaspiGateway,LanGateway
--------------------------------------------

Antworten

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