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

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

Moderator: Co-Administratoren

Benutzeravatar
G-Punkt
Beiträge: 8
Registriert: 04.12.2018, 06:54
Wohnort: Münsterland

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

Beitrag von G-Punkt » 06.02.2019, 09:29

Hallo zusammen!
Mein erstes Posting hier und gleich eine Hilfestellung von Anfänger zu (warscheinlich) ebenfalls Anfänger: :lol:
Ralle14 hat geschrieben:
05.02.2019, 23:29
...Ich habe aber alle Variablen angelegt.
Die Variable !Minuten_vor_S ist doch nicht vorgesehen....
Nein, natürlich nicht! "!Minuten_vor_S" ist nur das Ende der Fehlermeldung, die sich aus den ersten Zeilen des Sriptes ergibt!

Anhand Deiner Fragestellung befürchte ich, daß Du die HM-Scriptsprache nicht verstehst und nicht nachvollziehen kannst, was das Script macht!

Gehe nochmal sämtliche Schritte der Installationsanweisung (Seite 1 dieses Threads) durch und kopiere das Script '1zu1'. Tritt danach immer noch ein Fehler auf, mußt Du wohl an anderer Stelle suchen!
Gruß
Guido

majacom
Beiträge: 9
Registriert: 13.06.2018, 16:22

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

Beitrag von majacom » 06.02.2019, 17:46

majacom hat geschrieben:
04.02.2019, 16:20
Hallo,

ich bin Neu hier und lese seit einiger Zeit mit und habe sehr viel gelernt in dem Forum.
Nun hätte ich auch eine Frage bezgl. eines Scriptes. Vielleicht kann mir hier auch Jemand behilflich sein.

Ich setzte das Astro/Zeit-Skript von hier erfolgreich ein.

Ich würde jetzt noch gerne zwei weitere Variablen mit dem Script setzen lassen und zwar, dass mir zwei Uhrzeiten zusätzlich angezeigt werden.

Ausgabe Variable "Uhrzeit_Aquariumlicht_Sonnenaufgang" (reale Einschaltzeit in HH.MM)

Uhrzeit von 30 Minuten vor SA, aber nicht früher als 6:30 soll berücksichtigt werden

Ausgabe Variable "Uhrzeit:Aquariumlicht_Sonnenuntergang" (reale Ausschaltzeit in HH.MM)

Uhrzeit von 180 Minuten nach SU, aber nicht später als 22:00 soll berücksichtigt werden

Wie ich dies als Wenn-Bedingung im Programmablauf zum Ein/Ausschalten der Beleuchtung realisiere weiß ich, jedoch nicht wie das Script zur Uhrzeitausgabe in einer Variable aussehen soll bei den jeweiligen Bedingungen.

Hat Jemand einen Vorschlag?

Viele Grüße
Markus

Kann mir Jemand behilflich sein?

majacom
Beiträge: 9
Registriert: 13.06.2018, 16:22

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

Beitrag von majacom » 06.02.2019, 23:14

Code: Alles auswählen

real SA1 = (1.0*system.SunriseTime("%H").ToInteger()) + 0.01*system.SunriseTime("%M").ToInteger();
real SA2 = (SA1 - 0.25);
if (SA2 < 6.00) { dom.GetObject("Aquariumlicht an um").State(6.00)}
if (SA2 > 6.00) { dom.GetObject("Aquariumlicht an um").State(SA2)};

real SU1 = (1.0*system.SunsetTime("%H").ToInteger()) + 0.01*system.SunsetTime("%M").ToInteger();
real SU2 = (SU1 + 3.00);
if (SU2 > 21.45) { dom.GetObject("Aquariumlicht aus um").State(21.45)}
if (SU2 < 21.45) { dom.GetObject("Aquariumlicht aus um").State(SU2)}
if (SU2 < 19.30) { dom.GetObject("Aquariumlicht aus um").State(19.30)}
Habe es mal alleine versucht. Es funktioniert soweit!
Wenn Jemand Verbesserungsvorschläge hat, dann bitte schreiben.

Benutzeravatar
G-Punkt
Beiträge: 8
Registriert: 04.12.2018, 06:54
Wohnort: Münsterland

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

Beitrag von G-Punkt » 07.02.2019, 08:27

Mit dem Einsatz von '...else...' gewinnst Du ein ganz klein wenig Rechenzeit! :wink:

Code: Alles auswählen

real SA1 = (1.0*system.SunriseTime("%H").ToInteger()) + 0.01*system.SunriseTime("%M").ToInteger();
real SA2 = (SA1 - 0.25);
if (SA2 < 6.00) { dom.GetObject("Aquariumlicht an um").State(6.00)}
else { dom.GetObject("Aquariumlicht an um").State(SA2)};

real SU1 = (1.0*system.SunsetTime("%H").ToInteger()) + 0.01*system.SunsetTime("%M").ToInteger();
real SU2 = (SU1 + 3.00);
if (SU2 < 19.30) { dom.GetObject("Aquariumlicht aus um").State(19.30)}
elseif (SU2 < 21.45) { dom.GetObject("Aquariumlicht aus um").State(SU2)}
else { dom.GetObject("Aquariumlicht aus um").State(21.45)}
Ich habe mir dieses Astro-Script nicht angeschaut. Da Du die Variablen aber hier deklarierst, scheinen sie nicht Bestandteil des Astro-Scriptes zu sein. Insofern könntest Du auch noch 3 Scriptvariablen einsparen:

Code: Alles auswählen

