Seite 1 von 2
Ich bin ja ziemlich umtriebig
Verfasst: 17. Feb 2020 15:18
von SRX
Da ich voll auf den Geschmack gekommen bin zum Thema Automatisierung wollte ich ein Regelwerk bauen um zum Sonnenuntergang oder einer eingestellten Zeit in einer Gruppe zusammen gefassten Rolladen schließen
Jetzt bekomme ich nur die Minute und Stunde´von astro_Sonnenuntergang nicht extrahiert
Diese beiden Varianten habe ich schon probiert
var sollMinute = (astro_Sonnenuntergang.state as DateTimeType).getMinuteOfHour()
var sollMinute = astro_Sonnenuntergang.getMinuteOfHour()
now.getMinuteOfHour() funktioniert, also vermute ich das ich hier auf dem verkehrten Weg bin wie ich astro_Sonnenuntergang in ein Datum verwandle
Kann mir jemand hier auch helfen?
Gruß Uwe
Re: Ich bin ja ziemlich umtriebig
Verfasst: 17. Feb 2020 15:25
von seppy
Hi,
warum so kompliziert? Schau mal in diesem Beitrag
viewtopic.php?p=15796#p15796, da dreht es sich um das Sonnenaufgang/-untergangsthema mit Beispielcode.
Grüße,
Seppy
Re: Ich bin ja ziemlich umtriebig
Verfasst: 17. Feb 2020 15:39
von PeterA
Das Astrobinding liefert schon "fertige" items welche bei sonnen auf/untergang triggern.
Damit kannst Du dann arbeiten.
Und im Binding kann man auch offsets einstellen.
Alles ohne Rule
Re: Ich bin ja ziemlich umtriebig
Verfasst: 17. Feb 2020 19:41
von SRX
So, ich habe mir eure Ratschläge zu Herzen genommen und das ganze etwas umgebaut
Die Items
Code: Alles auswählen
// Konfiguration Sunset
Switch Sunsetautomatik "Sunset-Automatik an/aus"
Number Sunsetautomatik_zielwert "Schließen auf [%d Prozent]"
Number Sunsetautomatik_Hour "Spätestens um Stunde [%d Uhr]"
Number Sunsetautomatik_Minute "Spätestens um Minute [%d min]"
Sitemap Auszug
Code: Alles auswählen
Frame label="Sonnenuntergang" icon="attic" {
Text label="Konfiguration Sonnenuntergang" icon="rollershutter" {
Frame label="Aktivieren der Automatik Sonnenuntergang" {
Switch item=Sunsetautomatik
}
Frame label="Rollo spätestens runterfahren um ... "{
Setpoint item=Sunsetautomatik_Hour minValue=0 maxValue=23 step=1
Setpoint item=Sunsetautomatik_Minute minValue=0 maxValue=59 step=1
Setpoint item=astro_Sonnenuntergang
}
}
}
Die Rules
IsNight.rules
Code: Alles auswählen
rule "Tag"
when
Channel "astro:sun:home:rise#event" triggered START
then
IsNight.postUpdate(OFF)
end
rule "Nacht"
when
Channel "astro:sun:home:set#event" triggered START
then
IsNight.postUpdate(ON)
end
Sunsetautomatik.rules
Code: Alles auswählen
import org.joda.time.*
var boolean log = false
rule "Sonnenuntergang Zeit"
when
Time cron "0 * 16-21 * * ?" // every minute
then
val String logPrefix = 'Sunsetautomatik - '
if (log) logInfo('rules', logPrefix + 'Ich arbeite: ' + now.getHourOfDay() + ':' + now.getMinuteOfHour())
if (Sunsetautomatik.state == ON) {
// logInfo('rules', logPrefix + 'Setze Variablen für Uhrzeit')
// var sollStunde = astro_Sonnenuntergang.getHourOfDay()
// var sollMinute = (astro_Sonnenuntergang.state as DateTimeType).getMinuteOfHour()
// var sollMinute = astro_Sonnenuntergang.getMinuteOfHour()
if (log) logInfo('rules', logPrefix + 'Prüfe die Uhrzeit für eine Aktion. Nachtstatus: ' + IsNight.state)
// Erst prüfen ob die eingestellte Zeit erreicht wurde
// Die manuelle Uhrzeit nur in der Sommerzeit ausführen
// if (astro_jahreszeit=='SOMMER'){
if (Sunsetautomatik_Minute == now.getMinuteOfHour() && Sunsetautomatik_Hour == now.getHourOfDay()) {
if (log) logInfo('rules', logPrefix + 'Fahre Rolladen nach Uhrzeit herunter')
if (log) logInfo('rules', logPrefix + 'Zeitvergleich: Vorgabe: ' + Sunsetautomatik_Hour + ':' + Sunsetautomatik_Minute + ' Aktuelle Zeit: ' + now.getHourOfDay() + ':' + now.getMinuteOfHour())
GF_Sunset_Rollo.sendCommand(100)
IsNight.postUpdate(OFF)
}
else (IsNight.state == ON) {
if (log) logInfo('rules', logPrefix + 'Fahre Rolladen zum Sonnenuntergang herunter')
if (log) logInfo('rules', logPrefix + 'Nachtstatus: ' + IsNight.state)
if (log) logInfo('rules', logPrefix + 'Rolladenposition: ' + F2_MasterBedroom_Shutter.state)
GF_Sunset_Rollo.sendCommand(100)
IsNight.postUpdate(OFF)
}
}
end
Leider ist die Zeit zu spät geworden um zu testen ob die Rolladen runterfahren.
Aber die Logeinträge stimmen (Log war true) und IsNight wird auf OFF gestellt.
Damit will ich verhindern dass das sendcommand jede Minute feuert
Ich werde euch morgen auf dem laufenden halten
Danke erst einmal für euern Input
Gruß Uwe
Re: Ich bin ja ziemlich umtriebig
Verfasst: 17. Feb 2020 20:29
von udo1toni
Das ist aber ganz schön von hinten durch die Brust ins Auge...
Warum führst Du eine Rule minütlich aus, die dann doch nur bei einer bestimmten Uhrzeit die Läden fahren soll? Du kannst im Astro Binding verschiedene Events nutzen, von Sonnenauf/untergang über bürgerliche und nautische bis zur astronomischen Dämmerung (entsprechend 0°, -6°, -12° und -18° Sonnenwinkel über Horizont). Für jeden dieser Trigger kannst Du Grenzwerte setzen, also frühestens um x:xx Uhr, spätestens um x:xx Uhr, außerdem kannst Du auch noch einen Offset definieren, also z.B. "12 Minuten vor Sonnenaufgang" oder "17 Minuten nach bürgerlicher Dämmerung".
Dann reicht eine Rule zum Schließen und eine Rule zum Öffnen der Läden.
Wahlweise kann man noch Einschränkungen einbauen, ich habe z.B. eine Wochenendeinschränkung, d.h. die Läden fahren am Wochenende (und an Feiertagen/ während der Ferien) nicht über die frühen Rules. Eine weitere Rule, die um 8:30 triggert fährt die Läden dann auf jeden Fall auf.
Abgesehen davon, auch wenn es verschiedene Codebeispiele mit dem Konstrukt
gibt, so möchte ich darauf hinweisen, dass das am System vorbei programmiert ist. Ich habe das erschöpfend in diesem Post dargelegt
viewtopic.php?f=8&t=2193&p=10456&hilit=log%3Aset#p10456
Cyrelian hat an anderer Stelle ausführlich gepostet, wie man es richtig macht

