Zeitsteuerung über CuxD-Timer

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

Moderator: Co-Administratoren

Antworten
sissiwup
Beiträge: 213
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

--------------------------------------------
750 Kanäle in 110 Geräten CCu3,CCu2Gateway,RaspiGateway,LanGateway,Repeater
--------------------------------------------

Antworten

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