real rVariable = ((1.0*system.SunriseTime("%H").ToInteger()) + 0.01*system.SunriseTime("%M").ToInteger()) - 0.25;
if (rVariable < 6.00) { dom.GetObject("Aquariumlicht an um").State(6.00)}
else { dom.GetObject("Aquariumlicht an um").State(rVariable)};

rVariable = ((1.0*system.SunsetTime("%H").ToInteger()) + 0.01*system.SunsetTime("%M").ToInteger()) + 3.00;
if (rVariable < 19.30) { dom.GetObject("Aquariumlicht aus um").State(19.30)}
elseif (rVariable < 21.45) { dom.GetObject("Aquariumlicht aus um").State(rVariable)}
else { dom.GetObject("Aquariumlicht aus um").State(21.45)}
Und wenn Du jetzt noch die Stunden der Sonnenauf- und untergangszeiten nicht erst in Ganzzahlen umwandelst und diese dann mit 1.00 multiplizierst, sondern gleich in eine Gleitzahl umwandelst, sparst Du wieder etwas winzige Rechenzeit und das Ganze wird logischer.

Wenn's mein Code wäre, sähe der so aus:

Code: Alles auswählen

real rVariable = (system.SunriseTime("%H").ToFloat() + (0.01*system.SunriseTime("%M").ToInteger())) - 0.25;
if (rVariable < 6.00) {
	dom.GetObject("Aquariumlicht an um").State(6.00);
}
else {
	dom.GetObject("Aquariumlicht an um").State(rVariable);
}

rVariable = (system.SunsetTime("%H").ToFloat() + (0.01*system.SunsetTime("%M").ToInteger())) + 3.00;
if (rVariable < 19.30) {
	dom.GetObject("Aquariumlicht aus um").State(19.30);
}
elseif (rVariable < 21.45) {
	dom.GetObject("Aquariumlicht aus um").State(rVariable);
}
else {
	dom.GetObject("Aquariumlicht aus um").State(21.45);
}
Ich benutze bei Namensgebungen von Geräten, Script- und Systemvariablen, Programmnamen etc. übrigens keine Leerzeichen. Ob Leerzeichen an irgendeiner Stelle innerhalb HM-Systems zu Problemen führen können, weiß ich nicht.
Ich habe es noch nie gemacht bei meinen Programmierprojekten, also auch hier bei HM nicht....
Gruß
Guido

majacom
Beiträge: 9
Registriert: 13.06.2018, 16:22

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

Beitrag von majacom » 07.02.2019, 18:32

Prima vielen Dank, werde ich gleich nachher mal ausprobieren

Markus

majacom
Beiträge: 9
Registriert: 13.06.2018, 16:22

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

Beitrag von majacom » 12.02.2019, 13:26

Hallo,
ich nochmal!

Die Ausgabe der Variable "Aquariumlicht an um" ist in meinem Fall "7.180000"
Ich möchte jetzt um diese Uhrzeit ein Programm ausführen lassen.
Ich denke, dass das nur mit einem CuxD Timer zu realisieren ist. Der benötigt aber meines Wissens das Format "HH:MM:SS".

Wie kann ich aus der Variablenausgabe "7.180000" das Fornat auf "07:18:00" ändern, damit ich die Zeit an den CuxdTimer übermitteln kann?
Oder gibt es eine andere Möglichkeit, ein Programm mit diesen Werten über den Cuxd Timer starten zu lassen?

Anders formuliert: Wie kann ich am Besten ein Programm, um die in der Variable ausgegeben Uhrzeit, ausführen lassen?

Gruß
Markus
Zuletzt geändert von majacom am 12.02.2019, 14:43, insgesamt 1-mal geändert.

Xel66
Beiträge: 4673
Registriert: 08.05.2013, 23:33
Wohnort: Nordwürttemberg

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

Beitrag von Xel66 » 12.02.2019, 14:39

Ist zwar nicht die Antwort auf die Benutzung des Scripts, aber ich schreibe mir auch Sonnenauf- und -untergangszeiten in einen CUxD-Timer und variiere diesen im Nachgang. Ich benutze hierfür dieses Script:

Code: Alles auswählen

! ++++++++++++ Setzen eigener Sonnenstandszeiten ++++++++++
string Sonnunter = system.SunsetTime("%H:%M:%S").ToString();
string Sonnauf = system.SunriseTime("%H:%M:%S").ToString();
dom.GetObject("CUxD.CUX2800002:16.TIMER_SET").State(Sonnunter);
dom.GetObject("CUxD.CUX2800002:15.TIMER_SET").State(Sonnauf);
dom.GetObject("CUxD.CUX2800002:16.TIMER_SET").State("-1800");
dom.GetObject("CUxD.CUX2800002:15.TIMER_SET").State("-2700");
In den ersten beiden Zeilen werden die vom System ermittelten Daten für Sonnenauf- und -untergang ermittelt, dann in jeweils einen Timer geschrieben und im Nachgang um 1800 (aka 30 Minuten) bzw. um 2700 Sekunden (aka 45 Minuten) vorgezogen. Funktioniert bei mir seit Jahren problemlos. Das Script läuft ein Mal täglich kurz nach Mitternacht.

Gruß Xel66
---------------------------------------------------------------------------------
242 Kanäle in 89 Geräten und 125 CUxD-Kanäle in 23 CUxD-Geräten,
210 Programme, 145 Systemvariablen und 119 Direktverknüpfungen,
RaspberryMatic Version 2.31.25.20180225
---------------------------------------------------------------------------------

Antworten

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