[gelöst] Rollläden über Datum oder Astro steuern

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: [gelöst]Rollläden über Datum steuern

Beitrag von scotty »

so, ich habe die Regel jetzt mal nach meinem aktuellen Verständnis neu geschrieben. Wäre schön, wenn Du noch einmal drüber schauen würdest...

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 
val Integer iDOY = now.getDayOfYear
switch (true) {
    case iDOY >   0 && iDOY <  16: iOffset =   0 // von 02. Jan bis 15. Jan
    case iDOY >  15 && iDOY <  35: iOffset =  20 // von 16. Jan bis 03. Feb
    case iDOY >  34 && iDOY <  47: iOffset =  30 // von 04. Feb bis 15. Feb
    case iDOY >  46 && iDOY <  63: iOffset =  30 // von 16. Feb bis 02. Mrz
    case iDOY >  62 && iDOY <  76: iOffset =  75 // von 03. Mrz bis 15. Mrz
    case iDOY >  75 && iDOY <  93: iOffset = 105 // von 16. Mrz bis 01. Apr
    case iDOY >  92 && iDOY < 107: iOffset = 150 // von 02. Apr bis 15. Apr
    case iDOY > 106 && iDOY < 123: iOffset = 180 // von 16. Apr bis 01. Mai
    case iDOY > 122 && iDOY < 137: iOffset = 170 // von 02. Mai bis 15. Mai
    case iDOY > 136 && iDOY < 154: iOffset = 200 // von 16. Mai bis 01. Jun
    case iDOY > 153 && iDOY < 168: iOffset = 220 // von 02. Jun bis 15. Jun
    case iDOY > 167 && iDOY < 184: iOffset = 240 // von 16. Jun bis 01. Jul
    case iDOY > 183 && iDOY < 198: iOffset = 180 // von 02. Jul bis 15. Jul
    case iDOY > 197 && iDOY < 215: iOffset = 200 // von 16. Jul bis 01. Aug
    case iDOY > 214 && iDOY < 229: iOffset = 215 // von 02. Aug bis 15. Aug
    case iDOY > 228 && iDOY < 246: iOffset = 195 // von 16. Aug bis 01. Sep
    case iDOY > 245 && iDOY < 260: iOffset = 185 // von 02. Sep bis 15  Sep
    case iDOY > 259 && iDOY < 276: iOffset = 155 // von 16. Sep bis 01. Okt
    case iDOY > 275 && iDOY < 290: iOffset = 105 // von 02. Okt bis 15. Okt
    case iDOY > 289 && iDOY < 307: iOffset =  75 // von 16. Okt bis 01. Nov
    case iDOY > 306 && iDOY < 321: iOffset =  40 // von 02. Nov bis 15. Nov
    case iDOY > 320 && iDOY < 337: iOffset =  20 // von 16. Nov bis 01. Dez
    case iDOY > 336 && iDOY < 351: iOffset =   0 // von 02. Dez bis 15. Dez
    case iDOY > 350 && iDOY < 367: iOffset =   0 // von 16. Dez bis 01. Jan
    }
        createTimer(now.plusMinutes(iOffset), [|
            logInfo("shutter", "Rollladen fahren runter!")
            gAlleShutters.sendCommand(100)
        ])
end
Der Wert iOffset kann je nach Bedarf geändert werden.

Edit: funktioniert die Rules eigentlich nach einem Neustart noch?
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
udo1toni
Beiträge: 15307
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: [gelöst]Rollläden über Datum steuern

Beitrag von udo1toni »

Ja, die Rule sollte auch nach einem Neustart noch funktionieren.

Ich gehe mal davon aus, dass Du die case-Zeilen mit identischem iOffset (also z.B. die vorletzte und die letzte case-Zeile) nur für den Fall angelegt hast, dass Du hier doch unterschiedliche Werte einsetzen willst.Ansonsten sollte klar sein, dass die jeweiligen Unter- und Obergrenzen beliebig gesetzt werden können, solange die Bereiche sich nicht überlappen. Deshalb ist es natürlich sinnvoll, die case-Anweisungen streng monoton wachsend anzuordnen. Die Untergrenze >0 ist natürlich immer erfüllt, genau wie die Obergrenze < 367, beide können deshalb natürlich auch entfallen. Man könnte sogar beide Bereiche zusammenfassen, in diesem Fall aber mit einem logischen Oder:

Code: Alles auswählen

case iDOY > 350 || iDOY < 15: iOffset =   0 // von 16. Dez bis 14. Jan
In Schaltjahren verschiebt sich das Datum natürlich um einen Tag gegenüber dem im Kommentar angegebenen Datum, aber das betrifft ja nur den Kommentar und spielt für die grundsätzliche Funktion kein Rolle.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: [gelöst]Rollläden über Datum steuern

