(gelöst) Sonnenaufgang mit variablem Datum errechnen

Allgemeines zur HomeMatic Haussteuerung

Moderator: Co-Administratoren

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

Re: Sonnenaufgang mit variablem Datum errechnen

Beitrag von Xel66 » 13.08.2018, 19:29

alchy hat geschrieben:
13.08.2018, 19:10
Du kannst doch sehr wohl ein Programm zusammen klicken was in 7 Tagen zum Sonnenaufgang triggert.
Klar kann man dieses - händisch. Sogar mit dem Zeitmodul, aber eben nur exakt für diesen einen Zeitpunkt. Sogar auf zwei Arten. Man kann die ermittelte Zeit als Trigger setzen oder eben auch die Astrofunktion nutzen. Man kann aber nicht automatisiert den Zeitpunkt als Triggerzeitpunkt setzen.
alchy hat geschrieben:
13.08.2018, 19:10
Aber der TE will ja eigentlich nur wissen wann Sonnenaufgang in 7Tagen ist.
Genau, er will es lediglich wissen und nicht als Trigger verwenden. Und für diesen Zweck gibt geeignetere Quellen. Wobei die verlinkte Scriptlösung durchaus zweckmäßig ist und auf alle Fälle frei von Nebenwirkungen, als wenn man zur Berechnung temporär das Systemdatum verstellen würde, um dann die berechneten Zeitpunkte auszulesen.

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

MacDad
Beiträge: 83
Registriert: 16.12.2017, 11:22
Wohnort: NRW-DO.

(gelöst) Sonnenaufgang mit variablem Datum errechnen

Beitrag von MacDad » 14.08.2018, 17:56

Moin in die Runde :D
alchy hat geschrieben:
13.08.2018, 17:52
Klar ist es möglich, nur welchen Weg willst du gehen.
So ich dich verstanden habe interessiert dich eher der Weg als das angegebene Ziel.
...
Alchy
Beides :wink: mir ging es primär um die Frage, ob es mit Script möglich ist, hatte zu diesem Thema leider nichts gefunden.
alchy hat geschrieben:
13.08.2018, 17:52
...
Wahrscheinlich will der TE nun aber nicht ein Programm zusammenklicken, nehme ich zumindest an :?:
...
Alchy
Will er nicht, ganz bestimmt nicht :!:
Ich würde Plan B bevorzugen.
alchy hat geschrieben:
13.08.2018, 18:40
ptweety hat geschrieben:
13.08.2018, 18:13
Meinst du das > HIER <?
Korrekt, das ist das Script.
Da es also noch vorhanden ist - @ TE da wäre eine Lösung für den TE auf die gestellte Frage.
...
Alchy
Danke euch für den Link und Danke an BadenPower für dieses Script! ... hatte Tante Google nicht gefunden ... kommt gleich mal zu meiner Leseliste.

Auch wenn ich es "noch" nicht verstehe, bringt es mich doch einen kleinen Schritt weiter.

Angefügt in mein bestehendes Script, sieht es jetzt so aus.

Code: Alles auswählen

string sHeute = system.Date("%d.%m.%Y");
string sRiseDateTime = system.SunriseTime("%H:%M:%S");

integer iHeute = system.Date("%F %X").ToTime().ToInteger();
integer iTage = 7;
integer iDatum = iHeute + (iTage *86400);
string sDatum = iDatum.ToTime().Format("%F");

string lCalRepeatTime = sDatum#" "#"00:05:00";
integer lSunOffsetType = sotAfterSunrise; 
object lProgram;
object lTimer;
object lPrgRule;
object lPrgCondition;
object lPrgSingleCondition;
string lTimerNext;
lProgram = dom.CreateObject(OT_PROGRAM);
if(lProgram)
{
  lTimer = dom.CreateObject(OT_CALENDARDP);
  if(lTimer)
  {
    lProgram.Name("XAUTOCREATE");
    lPrgRule = lProgram.Rule();
    lPrgRule.RuleOperatorType(OPERATOR_OR);    
    lPrgCondition = lPrgRule.RuleAddCondition();
    lPrgCondition.CndOperatorType(OPERATOR_OR);    
    lPrgSingleCondition = lPrgCondition.CndAddSingle();
    lPrgSingleCondition.OperatorType(OPERATOR_AND);
    lPrgSingleCondition.ConditionType(3);
    lPrgSingleCondition.ConditionType2(15); !13 auslösen auf Aktuallisierung  15 nur prüfen
    lPrgSingleCondition.LeftValType(ivtCurrentDate);
    lPrgSingleCondition.RightVal1ValType(ivtObjectId);
    dom.GetObject(ID_CALENDARDPS).Add(lTimer);
    lTimer.TimerType(ttCalOnce);
    lTimer.CalRepeatTime(lCalRepeatTime);    
    lTimer.SunOffsetType(lSunOffsetType);
    lPrgSingleCondition.RightVal1(lTimer.ID());    
    lProgram.Active(true);        
    lTimerNext = lTimer.Next().Format("%H:%M");    
  }
  dom.DeleteObject(lProgram.ID());
}

WriteLine("Heute: " #sHeute);
WriteLine("Sonnenaufgang heute: "#sRiseDateTime);
WriteLine("Datum für Sonnenaufgang: "#sDatum);
WriteLine("Ermittelte Zeit: " # lTimerNext);
WriteLine("---Ende---");

Heute: 14.08.2018
Sonnenaufgang heute: 06:17:00
Datum für Sonnenaufgang: 2018-08-21
Ermittelte Zeit: 06:29
---Ende---
Vielen Dank an alle Beteiligten ... besonders an Alchy :D

Gruß Dirk
RPi3: RaspberryMatic 3.47.22.20191026 (HmIP & HM)
CUxD 2.3.4
RedMatic 5.2.0
Programmedrucken 1.2a
Pocket Control HM V10.5.1 Abo

alchy
Beiträge: 10754
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 673 Mal

Re: (gelöst) Sonnenaufgang mit variablem Datum errechnen

Beitrag von alchy » 14.08.2018, 19:47

MacDad hat geschrieben:
14.08.2018, 17:56
Danke euch für den Link und Danke an BadenPower für dieses Script! ... hatte Tante Google nicht gefunden ... kommt gleich mal zu meiner Leseliste.

BadenPower wurde aus dem Forum gekickt und wird dir hier nicht mehr antworten können.
Ich bin mir aber sicher, das er dein Dankeschön liest bzw. gelesen hat und sich darüber freut.
Daher hier an der Stelle ein "Bitte, keine Ursache" stellvertretend von mir.
Er hätte noch vieles bieten können.

MacDad hat geschrieben:
14.08.2018, 17:56
Auch wenn ich es "noch" nicht verstehe, bringt es mich doch einen kleinen Schritt weiter.
Da Script macht das, was ich in meinem Beitrag beschrieben habe, um das zu erreichen, was du wolltest.
Ich hatte schon den Eindruck, das du es verstehen wolltest, daher habe ich mir die Mühe gemacht es zu um- bzw. beschreiben.
Wo ist dein Verständnisprobem?

MacDad hat geschrieben:
14.08.2018, 17:56
Angefügt in mein bestehendes Script, sieht es jetzt so aus.
Sollte ja so funktionieren.
Wenn du noch die Scriptdoku in Sachen Datum liest und dir andere Scripte diesbezüglich anschaust,
wirst du vielleicht noch Optimierungen für deinen Anfang finden.
Aber es sollte so funktionieren.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Antworten

Zurück zu „HomeMatic allgemein“