Rollladen als Sonnenschutz

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Rollladen als Sonnenschutz

Beitrag von Hoggle »

Hallo zusammen.
Ja, ich weiß das es Schw....-Kalt ist, aber der nächste Sommer kommt und ich will vorbereitet sein.

Also, ich habe Rollläden, die mit Homematic-Schaltern gefahren werden.

Esszimmer:

Code: Alles auswählen

Rollershutter EZ_Rol_1LEVEL "Esszimmerrollladen K1 level" (gEZ_Rollladen, Esszimmer) {channel="homematic:HM-LC-Bl1PBU-FM:XXXXXXXX:NEQXXXXXX:1#LEVEL"}
Wohnzimmer:

Code: Alles auswählen

Rollershutter WZ_Rol1LEVEL "Wohnzimmer Rollladen K1 level" (gWZ_Rollladen) {channel="homematic:HM-LC-Bl1PBU-FM:XXXXXXXX:NEQXXXXXXX:1#LEVEL"}
Des weiteren habe ich noch einen Sonnensensor:

Code: Alles auswählen

Number LUX_K1LUX "Sonnensensor lux" (gSonnensensor, Terasse) {channel="homematic:HM-Sen-LI-O:XXXXXXXXX:OEQXXXXXXX:1#LUX"}
und einen Temperatursensor auf der gleichen Seite:

Code: Alles auswählen

Number A_Temp_K2TEMPERATURE "Aussentemperatur im Schatten" (gAussentemperatursensor, gTerasse, gchartTemp) {channel="homematic:HM-WDS30-OT2-SM-2:XXXXXXXX:NEQXXXXXXX:2#TEMPERATURE"}
Ach ja und natürlich für die Terassentür noch einen Türgriffkontakt, der aufpassen soll, das die Rolllade nicht fährt, wenn die Tür geöffnet ist:

Code: Alles auswählen

String EZ_Griff_1STATE "Terassentürgriff K1 state" (gEZ_Fenstergriff, Esszimmer) {channel="homematic:HM-Sec-RHS:XXXXXXX:LEQXXXXXXX:1#STATE"}
Für Abends habe ich eine funktionierende Rule:

Code: Alles auswählen

rule "Rollladen runter Abends"
when
         Channel 'astro:sun:home:set#event' triggered START
then
         createTimer(now.plusMinutes(30))
         [
          WZ_Rol1LEVEL.sendCommand(100)
          if (EZ_Griff_1STATE.state.toString =="CLOSED")
                {
                EZ_Rol_1LEVEL.sendCommand(100)
                }
        ]
end
So, Schluß mit der Vorrede: Meine Überlegung ist jetzt, wie ich am Besten eine Sonnenschutzfunktion (Rule) erstellen kann?

Wenn die Sonne länger als 10 Minuten scheint und die Temperatur höher als 20 Grad ist, dann sollen die Rollläden im Ess- und Wohnzimmer auf 80% herunterfahren und hochfahren, wenn entweder die Temperatur noch vor Sonnenuntergang unter 15 Grad fällt und der LUX-Wert unter z. B. 2000 für eine Zeit länger 30 Minuten gesunken ist.
Ich könnte jetzt ja die oben stehende Rule abändern, aber wie bekomme ich den Timer so eingestellt, das die Rollläden nur gefahren werden, wenn die Sonne und die Temperatur länger als 10 Minuten die gewünschten Werte hatte. Die obige Rule schießt ja immer nach 30 Minuten, aber wenn in der Zwischenzeit die Bedingung nicht mehr gegeben ist, soll die Sonnenschutzfunktion ja nicht ausgelöst werden.

Habe ich das zu kompliziert geschrieben? :?
Und bevor es andere tun: Ich weiß nicht, wie viele von Euch in unterschiedlichen Foren unterwegs sind. Ich habe diese Frage auch noch in einem anderen Forum gestellt (Vielleicht erreiche ich damit noch mehr Leute :D )
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

hr3
Beiträge: 210
Registriert: 23. Mai 2017 21:41
Answers: 0

Re: Rollladen als Sonnenschutz

Beitrag von hr3 »

