Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Für welche Projekte verwendet Ihr OpenHAB? Was habt Ihr automatisiert? Stellt eure Projekte hier vor.

Moderatoren: Cyrelian, seppy

Antworten
cupra6
Beiträge: 35
Registriert: 4. Jan 2019 22:09

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von cupra6 »

@ Cyrelian

Ich habe versucht den Code für die "Verschattung Deaktivierung" erstmal nur für die OST-Seite zu implementieren, leider funktioniert es nicht.
Ich vermute, ich habe es an falscher Stelle eingesetzt.

Code: Alles auswählen

if (isRainLastHour || isCloudLastHour) {
        logInfo("rules", logPrefix + "Verschattung beenden, Mindestregenmenge von ({}) mm oder druchschnittliche Bewölkung von ({}) % erreicht",minPrecip, cloudHysteresis)
        AutoShadingM_End_last.postUpdate(now.toString())
        shadingEnd.apply(gRollladen)
        return;
    }

    if ((Azimuth.state as Number).floatValue > (var Number openingAzimuth_south1) && (Azimuth.state as Number).floatValue < (var Number openingAzimuth_south2)) {
        logInfo("rules", logPrefix + "Verschattung beenden, EXCLUSIV für Rollläden OST")
        shadingEnd.apply(gRollladenEast)
        return;
        }

    if ((Elevation.state as Number) > (AutoShading_Elevation_end.state as Number)) {
        logInfo("rules", logPrefix + "Beende, aktuelle Elevation ({}) ueberschreitet den eingestellten Grenzwert von ({}) ", Elevation.state, AutoShading_Elevation_end.state)
        return;
    }
    
    

Christian78
Beiträge: 1
Registriert: 9. Aug 2020 14:51

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von Christian78 »

Hallo Zusammen,

ich bin "der Neue", habe mich gerade eben im Forum angemeldet. Bin seit drei Jahren aktiv mit Openhab, habe von Allem und Nix ne Ahnung, ein bisschen Background im Bereich Elektrik, Elektronik, Systemintegration und Programmierung. Ich glaube am wenigsten davon bin ich in der Lage, zu programmieren. :-)

Über die deutsche Openhab Facebook Gruppe habe ich hierher gefunden, dieses Rolladen Projekt interessiert mich brennend, als ich recherchiert habe, wie ich sowas selbst bewerkstelligen könnte, habe ich dieses geniale Projekt gefunden und würde mich gerne anschließen. An meiner Hütte bin ich gerade dabei, die Ostseite mit Rolloantrieben auszustatten und würde den Code gerne bei mir implementieren.

Beim Durchblättern dieses Threads habe ich verschiedene Versionen des Codes gefunden, gerne würde ich mit dem "aktuellen Stand" beginnen, wo finde ich den denn? Oder ist der Stand von 21. Jul 2020 20:57 die aktuelle Version?

Viele Grüße

Christian

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von Cyrelian »

Christian78 hat geschrieben: 9. Aug 2020 15:11 Beim Durchblättern dieses Threads habe ich verschiedene Versionen des Codes gefunden, gerne würde ich mit dem "aktuellen Stand" beginnen, wo finde ich den denn? Oder ist der Stand von 21. Jul 2020 20:57 die aktuelle Version?

Viele Grüße

Christian
Hi Christian,

willkommen im Forum :D .

Ja, das ist der "aktuelle" Stand.

CU
Cyrelian

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von Cyrelian »

cupra6 hat geschrieben: 9. Aug 2020 00:06 @ Cyrelian

Ich habe versucht den Code für die "Verschattung Deaktivierung" erstmal nur für die OST-Seite zu implementieren, leider funktioniert es nicht.
Ich vermute, ich habe es an falscher Stelle eingesetzt.

Code: Alles auswählen