Beitrag von scotty »

heute abend, also am Donnerstag hat die Rule so allerdings noch nicht funktioniert. Demnach hätten die Shutter um 20:35 runterfahren müssen. Ich hatte allerdings noch einen Neustart durchgeführt (deshalb auch meine Frage, ob sie danach noch funktioniert).
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
udo1toni
Beiträge: 15307
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: [gelöst]Rollläden über Datum steuern

Beitrag von udo1toni »

Die Frage ist natürlich, wann Du den Neustart ausgeführt hast. Die Rule wird ja um 17:30 getriggert, wenn Du danach openHAB neu startest, gehen laufende Timer verloren.

Je nun, ich wiederhole mich... aber mit Astro wäre das nicht passiert...
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: [gelöst]Rollläden über Datum steuern

Beitrag von scotty »

Ja, über Astro habe ich schon mehrfach nachgedacht. Ich würde die Funktion ja auch nur zum Runter fahren benötigen. Meine Befürchtung ist jedoch, dass die Shutter dann zu früh schließen. Außerdem habe ich mit der Programmierung im Moment noch Schwierigkeiten.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
udo1toni
Beiträge: 15307
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: [gelöst]Rollläden über Datum steuern

Beitrag von udo1toni »

Wie gesagt, wann die Läden schließen, kannst Du selbst festlegen.

Ich habe mein Astro Thing per Text angelegt:

Code: Alles auswählen

// Astro
Thing astro:sun:home "Sonne" @ "zuhause" [geolocation="49.9,8.6,130", interval=300] { 
    Channels:
        Type start : nauticDawn#start []
        Type start : nauticDusk#start []
        Type start : civilDawn#start [
            offset=10,
            earliest="06:00",
            latest="08:00"
        ]
        Type start : civilDusk#start [
            offset=15,
            earliest="16:00",
            latest="22:00"
        ]
        Type rangeEvent : civilDawn#event  [
            offset=10,
            earliest="06:00",
            latest="08:00"
        ]
        Type rangeEvent : civilDusk#event  [
            offset=15,
            earliest="16:00",
            latest="22:00"
        ]
}
Die passende Rule dazu:

Code: Alles auswählen

rule "spät"
 when
    Channel 'astro:sun:home:civilDusk#event'	 triggered START
 then
    GS_GFA.allMembers.forEach[ m |                                    // Altbau Erdgeschoss
        if (m.name.contains("5")) 
            m.sendCommand(50)                                         // Schlafzimmertür auf 50%
        else if (m.name.contains("3")) 
            m.sendCommand(90)  	                                      // Wohnzimmerfenster auf 90%
        else m.sendCommand(100)
    ]
    GS_FFA.members.forEach[ m | m.sendCommand(100) ]                  // Altbau Dachgeschoss
    RollGruppe4_Ch1.sendCommand(100)                                  // Eltern
    GS_Bath?.members.forEach(Shutter|Shutter.sendCommand(100))        // Bad
    RollGruppe1_Ch1.sendCommand(100)                                  // Fahrradschuppen
    RollGruppe1_Ch5.sendCommand(100)                                  // Flur
    RollGruppe1_Ch2.sendCommand(75)                                   // Technik Tür
    GS_Kit?.members.forEach(Shutter|Shutter.sendCommand(100))         // Küche
    GS_Liv?.members.forEach(Shutter|Shutter.sendCommand(100))         // Wohnzimmer ohne Tür
    GS_C1?.members.forEach(Shutter|Shutter.sendCommand(100))          // Kind 1
    GS_C2?.members.forEach(Shutter|Shutter.sendCommand(100))          // Kind 2
end
Ich hab die Rule mal komplett gelassen, weil ich hier (vor allem historisch gewachsen) verschiedene Techniken einsetze:
Es gibt verschiedene Gruppen, die angesteuert werden. GS_GFA ist die Gruppe aller Shutter im Erdgeschoss des Altbaus :) Hier sind die Rollläden teilweise nochmals in einer Gruppe zusammengefasst, weil im Wohnzimmer drei Rollläden sind. Zwei der Läden sollen aber nicht komplett geschlossen werden, wegen Lüftung und Orientierungslicht in der Nacht. Deshalb durchlaufe ich die Gruppe aller Member (inklusive Kindeskinder) und steuere die Ausnahmen auf eine andere Höhe.
Die Läden im Dachgeschoss werden alle komplett geschlossen.
Im Neubau steuere ich teilweise Einzelläden, teilweise aber auch Gruppen. Der Name "RollGruppe1_Chx" ist dabei auf das Device bezogen und bezeichnet eineneinzelnen Rollladen ("RollGruppe1_Ch5" z.B. Kanal 5 des Motoraktors 1). Das ist ein Überbleibsel von früher(TM) und ich bin noch nicht dazu gekommen, hier mal die Itemnamen anzupassen :)