Ich würde hier mit einer Kombination aus rule und Expire-Bindung arbeiten. z.B. Für den ersten Fall ein zusätzliches Switch Item das per Expire nach 10 Min swn Status auf ON setzt. Dieses bei jeder Termperatur-Änderung (rule changed) unterhalb von 20 Grad (und ggf. abhängig von Tageszeit, Helligkeit, Sonnenauf/Untergang, usw.) auf OFF setzen. Wenn das 10 Min ausbleibt wird automatisch ON gesetzt und eine weitere changed to ON rule kann den Rolladen fahren. In gleicher Weise ist auch alles andere reralisierbar, soweit ich meine, übersichtlich und mit gernger Systembelastung.

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: Rollladen als Sonnenschutz

Beitrag von Hoggle »

Hallo.
Eine kurze Rückfrage zu dem Thema:

Ich habe jetzt einen "Dummy-Switch" mit dem expire-Binding versehen:

Code: Alles auswählen

    Switch   R_LUX_Automode_AN       "Lichtautomatik aktivieren"                 (gDummy) {expire="20m,command=OFF"}
Und eine Rule, um zu reagieren, wenn die Sonne scheint und die Temperatur größer als der festgelegte Grenzwert ist:

Code: Alles auswählen

val SunLux = 40000 //Ab welchem Luxwert die Sonnenautomatik reagieren soll
val SunTmp = 20 //Ab welcher Temperatur die Automatik reagieren soll
val int Hysteresis=20 //Die Zeit die für den Durchschnittslichtwert genommen werden soll

rule "Sonnenautomatik schalten"

when
    Item LUX_K1LUX changed //Wenn Lichtsensor aktualisiert wurde
then
    var Number Lux_tmp_avg = LUX_K1LUX.averageSince(now.minusMinutes(Hysteresis)) //durchschnittlicher Lichtwert der letzen Minuten (Hysteresis oben definiert)
    var Number TMP_tmp_avg = ((TempTerasse_1TEMPERATURE.averageSince(now.minusMinutes(Hysteresis)) + TempTerasse_2TEMPERATURE.averageSince(now.minusMinutes(Hysteresis))) / 2)
    
    LUX_AVG.postUpdate(Lux_tmp_avg)
    Tmp_AVG.postUpdate(TMP_tmp_avg)

if (Lux_tmp_avg >  SunLux)
    {
       if (Tmp_AVG > SunTmp)
           {
           R_LUX_Automode_AN.sendCommand(ON)
           }
    }

Das funktioniert ja auch soweit,aber wenn ich es anders herum mache, bekomme ich eine Fehlermeldung:

Code: Alles auswählen

if (SunLux > Lux_tmp_avg)
    {
       if (SunTmp > Tmp_AVG)
           {
           R_LUX_Automode_AN.sendCommand(OFF)
           }
    }

Code: Alles auswählen

2018-06-10 11:09:06.179 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Sonnenautomatik schalten': An error occurred during the script execution: Could not invoke method: org.eclipse.xtext.xbase.lib.IntegerExtensions.operator_greaterThan(int,byte) on instance: null
Ich möchte ja, das, solange die durchschnittstemperatur und LUX-Werte unter den Vorgabewerten sind, der Schalter bei jeder Änderung auf OFF geschaltet wird und nur, wenn die Werte länger als 20m überschritten werden, den Schalter auf ON setzen, so das eine Rule die Rollläden auf Lücke fährt.
Was mache ich denn da schon wieder falsch?

Ach ja, ich habe auch schon versucht, das ">" gegen "<" auszutauschen. Dann kommt ein Fehler, das das Zeichen nicht richtig sei.
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

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

Re: Rollladen als Sonnenschutz

Beitrag von udo1toni »

Da Tmp_AVG offensichtlich ein Number item ist, musst Du auch (Tmp_AVG.state as Number) schreiben. Die Fehlermeldung wird so oder so kommen, wenn Du sie nicht siehst, liegt das nur daran, dass der entsprechende Codeteil gerade nicht abgearbeitet wird.

Ach so... die Hysterese wäre eher, wenn Du das ON-Kommando nur schickst, wenn die Sonneneinstrahlung größer als Schwellwert plus Hysteres ist, und umgekehrt das OFF-Kommando nur schickst, wenn die Sonneneinstrahlung unter Schwellwert minus Hysterese fällt, also so:

Code: Alles auswählen

if ((SunLux + Hysterese) < (Lux_tmp_avg.state as Number) && SunTmp < (Tmp_AVG.state as Number))  //beide Bedingungen müssen erfüllt sein
    // send ON