if (isRainLastHour || isCloudLastHour) {
        logInfo("rules", logPrefix + "Verschattung beenden, Mindestregenmenge von ({}) mm oder druchschnittliche Bewölkung von ({}) % erreicht",minPrecip, cloudHysteresis)
        AutoShadingM_End_last.postUpdate(now.toString())
        shadingEnd.apply(gRollladen)
        return;
    }

    if ((Azimuth.state as Number).floatValue > (var Number openingAzimuth_south1) && (Azimuth.state as Number).floatValue < (var Number openingAzimuth_south2)) {
        logInfo("rules", logPrefix + "Verschattung beenden, EXCLUSIV für Rollläden OST")
        shadingEnd.apply(gRollladenEast)
        return;
        }

    if ((Elevation.state as Number) > (AutoShading_Elevation_end.state as Number)) {
        logInfo("rules", logPrefix + "Beende, aktuelle Elevation ({}) ueberschreitet den eingestellten Grenzwert von ({}) ", Elevation.state, AutoShading_Elevation_end.state)
        return;
    }
    
    
Hi cupra,

ja, der ist zu weit hinten. Wenn du die Rollläden als "Wärmeschutz" nehmen möchtest, dann muss er direkt hinter:

Code: Alles auswählen

    if (isTemperature) {
        logInfo("rules", logPrefix + "Verschattung beenden, Temperaturabfall von min. ({})° erkannt", temperatureHysteresis)
        gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toString())
        shadingEnd.apply(gRollladen)
        return;
    }
Ansonsten vor:

Code: Alles auswählen

   if (isRainLastHour || isCloudLastHour) {
        logInfo("rules", logPrefix + "Verschattung beenden, Mindestregenmenge von ({}) mm oder druchschnittliche Bewölkung von ({}) % erreicht",minPrecip, cloudHysteresis)
        gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toString())
        shadingEnd.apply(gRollladen)
        return;
    }
CU
Cyrelian

cupra6
Beiträge: 35
Registriert: 4. Jan 2019 22:09

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von cupra6 »

Code: Alles auswählen

var Number closingAzimuth_east = 80         
var Number closingAzimuth_south = 87

var Number openingAzimuth_east1 = 161       
var Number openingAzimuth_east2 = 166

var Number closingAzimuth_west = 167

var Number openingAzimuth_south1 = 250 
var Number openingAzimuth_south2 = 254 

var Number closingAzimuth_north = 260

...
...
...

   if (isTemperature) {
        logInfo("rules", logPrefix + "Verschattung beenden, Temperaturabfall von min. ({})° erkannt", temperatureHysteresis)
        //gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toString())
        shadingEnd.apply(gRollladen)
        return;
    }
    
    if (isActiveEast) {
            if ((Azimuth.state as Number).floatValue > (openingAzimuth_east1) && (Azimuth.state as Number).floatValue < (openingAzimuth_east2)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden OST beenden")
            shadingEnd.apply(gRollladenEast)
            return;
            }
    }   

    if (isActiveSouth) {
            if ((Azimuth.state as Number).floatValue > (openingAzimuth_south1) && (Azimuth.state as Number).floatValue < (openingAzimuth_south2)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD beenden")
            shadingEnd.apply(gRollladenSouth)
            return;
            }
    } 
    if ((weatherN_Temperature.state as Number).floatValue > (AutoShading_Temp_raise.state as Number)) {
        logInfo("rules", logPrefix + "Beende, aktuelle Temperatur ({})° ueberschreitet den eingestellten Grenzwert zum hochfahren von ({})°",weatherN_Temperature.state, AutoShading_Temp_raise.state )
        return;
    }
...
...
...    
@Cyrelian

Vielen Dank, so wie oben, habe ich es implementiert und es scheint zu funktionieren !!

Trotzdem es funktioniert, gibt es im LOG ein paar Fehler-Einträge:

Code: Alles auswählen

