Seite 2 von 4
Re: Rollläden über Datum steuern
Verfasst: 5. Aug 2020 20:11
von scotty
udo1toni hat geschrieben: ↑5. Aug 2020 19:55
... Man kann übrigens nicht nur einen Offset (positiv oder negativ) setzen, man kann auch frühestmögliche und spätestmögliche Ausführung setzen.
Weiterhin gibt es pro Richtung 4 verschiedene Events, nämlch Sonnenauf/-untergang (0°), Bürgerliche (-6°), Nautische (-12°) und Astronomische (-18°) Dämmerung.
Allgemein gibt es bei großen Offsets meist einen anderen Trigger, der viel näher am eigentlich gewünschten Zeitpunkt liegt.
Die Dämmerungsphasen sind ja auch für die Astrofotografie nicht unwichtig. Ich wüsste allerdings nicht, wie ich sie jetzt für meinen Zweck verwenden sollte.
Aber Danke bis hier hin noch einmal, damit kann ich schon etwas anfangen.
Re: Rollläden über Datum steuern
Verfasst: 5. Aug 2020 20:37
von udo1toni
Na, meine Rollläden lasse ich z.B. nach der bürgerlichen Dämmerung fahren, mit einem relativ kleinen Offset von 15 bzw. 10 Minuten (Untergang/Aufgang). Ich wüsste nicht, warum ich da auf Sonnenauf/-untergang mit 50 Minuten Offset gehen sollte, nur darum ging es mir.
Re: Rollläden über Datum steuern
Verfasst: 5. Aug 2020 20:58
von JuergenA
Udo, ich habe gerade mal geschaut, der Auf und Untergang der Sonne ist doch der späteste Zeitpunkt nach der Dämmerung. Zumindest zeigt er mir das in den berechneten Variablen an. Oder übersehe ich gerade etwas?
Re: Rollläden über Datum steuern
Verfasst: 6. Aug 2020 06:27
von udo1toni
Nein, siehe meinen vorherigen Post. Sonne auf/Untergang ist bei Höhenwinkel 0°, die verschiedenen Dämmerungsstufen bi -6°, -12° und -18° Höhenwinkel (der Sonne). Die astronomische Dämmerung ist dann, wenn bei klarem Himmel alle Sterne sichtbar sind, Sonnenuntergang ist, wenn die Sonne den Horizont berührt und verschwindet.
Wenn die angezeigten Zeiten das anders widerspiegeln, hast Du entweder Offsets / früheste / späteste Ausführung gesetzt oder sonst einen kuriosen Fehler herbeigeführt.
Gesendet von iPad mit Tapatalk
Re: Rollläden über Datum steuern
Verfasst: 2. Sep 2020 23:08
von scotty
Mit freundlicher und intensiver Unterstützung des Users JuergenA konnte ich inzwischen eine Regel installieren, nach der sich zum Beginn eines jeden Monats die Uhrzeit des Runterfahrens meiner Rollläden ändert. Zur Ermittlung des aktuellen Monats ist die zweite Regel "Monatsberechnung" erforderlich.
Seit etwa 5 Wochen teste ich diese Variante und habe festgestellt, dass es zwischendurch doch noch nötig wird, die Werte zu korrigieren. Trotzdem möchte ich den Code jetzt veröffentlichen damit ihn einerseits interessierte User übernehmen können bzw. andererseits u. U. zusätzliche Ideen zur Optimierung einfließen.
Code: Alles auswählen
rule "Monatsberechnung"
when
Time cron "0 0 0 1 * ? *" or
System started
then
val currMonth = now.getMonthOfYear
Month.postUpdate(currMonth.toString)
end
//------------------------------------------------------------------------
// Rollladen Aufwärts, jeden Tag ausser Donnerstag
//------------------------------------------------------------------------
rule "Aufwärts ohne Do"
when
Time cron "0 15 9 ? * SUN,MON,TUE,WED,FRI,SAT *"
then
logInfo("Aufwärts ohne Do", "Rollladen fahren hoch!")
gAlleShutters.sendCommand(0)
end
//------------------------------------------------------------------------
// Rollladen Aufwärts, nur Donnerstag
//------------------------------------------------------------------------
rule "Aufwärts nur Do"
when
Time cron "0 0 8 ? * THU *"
then
logInfo("Aufwärts nur Do", "Rollladen fahren hoch")
gAlleShutters.sendCommand(0)
end
//------------------------------------------------------------------------
// Rollladen Abwärts, jeden Tag
//------------------------------------------------------------------------
rule "Rollladen runter"
when
Time cron "0 30 17 ? * SUN,MON,TUE,WED,THU,FRI,SAT *"
then
if (Month.state == 1 || Month.state == 12)
{
logInfo("Abwärts", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
}
else if (Month.state == 2)
{
createTimer(now.plusMinutes(20))
[|
logInfo("Abwärts", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
]
}
else if (Month.state == 3 || Month.state == 10)
{
createTimer(now.plusMinutes(107))
[|
logInfo("Abwärts", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
]
}
else if (Month.state == 4)
{
createTimer(now.plusMinutes(180))
[|
logInfo("Abwärts", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
]
}
else if (Month.state == 5 || Month.state == 8)
{
createTimer(now.plusMinutes(220))
[|
logInfo("Abwärts", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
]
}
else if (Month.state == 6)
{
createTimer(now.plusMinutes(260))
[|
logInfo("Abwärts", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
]
}
else if (Month.state == 7)
{
createTimer(now.plusMinutes(250))
[|
logInfo("Abwärts", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
]
}
else if (Month.state == 9)
{
createTimer(now.plusMinutes(185))
[|
logInfo("Abwärts", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
]
}
else if (Month.state == 11)
{
createTimer(now.plusMinutes(30))
[|
logInfo("Abwärts", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
]
}
end
Re: [gelöst]Rollläden über Datum steuern
Verfasst: 3. Sep 2020 01:08
von udo1toni
Also, Deine Mühen in allen Ehren, aber die Rule "Monatsberechnung" berauchst Du allenfalls, wenn Du den Monat in der UI anzeigen willst (und das geht über ein DateTime Item wesentlich einfacher).
Deine Time cron Ausdrücke sind ebenfalls etwas gewöhnungsbedürftig.
Und was die Log Meldungen betrifft, möchte ich auhc hier darauf hinweisen, dass der erste zu übergebende String ein Teil des Loggernamens ist.
Dein Code ist außerdem extrem aufgeblasen. Natürlich könnte es sein, dass Du monatlich andere Schließhöhen haben willst, aber selbst das wäre einfacher zu erreichen. Deshalb hier die gleiche Funktion:
Code: Alles auswählen
//------------------------------------------------------------------------
// Rollladen Aufwärts, jeden Tag (Donnerstag andere Zeit)
//------------------------------------------------------------------------
rule "Aufwärts"
when
Time cron "0 15 9 ? * MON-WED,FRI-SUN" or
Time cron "0 0 8 ? * THU"
then
logInfo("shutters", "Rollläden fahren hoch!")
gAlleShutters.sendCommand(0)
end
//------------------------------------------------------------------------
// Rollladen Abwärts, jeden Tag
//------------------------------------------------------------------------
rule "Rollladen runter"
when
Time cron "0 30 17 ? * *"
then
var Integer iOffset = 0
switch(now.getMonthOfYear) {
case 2: iOffset = 20
case 3: iOffset = 107
case 4: iOffset = 180
case 5: iOffset = 220
case 6: iOffset = 260
case 7: iOffset = 250
case 8: iOffset = 220
case 9: iOffset = 185
case 10: iOffset = 107
case 11: iOffset = 30
}
createTimer(now.plusMinutes(iOffset), [|
logInfo("shutter", "Rollladen fahren runter!")
gAlleShutters.sendCommand(100)
])
end
Bis auf die fehlende Unterscheidung der Loggermeldung zwischen Donnerstag und nicht Donnerstag sollten die Rules das gleiche bewirken.
Re: [gelöst]Rollläden über Datum steuern
Verfasst: 3. Sep 2020 03:07
von scotty
Wow, ich bin erstaunt und begeistert zugleich, wie professionell du die rule optimiert hast. Vielleicht gelingt mir das ja auch irgend wann mal so. Getestet habe ich noch nicht, aber gleich noch 2 Fragen dazu:
1.) Ich vermisse die Monate 1 und 12, muss da noch etwas ergänzt werden?
2.) wenn iOffset zwischendurch mal korrigiert werden muss (etwa zur Monatsmitte), greife ich momentan immer händisch ein und ändere die rule. Hast du vielleicht eine Idee wie man das intelligenter lösen könnte?
Re: [gelöst]Rollläden über Datum steuern
Verfasst: 3. Sep 2020 11:22
von udo1toni
Zu 1: Ich definiere iOffset als Integer mit dem Wert 0. Da für Januar und Dezember kein Offset angegeben ist, passt der Wert 0. Natürlich kannst Du auch zwei case Anweisungen für diese beiden Fälle definieren. Der Timer kann auch direkt ausgeführt werden (also now.plusMinutes(0)), das spielt keine Rolle.
Zu 2: Das ist eben das Problem, wenn man den Offset von einem Wert abhängig macht, der dafür eigentlich nicht geeignet ist.

Die einfachste Wariante wäre, statt getMonthOfYear getDayOfYear zu verwenden. Du kannst dafür ebenfalls switch - case verwenden, allerdings in anderer Form:
Code: Alles auswählen
val Integer iDOY = now.getDayOfYear
switch (true) {
case iDOY > 0 && iDOY < 16: iOffset = 0 // von 1. bis 15. Januar
case iDOY > 15 && iDOY < 35: iOffset = 20 // von 16. Januar bis 3. Februar
...
}
Du musst also jeweils Unter- und Obergrenze setzen.
Aber wie oben schon erwähnt, wäre es das Einfachste, die in Astro integrierten Funktionen zu nutzen. Egal, welchen Trigger man nutzt, ob nun Sonnen-/auf/unter/-gang (0° Sonnenhöhe), Bürgerliche Dämmerung (-6°), Nautische Dämmerung (-12°) oder gar Astronomische Dämmerung (-18°), das Astro Addon steuert die Läden jederzeit bei einer ähnlichen Helligkeit. Zusätzlich lassen sich Ober- und Untergrenzen sowie ein Offset zum errechneten Zeitpunkt setzen, also z.B. 12 Minuten vor der Bürgerlichen Dämmerung oder 17 Minuten nach Sonnenuntergang.
Re: [gelöst]Rollläden über Datum steuern
Verfasst: 3. Sep 2020 13:40
von scotty
Vielen Dank für deine Antwort. So ganz habe ich deinen letzten Code allerdings noch nicht verstanden. Wie geht es denn dort, wo Du die "..." gesetzt hast, weiter? Ich würde gerne diesen Code mal testen und falls dann noch erhebliche Differenzen zum Tageslicht auftreten, kann ich mich immer noch der Astro-Variante anschließen. Wahrscheinlich bräuchte ich in dem Fall dann aber auch noch einmal Hilfe.
Ich habe aber auch noch eine andere Idee im Kopf, die ich wenigstens einmal ansprechen möchte. Wie wäre es, wenn für das Forum neben den bekannten Gruppierungen eine weitere Sparte "Beispiele" eingerichtet würde? Hier könnten dann unter einer aussagekräftigen Überschrift fertige Beispiele wie dieses abgelegt werden. Wobei ich offen lassen möchte, ob im Anschluss der Themen noch diskutiert werden soll. Im englischen Forum, meine ich, ist es ähnlich aufgebaut.
Edit: Um die Sparte "Beispiele" übersichtlich zu gestalten, könnten auftretende Diskussionen über eine Link im "Hauptthema" geführt werden.
Re: [gelöst]Rollläden über Datum steuern
Verfasst: 3. Sep 2020 14:14
von udo1toni
Die ... stehen stellvertretend für alle weiteren Wertezuordnungen, die Zeilen sind bis auf die jeweiligen Werte identisch zu den zwei vorhergehenden Zeilen.