else if ((SunLux - Hysterese) > (Lux_tmp_avg.state as Number) || SunTmp > (Tmp_AVG.state as Number))  // eine Bedingung muss erfüllt sein!
    //send OFF
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: Rollladen als Sonnenschutz

Beitrag von Hoggle »

Hallo.
Ich wollte meine Frage schon kopieren und ins entsprechende forum im KNX-user- forum schicken.
Aber jetz zurück.
Die hysterese ist doch nur die Zeitspanne, die er für die Berechnung der average-Wertes benötigt.
Ich möchte doch, das immer, wenn sich der Sonnenwert ändert, ein OFF an das Switch item gesendet wird. Nur, wenn dieser Wert ausbleibt, dann soll durch das expire Binding nach 20 Minuten ein ON gesetzt werden um per Rule die Rollladen zu fahren.
Die 20 Minuten sind eine Verzögerung, damit die Rollladen nicht sofort beim erreichen des definierten Wertes fahren. Dadurch wird die Steuerung etwas träger. Ob die Werte in der Praxis so passen wird sich dann zeigen.
Das mit dem "as Number" werde ich aber noch testen, wenn ich es schaffe, mich aus meinem Gartenstuhl zu erheben :D . 8-) .
Aber vielen Dank für die gute Unterstützung
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

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

Re: Rollladen als Sonnenschutz

Beitrag von udo1toni »

Hysterese ist eigentlich ein Wertebereich, innerhalb dem sich ein Schaltzustand nicht ändert, um ein Flattern zu verhindern. z.B. schaltet das Bimetall im Heizkörperthermostaten den Heizkörper ein, wenn die Temperatur unter 19,0°C sinkt. Der Heizkörper wird aber erst abgeschaltet, wenn die Temperatur über 20,0°C steigt. Man hat also eine Solltemperatur von 19,5°C und eine Hysterese von +/- 0,5°C, so dass der Heizkörper nicht nur einige Sekunden heizt, dann wieder ausgeht, und nach wenigen Sekunden wieder einschaltet.

Deine Steuerung schaltet prinzipiell ständig hin und her, wenn sich die Lichtverhältnisse sehr eng um den Schwellwert hin und her bewegen. Zum einen wird die Rule durch die Lichtänderung immer wieder getriggert. Zum anderen nimmt das System den Mittelwert der letzten 20 Minuten. Stell Dir vor das Licht wechselt minütlich von zu dunkel nach zu hell und umgekehrt. Der Mittelwert liegt dadurch abwechselnd über und unter dem Schwellwert (dabei ist es ja egal, ob die Abweichung 100.000 Lux beträgt oder nur 0.0001 Lux!!!) -> die Automatik wird ständig ein- und ausgeschaltet.

Natürlich ist der Fall "starke Helligkeitsschwankung exakt um den Sollwert" eher selten, so dass Du in der Praxis dieses Fehlverhalten nicht beobachten wirst, aber der Ansatz stimmt halt nicht ;)

Momentan ist Dein Expire Item so konfiguriert, dass es automatisch OFF geht. Du kannst es über Schalter oder Rule einschalten, Du kannst es über Schalter und Rule ausschalten. Wenn Du aber möchtest, dass es automatisch einschaltet, musst Du das im Item umstellen :)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: Rollladen als Sonnenschutz

Beitrag von Hoggle »

Also, ich hatte mir das so vorgestellt: Wenn sich der Lux Wert ändert startet die Rule "Sonnenautomatik schalten".
Solange der Luxwert unter dem Schwellwert liegt und die Temperatur ebenfalls unter dem Schwellwert ist, soll OFF gesendet werden.
Wenn der LUX Wert größer als der Schwellwert ist, dann kommt nix, also das expire-bindung fängt an zu wirken.
Wenn 20 Minuten der Schwellwert überschritten wurde, schaltet der Switch auf ON.

Im Moment schaltet der switch und auch die Rule genau anders herum, also, ich schalte solange auf ON, bis der Schwellwert überschritten wurde.