Der Punkt ist aber eigentlich der Trigger der Rule. Die Rule triggert auf civilDusk#event. Das Range Event civilDusk#event ist mit einem Offset von 15 Minuten nach Eintreten der Bürgerlichen Dämmerung versehen und tritt frühestens um 16 Uhr, spätestens um 22 Uhr ein (earliest und latest).
Der Channel civilDusk#start ist der dazugehörige TimeDate Cahnnel, über den ich die Schaltzeit in der UI anzeigen lasse.
Die Werte werden alle 300 Sekunden neu berechnet (interval), das ist für die Schaltzeiten unwesentlich, ich greife aber an anderer Stelle auf Azimut und Elevation zu. Die geolocation ist mit Höhe angegeben (das ist aber eher Spielerei) und die Werte habe ich hier nur eingekürzt :) die sind natürlich exakt für meinen Standort angegeben.
Tipp: Du kannst in Paper UI -> Configuration -> System -> Regional Settings -> Location den exakten Standort angeben, dann erzeugt openHAB automatisch local Things für Wetter, Astro, NTP und andere standortabhängige Addons. Die kannst Du dann bequem über Paper UI parametrieren (also z.B. Offsets für Astro eintragen).
Es ist auch kein Problem, eine Rule nur ein Log ausgeben zu lassen, damit Du schauen kannst, wie sehr der tatsächliche Triggerzeitpunkt vom gewünschten Zeitpunkt abweicht.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: [gelöst]Rollläden über Datum steuern

Beitrag von scotty »

Ich bin wieder mal schwer beeindruckt, lieber Udo. Leider habe ich heute verschiedene Termine, so dass ich vermutlich erst spät dazu komme, mich damit auseinander zu setzen.
Das Astro Binding habe ich schon länger installiert. Mein Astro Things wurde danach über Paper UI angelegt. Dieses würde ich jetzt löschen und mit Visual Studo Code nach Deiner Vorlage neu anlegen. Danach von dem Programm das Item erstellen lassen.
Was Deinen Tipp angeht glaube ich, den exakten Standort dort schon erfasst zu haben. Ich brauche ihn z. B. schon für Wetter und meine Tankstellenkarte.
Übrigens, sehe ich das richtig? Du lässt innerhalb einer Gruppe die Shutter unterschiedlich schließen?

Ich melde mich dazu wieder!
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: [gelöst]Rollläden über Datum steuern

Beitrag von scotty »

So, meine erste Test-Konfiguration ist fertig. Bin mal gespannt, ob es funktioniert

Things:

Code: Alles auswählen

// Astro
Thing astro:sun:home "Sonne" @ "zuhause" [geolocation="x.1234567,x.12345", interval=300] { 
    Channels:
        Type start : nauticDawn#start []
        Type start : nauticDusk#start []
        Type start : civilDawn#start [
            offset=10,
            earliest="07:00",
            latest="09:00"
        ]
        Type start : civilDusk#start [
            offset=15,
            earliest="17:00",
            latest="22:00"
        ]
        Type rangeEvent : civilDawn#event  [
            offset=10,
            earliest="07:00",
            latest="09:00"
        ]
        Type rangeEvent : civilDusk#event  [
            offset=15,
            earliest="17:00",
            latest="22:00"
        ]
}

Rules:

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
    Channel 'astro:sun:home:civilDusk#event'	 triggered START
 then
         logInfo("shutters", "Rollladen fahren runter!")
         gAlleShutters.sendCommand(100)
end
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
scotty
Beiträge: 676
Registriert: 28. Apr 2020 04:44
Answers: 0

Re: Rollläden über Datum steuern

Beitrag von scotty »

Die obige Konfiguration hat funktioniert. Danke Udo für die Hilfe, ich werde aber auch noch andere Einstellungen testen.
OH 3.4.5 im Docker auf Synology DS918+ mit USV, Reolink-RLC-511WA, Philips Hue, AVM Fritz!Box 6591C, Alexa, Logitech Harmony und diversen Shelly's

Benutzeravatar
udo1toni
Beiträge: 15307
Registriert: 11. Apr 2018 18:05
Answers: 246
Wohnort: Darmstadt

Re: [gelöst]Rollläden über Datum steuern

Beitrag von udo1toni »

scotty hat geschrieben: 4. Sep 2020 10:34 Übrigens, sehe ich das richtig? Du lässt innerhalb einer Gruppe die Shutter unterschiedlich schließen?
Ja, genau. Das sind halt Fenster, die zum Lüften geöffnet sind oder auch Nachts etwas Licht hereinlassen sollen.
openHAB5.0.0 stable in einem Debian-Container (bookworm) (Proxmox 9.0.3, LXC)

Antworten