Re: Ich bin ja ziemlich umtriebig
Verfasst: 17. Feb 2020 21:49
von SRX
Nun ja, mit den loginfo gebe ich Dir Recht. Allerdings hatte ich das aus einer anderen Regel abgeschaut. Nobody is perfect
Allerdings ist es bei dieser Regel nicht so das sie letztendlich nur zu einer bestimmten Uhrzeit ausgeführt wird.
Die Vorgabe ist:
Fahre die Rolladen herunter wenn Sonnenuntergang ist.
Ausnahme: Wenn die eingestellte Zeit vor Sonnenuntergang ist, dann nimm diese Zeit
Ich habe die Zeiteingabe mittlerweile auf 5 Minuntenschritte eingestellt und die Cronangaben dementsprechend angepasst.
Er läuft damit nur zwischen 16:00 und 21:00 alle 5 Minuten.
Die ganzen Logeinträge waren eher für mich gedacht um zu sehen was geht und nicht.
Dieses verschwindet eh wieder.
Ich werde mir den link separat später einmal genauer ansehen
Re: Ich bin ja ziemlich umtriebig
Verfasst: 18. Feb 2020 09:24
von seppy
Hi,
schau Dir mal diesen Abschnitt der Astro Binding Doku an
https://www.openhab.org/addons/bindings ... nel-config.
Ich lasse mal schnell den relevanten Teil übersetzen:
Kanal-Konfiguration
Offsets: Für jede Ereignisgruppe können Sie optional einen Offset in Minuten konfigurieren. Der Offset muss in den Kanaleigenschaften für die entsprechende Sache konfiguriert werden.
Der minimal zulässige Offset ist -1440 und der maximal zulässige Offset ist 1440.
Früheste/späteste: Für jeden Trigger-Kanal und für jeden Start- und Enddatum-Zeitwert können Sie optional die früheste und späteste Zeit des Tages konfigurieren.
z.B. Sonnenuntergang frühestens=18:00, spätestens=20:00
Sonnenuntergang ist 17:40, aber der früheste ist auf 18:00 gesetzt, so dass der Ereignis/Datums-Zeitwert auf 18:00 verschoben wird.
ODER
Der Sonnenuntergang ist 22:10 Uhr, aber der späteste Zeitpunkt ist auf 20:00 Uhr festgelegt, so dass der Ereignis-/Datumswert um 20:00 Uhr verschoben wird.
Damit lässt sich Dein Problem ohne permanente Crons elegant lösen.
Grüße,
Seppy
Re: Ich bin ja ziemlich umtriebig
Verfasst: 18. Feb 2020 14:18
von udo1toni
Was tatsächlich nicht geht, ist, die Zeiten über die normale UI einzustellen. Wenn man das partout haben möchte, muss man das Thing über Paper UI definieren und dort die Zeiten einstellen, oder alternativ mit hohem Aufwand ein Script erstellen, welches das per Paper UI angelegte Thing mittels REST API manipuliert.
Allerdings muss ich aus meiner Erfahrung heraus sagen, dass ich diese Zeiten bisher nicht anfassen musste (nachdem ich einmal die für uns richtigen Zeiten gefunden hatte). Es ist auch kein Parameter, den jeder Anwender (im Haus, also nicht der openHAB Admin, sondern der openHAB DAU) verstellen können sollte, dazu muss man schon verstanden haben, wie der Parameter wirkt.
Re: Ich bin ja ziemlich umtriebig
Verfasst: 18. Feb 2020 14:19
von SRX
Ich bin immer wieder fasziniert was es alles gibt in OpenHab.
Da ich noch Neuling bin versuche ich aus den Beispielen welche ich finde meine Ideen umzusetzen.
Dank Deines Beitrags, Seppy, habe ich die Regel umgebaut
Das Logging habe ich komplett rausgelassen. Das kann ich später immer noch wieder einbauen
Hier nun die Regel: Earlist habe ich auf 16:00 und latest auf 21:00 gesetzt
Code: Alles auswählen
rule "sunsetautomatik"
when
Channel "astro:sun:local:set#end" triggered START
then
if (Sunsetautomatik.state == ON) {
GF_Sunset_Rollo.sendCommand(100)
}
end
Nachtrag:
Leider kann ich bei dem Beitrag von Seppy kein "Gefällt mir" drücken
Re: Ich bin ja ziemlich umtriebig
Verfasst: 23. Feb 2020 14:38
von SRX
Ich muss noch einmal eure Hilfe in Anspruch nehmen. Evtl. verstehe ich da was nicht
Ich habe bei Sonnenaufgang ein earlist= 08:00 eingetragen.
In PaperUI zeigt er mir auch korrekt 08:00 an
Nur, der Trigger feuerte heute um 07:35
Hier die Regel, muss ich den Channel anders ansprechen?
Code: Alles auswählen
rule "sunriseautomatik"
when
Channel "astro:sun:local:rise#event" triggered START
then
if (Sunsetautomatik.state == ON) {
//Sonnenaufgang Automatik Schlafzimmer
GF_Sunset_Rollo.sendCommand(0)
Sunriseautomatik_last.postUpdate(now.toString())
//Sonnenaufgang Automatik Esszimmer
if (Sunriseautomatik_Dinningroom.state ==ON) {
GF_Dining_Shutter_Right.sendCommand(11)
GF_Dining_Shutter_Left.sendCommand(6)
}
}
end