Ich stelle dir Rule jetzt mal so um, wie ich mir das vorstelle (inkl. deinem Tipp mit dem "as number".
Stelle das dann mal hier rein, auch wenn keine Fehlermeldung mehr kommt.
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: Rollladen als Sonnenschutz

Beitrag von Hoggle »

Mhh. Hab ich da doch was falsch in dem Code?
Rule:

Code: Alles auswählen

if ((Lux_tmp_avg.state as Number) <  SunLux)
    {
       if ((Tmp_AVG.state as Number) < SunTmp)
           {
           R_LUX_Automode_AN.sendCommand(OFF)
           }
    }
Fehler:

Code: Alles auswählen

2018-06-10 21:40:56.833 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Sonnenautomatik schalten': 'state' is not a member of 'org.eclipse.smarthome.core.library.types.DecimalType'; line 17, column 6, length 17
Line 17:

Code: Alles auswählen

if ((Lux_tmp_avg.state as Number) <  SunLux)
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

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

Re: Rollladen als Sonnenschutz

Beitrag von udo1toni »

Ups, Entschuldigung, da hatte ich nicht aufgepasst. Lux_tmp_avg ist ja kein Item. Da bin ich etwas durcheinander gekommen.
Du kannst logischerweise auch auf das (... as Number) völlig verzichten, da Du ja die Items innerhalb der Rule mit den Werten aus den Variablen setzt.
dann reicht auch

Code: Alles auswählen

if (Lux_tmp_avg <  SunLux)
    {
       if (TMP_tmp_avg < SunTmp)
           {
           R_LUX_Automode_AN.sendCommand(OFF)
           }
    }
Es bleibt aber dabei, dass Du potenziell (wenn Du mal die Logik umgekehrt hast, ansonsten halt andersrum) zwar erst nach 20 Minuten ein ON-Signal bekommst, aber eventuell schon nach wenigen Sekunden wieder ein OFF, dann nach 20 Minuten wieder ein ON und wenige Sekunden später wieder ein OFF. Das lässt sich besser mit der (korrekt umgesetzten) Hysterese bekämpfen, als mit einem Timer.

Und immer noch gilt natürlich, dass Du bequem beide Bedingungen in eine IF-Klausel fassen kannst:

Code: Alles auswählen

if (Lux_tmp_avg <  SunLux && TMP_tmp_avg < SunTmp)
    R_LUX_Automode_AN.sendCommand(OFF)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: Rollladen als Sonnenschutz

Beitrag von Hoggle »

Hallo.
Dank der Tipps scheint es jetzt zu funktionieren.
Noch einmal zu der Erklärung, was ich möchte:
Der Schalter R_LUX_Automode_AN soll bei jeder Änderung des LUX Wertes so lange mit einem OFF belegt werden, so lange 1. Der durchschnittliche LUX-Wert der letzten 20 Minuten (Wird durch die Variable Hysterese definiert)geringer ist, als der eingestellte Grenzwert (SunLux) und die Durchschnittstemperatur der letzten 20 Minuten(Oder jeder Wert, der per Hysterese-Zeitspanne angegeben wurde) ebenfalls unterschritten wird.

Wenn beide Durchschnittswerte oberhalb des Grenzwertes liegen (Heute z. B. waren es ein zeitweise weit oberhalb der Werte), dann wird kein OFF gesendet. Ich verstehe das expire-Binding so, das, wenn eine anzugebene Zeit nichts mit dem Item passiert, das Command ON gesetzt wird.
Das heißt also, das die Sonne mindestens die angegebene Zeit scheinen muß und die Temperatur einen gewissen Wert überschreiten muß, damit ich ein ON bekomme (In meinem Fall habe ich 20Minuten eingestellt).
Jetzt kann ich per Rule auf das ON reagieren (when R_LUX_Autmode_AN changed from OFF to ON)
Jetzt muß ich noch ein zusätzliches Dummy-Item erstellen, welches ich dafür nutze, das der Rollladen nicht sofort wieder hoch fährt, sobald ein OFF gesendet wird.
Ach ja, ich habe extra die Temperatur mit berücksichtigt, damit ich im Winter die Sonne noch als Heizung nutzen kann. Dafür habe ich diesen Differenz-Temperatursensor von Homematic und die Durchschnittstemperatur berechne ich aus den beiden Temperaturen "in der Sonne" + "im Schatten" geteilt durch 2, damit ich eine mittlere Temperatur ermittle (Ist physikalisch vielleicht total falsch, aber gefühlt ist es in der Sonne doch immer zu heiß und im Schatten meistens wesentlich kälter - Aber da bin ich noch am testen)
Denke ich da zu kompliziert?
Wie macht ihr das denn mit der Sonnensteuerung?
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

Antworten