2020-08-23 12:47:45.458 [vent.ItemStateChangedEvent] - Azimuth changed from 160.8375057663293 to 161.20353070702788
2020-08-23 12:47:45.621 [INFO ] [eclipse.smarthome.model.script.rules] - Verschattung deaktivieren - Verschattung für Rollläden OST beenden
2020-08-23 12:47:45.724 [INFO ] [eclipse.smarthome.model.script.rules] - Verschattung deaktivieren - Rollladen werden geoeffnet
2020-08-23 12:47:45.766 [INFO ] [eclipse.smarthome.model.script.rules] - Verschattung deaktivieren - Oeffne Rollladen: Shutter_OG_Gast2
2020-08-23 12:47:46.694 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Verschattung beenden': Cannot assign a value in null context.
Danach kommt jedes Mal wenn "Azimuth" sich verändert (von 161 bis 166), das hier:

Code: Alles auswählen

2020-08-23 12:48:45.543 [INFO ] [eclipse.smarthome.model.script.rules] - Verschattung deaktivieren - Verschattung für Rollläden OST beenden
2020-08-23 12:48:45.584 [INFO ] [eclipse.smarthome.model.script.rules] - Verschattung deaktivieren - Rollladen werden geoeffnet
2020-08-23 12:48:45.625 [INFO ] [eclipse.smarthome.model.script.rules] - Verschattung deaktivieren - Rollladen: (Shutter_OG_Gast2) wird nicht geoeffnet, da dieser zwischenzeitlich manuell verändert wurde.
2020-08-23 12:48:45.674 [ERROR] [ntime.internal.engine.RuleEngineImpl] - Rule 'Verschattung beenden': Cannot assign a value in null context.
Und wenn openAzimutz vorbei ist, kommt bis zum Abend diese Meldung:

Code: Alles auswählen

2020-08-23 13:00:45.592 [INFO ] [eclipse.smarthome.model.script.rules] - Verschattung aktivieren - Verschattung für Rollläden OST bereits aktiviert
Schöner wäre es, wenn sobald OST beendet wird, dann z.B. käme: Verschattung für Rollläden OST bereits deaktiviert

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von Cyrelian »

Hi cupra,

poste mal bitte NUR deine Rule 'Verschattung beenden'.

CU
Cyrelian

cupra6
Beiträge: 35
Registriert: 4. Jan 2019 22:09

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von cupra6 »

Code: Alles auswählen


//-------------  Verschattung beenden -------------------

val shadingEnd = [GroupItem shutter |

        val String logPrefix = "Verschattung deaktivieren - "

                    val Map<String, Number> targetHights = newHashMap ( 
        
        "Shutter_EG_Office" -> 74,   //4x EAST
        "Shutter_OG_Gast2" -> 74,
        "Shutter_OG_Flur" -> 77,
        "Shutter_OG_Bad" -> 62,
    
        "Shutter_EG_Wohnen3" -> 73,    //3x SOUTH
        "Shutter_OG_Eltern" -> 84,
        "Shutter_OG_Gast1" -> 67,
    
        "Shutter_EG_Kueche1" -> 10,   //4 x WEST
        "Shutter_EG_Kueche2" -> 40,
        "Shutter_EG_Wohnen1" -> 78,
        "Shutter_EG_Wohnen2" -> 78,
    
        "Shutter_EG_GaesteBad" -> 63,   //3x NORD
        "Shutter_EG_Technik" -> 63,   
        "Shutter_OG_HWR" -> 64,
        )
                    // Rollladen öffnen
                    logInfo("rules", logPrefix + "Rollladen werden geoeffnet")

                    shutter.allMembers.forEach[ blind |
                       if ((blind.state as Number) == targetHights.get(blind.name.toString()).intValue) {
                            logInfo("rules", logPrefix + "Oeffne Rollladen: " + blind.name.toString())
                            blind.sendCommand(UP)
                            //Pushnachricht versenden                        
                            //sendPushoverMessage(pushoverBuilder("Verschattung für (" + blind.name.toString() + ") beendet, Rollladen wird geöffnet."))
                            sendTelegram("bot1","Verschattung für (" + blind.name.toString() + ") beendet, Rollladen wird auf " + targetHights.get(blind.name.toString()).toString() + "% " + "geöffnet.")
                            sendTelegram("bot2","Verschattung für (" + blind.name.toString() + ") beendet, Rollladen wird geöffnet.")
                        } else {
                            logInfo("rules", logPrefix + "Rollladen: (" + blind.name.toString() + ") wird nicht geoeffnet, da dieser zwischenzeitlich manuell verändert wurde.")
                        }    
                    ]                         
                    // Letzte Ausführung mit entsprechendem Zeitstempel belegen
                    AutoShading_End_last.postUpdate(now.toString())
                    
                    //Variablen zurücksetzen
                    isActiveNorth = false
                    isActiveWest = false
                    isActiveSouth = false
                    isActiveEast = false
    return true;
]

..................................................

rule "Verschattung beenden"
when 
    Item Elevation changed
then   
    
    val String logPrefix = "Verschattung deaktivieren - "

    //Prüfung auf: Verschattungsautomatik an / ob es Tag ist / Jahreszeit
    if (AutoShading_end.state != ON) {                                                                  
        logInfo("rules", logPrefix + "Verschattung wird nicht ausgeführt, da deaktiviert.")
        return;
    }

    if (IsDay.state != ON) {                                                                        
        logInfo("rules", logPrefix + "Verschattung wird nicht ausgeführt, es ist Nacht.")
        return;
    }

    if (Jahreszeit.state !="SPRING" && Jahreszeit.state!= "SUMMER") {                               
        logInfo("rules", logPrefix + "Verschattung wird nicht ausgeführt, da weder, Frühling noch Sommer.")
        return;
    }
            
    val Boolean isRainLastHour = (Rain.maximumSince(now.minusHours(1), "influxdb").state >= (minPrecip))
    logInfo("rules", logPrefix + "Rain " + isRainLastHour)
    
    val Boolean isCloudLastHour = (Clouds.averageSince(now.minusHours(1), "influxdb")as Number >= (cloudHysteresis))
    logInfo("rules", logPrefix + "Clouds " + isCloudLastHour )
    
    val Boolean isTemperature = ((weatherN_Temperature.state as Number).intValue < (weatherN_Temperature.minimumSince(now.minusHours(1), "influxdb").state as DecimalType -(temperatureHysteresis)))
    logInfo("rules", logPrefix + "Temperatur " + isTemperature)
    
    
    if (AutoShading_End_last.state === NULL || AutoShadingM_End_last.state === NULL) {
        logInfo("rules", logPrefix + "Letzte Ausführung unbekannt, Belegung mit Initialwert (-1 Tag)")
            AutoShading_End_last.postUpdate(now.minusDays(1).toString())
            AutoShadingM_End_last.postUpdate(now.minusDays(1).toString())
        }

    var String timeNow = now.toString().substring(0,10)
    var String timeLastEnde = AutoShading_End_last.state.toString().substring(0,10)
    var String timeLastEndeM = AutoShadingM_End_last.state.toString().substring(0,10)

    if (timeLastEnde == timeNow && timeLastEndeM == timeNow) {
        logInfo("rules", logPrefix + "Beende, da heute bereits ein automatisches Hochfahren stattfand")
        return;
    }

    if (!isActiveNorth && !isActiveWest && !isActiveSouth && !isActiveEast ) { //&& !isActiveBalkon) {
        logInfo("rules", logPrefix + "Beende, da heute noch keine automatische Verschattung stattfand")
        return;
    }

    if (isTemperature) {
        logInfo("rules", logPrefix + "Verschattung beenden, Temperaturabfall von min. ({})° erkannt", temperatureHysteresis)
        //gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toString())
        shadingEnd.apply(gRollladen)
        return;
    }
    
    if (isActiveEast) {
            if ((Azimuth.state as Number).floatValue > (openingAzimuth_east1) && (Azimuth.state as Number).floatValue < (openingAzimuth_east2)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden OST beenden")
            shadingEnd.apply(gRollladenEast)
            house_scene_sunprotection_east.postUpdate(OFF)
            return;
            }
    }   
    
    if (isActiveSouth) {
            if ((Azimuth.state as Number).floatValue > (openingAzimuth_south1) && (Azimuth.state as Number).floatValue < (openingAzimuth_south2)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD beenden")
            shadingEnd.apply(gRollladenSouth)
            house_scene_sunprotection_south.postUpdate(OFF)
            return;
            }
    }   
    
    if ((weatherN_Temperature.state as Number).floatValue > (AutoShading_Temp_raise.state as Number)) {
        logInfo("rules", logPrefix + "Beende, aktuelle Temperatur ({})° ueberschreitet den eingestellten Grenzwert zum hochfahren von ({})°",weatherN_Temperature.state, AutoShading_Temp_raise.state )
        return;
    }

    if (isRainLastHour || isCloudLastHour) {
        logInfo("rules", logPrefix + "Verschattung beenden, Mindestregenmenge von ({}) mm oder druchschnittliche Bewölkung von ({}) % erreicht",minPrecip, cloudHysteresis)
        AutoShadingM_End_last.postUpdate(now.toString())
        shadingEnd.apply(gRollladen)
        return;
    }

    if ((Elevation.state as Number) > (AutoShading_Elevation_end.state as Number)) {
        logInfo("rules", logPrefix + "Beende, aktuelle Elevation ({}) ueberschreitet den eingestellten Grenzwert von ({}) ", Elevation.state, AutoShading_Elevation_end.state)
        return;
    }

    if (isActiveNorth || isActiveWest ) {
        logInfo("rules", logPrefix + "Verschattung Rollläden WEST / NORD beenden")
        //shadingEnd.apply(gRollladen)
        shadingEnd.apply(gRollladenWest)
        shadingEnd.apply(gRollladenNorth)
        return;
    }        
end

b3luga
Beiträge: 2
Registriert: 24. Aug 2020 11:48

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von b3luga »

Danke Cyrelian, für die super Vorlage - werde das in den nächsten Tagen in mein System einbauen.

Was mir noch fehlt ist ein "Wintermodus" zur besseren Wärmedämmung. Ich werde mir wohl folgende Logik für meine Dachgeschossfenster einbauen:
  • Rolläden schließen, wenn niemand zu Hause ODER nach Sonnenuntergang
  • Rolläden öffnen bei Sonnenaufgang ODER (Präsenz ändert sich von OFF zu ON und es ist tagsüber)

Mal sehen... :)

Grüße
Beluga

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von Cyrelian »

Hi cupra,

auf den ersten Blick sieht das gut aus. Kommt die Message über Telegram an?
Ich tippe mal auf ein Problem mit den Variablen. Kannst du mal bitte prüfen, dass die nicht NULL oder empty sind?

CU
Cyrelian

Benutzeravatar
Cyrelian
Beiträge: 601
Registriert: 24. Sep 2015 17:55
Answers: 4

Re: Elektrischen Rolladen abhängig von Sonnenstand und Wetter steuern lassen

Beitrag von Cyrelian »

b3luga hat geschrieben: 25. Aug 2020 22:27 Danke Cyrelian, für die super Vorlage - werde das in den nächsten Tagen in mein System einbauen.

Was mir noch fehlt ist ein "Wintermodus" zur besseren Wärmedämmung. Ich werde mir wohl folgende Logik für meine Dachgeschossfenster einbauen:
  • Rolläden schließen, wenn niemand zu Hause ODER nach Sonnenuntergang
  • Rolläden öffnen bei Sonnenaufgang ODER (Präsenz ändert sich von OFF zu ON und es ist tagsüber)

Mal sehen... :)

Grüße
Beluga
Hi Beluga,

was meinst du mit "Wintermodus"? Beschreib mal bitte welche Funktionen der haben soll, dann können wir das ggf. ja bauen ;) .

CU
Cyrelian

Antworten