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
ok-qt20
Beiträge: 3
Registriert: 23. Apr 2021 16:41

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

Beitrag von ok-qt20 »

Danke noch mal für die Antworten.
Die Verschattung läuft nun.

Frage noch mal an die Wissenden. Muss in OH3 die Rule die ich über VSC eingefügt habe jeden Tag neu gestartet werden? Sie ist mit einem Schloss gesichert und ist nicht editierbar in OH3 sondern nur über VSC.

Grüße Maik

int5749
Beiträge: 1161
Registriert: 4. Nov 2019 22:08
Answers: 9

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

Beitrag von int5749 »

ok-qt20 hat geschrieben: 1. Jun 2021 22:29 Frage noch mal an die Wissenden. Muss in OH3 die Rule die ich über VSC eingefügt habe jeden Tag neu gestartet werden? Sie ist mit einem Schloss gesichert und ist nicht editierbar in OH3 sondern nur über VSC.
Nein, eine Rule wird getriggert wenn die Eingangsparameter stimmen.

Die hat in OH3 ein Schloss. da diese für OH nur read-only ist. Wie alles andere auch, was nicht nativ in OH 3 Main UI erstellt wurde.
openHAB 4.1.0 Release mit openHABian in einem Debian Bookworm (LXC) unter Proxmox 8.1.3

Hoggle
Beiträge: 213
Registriert: 16. Dez 2017 10:49

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

Beitrag von Hoggle »

Cyrelian hat geschrieben: 21. Jul 2020 20:57 Hi,

hier der letzte Stand, verfeinert mit euren Ideen ;) .

ITEMS:

Code: Alles auswählen

/* -------------  Rollladensteuerung --------------------
 */

// -------------  Manuell --------------------
Switch		ManualShading				"Manuelle Verschattung an/aus"																(gInitializeOff)
String		Shading_Var				"Verschattungsvariablen"												<time>				(gShading)

// -------------  Automatic --------------------
Switch		AutoShading			"Automatische Verschattung"																	(gShading,gInitializeOn)
Switch		AutoShading_end			"Rollladen automatisch öffnen"																(gShading,gInitializeOn)
...
CYA
Cyrelian
Hallo in die Runde.
Kurze frage: Ist der Post von Cyrelian die aktuellste Version, die auch in OH3 funktioniert, oder stehen auf den Folgeseiten noch Änderungen, die ich noch anpassen muß?
Sind schon viele verschiedene Beiträge und oft kann ich nicht erkennen, ob man die Rule in OH3 oder OH2.x einsetzt.
Der Post ist aus Juli 2020 (gab es da schon OH3 überhaupt), was bedeuten würde, das für OH3 bestimmt noch Änderungen gemacht werden müssen, oder?
Was für Änderungen sind das denn?
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

salexes
Beiträge: 10
Registriert: 6. Jun 2021 14:44

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

Beitrag von salexes »

Hoggle hat geschrieben: 6. Jun 2021 12:11
Cyrelian hat geschrieben: 21. Jul 2020 20:57 Hi,

hier der letzte Stand, verfeinert mit euren Ideen ;) .

ITEMS:

Code: Alles auswählen

/* -------------  Rollladensteuerung --------------------
 */

// -------------  Manuell --------------------
Switch		ManualShading				"Manuelle Verschattung an/aus"																(gInitializeOff)
String		Shading_Var				"Verschattungsvariablen"												<time>				(gShading)

// -------------  Automatic --------------------
Switch		AutoShading			"Automatische Verschattung"																	(gShading,gInitializeOn)
Switch		AutoShading_end			"Rollladen automatisch öffnen"																(gShading,gInitializeOn)
...
CYA
Cyrelian
Hallo in die Runde.
Kurze frage: Ist der Post von Cyrelian die aktuellste Version, die auch in OH3 funktioniert, oder stehen auf den Folgeseiten noch Änderungen, die ich noch anpassen muß?
Sind schon viele verschiedene Beiträge und oft kann ich nicht erkennen, ob man die Rule in OH3 oder OH2.x einsetzt.
Der Post ist aus Juli 2020 (gab es da schon OH3 überhaupt), was bedeuten würde, das für OH3 bestimmt noch Änderungen gemacht werden müssen, oder?
Was für Änderungen sind das denn?
Ich hab genau die selbe Frage wie Hoogle.
Bin gerade auf OH3 umgestiegen und habe meine Homematic Rolladenaktoren integriert und würde gerne diese geniale Lösung/Regel integrieren bin mir aber auch komplett unsicher welche Regeln jetzt die neuste OH3 fähige regel ist.
Würde mich freuen wenn uns da jemand aufklären/helfen könnte.

gruß,
salexes

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 salexes und Hoggle,

ja, das ist "fast" der "letzte" Stand. Meine rule läuft einwandfrei unter OH3. Das was ich angepasst habe war das:

- Versenden via Pushover (Änderung im Binding)
- "Zeitumstellung" Joda Time / Java time

Code: Alles auswählen

postUpdate(now.toString())
ersetzt durch

Code: Alles auswählen

postUpdate(now.toLocalDateTime().toString())
An der Stelle hatte er mir nämlich nen Fehler geworfen.


Hier die ganze Rule:

Code: Alles auswählen

import java.util.Map

var Boolean message = true
val actions = getActions("pushover", "pushover:pushover-account:openHAB")
var receipt = null

val String filename = "shutter.rules"

// Values und Variablen für die Verschattung

//val Number blindClosed = 100
//val Number blindOpen = 0
//val Number blindTranslucent = 35

var Number closingAzimuth_west = 181
var Number closingAzimuth_south = 111
var Number closingAzimuth_east = 65

var Number closingCloudiness = 20   
val Number cloudHysteresis = 45         //die Mindestbewölkung in der letzten Stunde
var Number openingTemperature = 22
var Number closingTemperature = 24
val Number temperatureHysteresis = 4    //Temperaturabfall von min. 4 Grad in der letzten Stunde
val Number minPrecip = 5                //die Mindestmenge an Regen in der letzten Stunde

var Boolean isActiveWest = false
var Boolean isActiveEast = false
var Boolean isActiveSouth = false
var Boolean isActiveBalkon = false

val String logPrefix = "Rollläden - "

/* -------------  Verschattung FUNKTIONEN --------------------
*/
//-------------  Verschattung starten --------------------

val shadingStart = [GroupItem shutter |

        val String logPrefix = "Verschattung aktivieren - "

                val Map<String, Number> targetHights = newHashMap ( 
                "KuecheRollladenTuer" -> 58,
                "SchlafzimmerRollladenTuer" -> 100,
                "BadezimmerRollladen" -> 55,
                "WohnzimmerRollladenEsstisch" -> 65,
                "WohnzimmerRollladenTuer" -> 68,
                "WohnzimmerRollladenBalkon" -> 100,
                "GaesteWCRollladen_Slider" -> 100,
                "BueroRollladen" -> 100
                )
                // Rollladen werden geschlossen
                logInfo("rules", logPrefix + "Grenzwert wurden erreicht, Rollladen werden geschlossen")

                shutter.allMembers.forEach[ blind |
                    if ((blind.state as Number) < targetHights.get(blind.name.toString()).intValue) {
                        logInfo("rules", logPrefix + "Fahre Rollladen (" + blind.name.toString() + ") auf (" + targetHights.get(blind.name.toString()).intValue + ") %" )
                        blind.sendCommand(targetHights.get(blind.name.toString()).intValue)
                        //Pushnachricht versenden
                        val actions = getActions("pushover", "pushover:pushover-account:openHAB")
                        var receipt = actions.sendMessage("Verschattung für " + blind.name.toString + " aktiviert, schließen auf " + targetHights.get(blind.name.toString()).toString() + " %", "openHAB")
                        //sendPushoverMessage(pushoverBuilder("Verschattung für " + blind.name.toString + " aktiviert, schließen auf " + targetHights.get(blind.name.toString()).toString() + " %"))
                    } else {
                        logInfo("rules", logPrefix + "Rollladen ist bereits weiter geschlossen (" + blind.state.toString() + "%) als er geschlossen werden sollte und wird daher ignoriert")
                    }
                ]
                AutoShading_Start_last.postUpdate(now.toLocalDateTime().toString())
    return true;
]

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

val shadingEnd = [GroupItem shutter |

        val String logPrefix = "Verschattung deaktivieren - "

                    val Map<String, Number> targetHights = newHashMap ( 
                    "KuecheRollladenTuer" -> 58,
                    "SchlafzimmerRollladenTuer" -> 100,
                    "BadezimmerRollladen" -> 55,
                    "WohnzimmerRollladenEsstisch" -> 65,
                    "WohnzimmerRollladenTuer" -> 68,
                    "WohnzimmerRollladenBalkon" -> 100,
                    "GaesteWCRollladen_Slider" -> 100,
                    "BueroRollladen" -> 100
                     )
                    // 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                        
                            val actions = getActions("pushover", "pushover:pushover-account:openHAB")
                            var receipt = actions.sendMessage("Verschattung für (" + blind.name.toString() + ") beendet, Rollladen wird geöffnet.", "openHAB")                            
                            //sendPushoverMessage(pushoverBuilder("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.toLocalDateTime().toString())
                    
                    //Variablen zurücksetzen
                    isActiveWest = false
                    isActiveEast = false
                    isActiveSouth = false
    return true;
]

/* -------------  Verschattung RULES --------------------
*/
//-------------  Verschattung starten --------------------

rule "Rollladenautomatik / Markisenautomatik - Verschattung starten"
when
    Item Azimuth changed
then
    val String logPrefix = "Verschattung aktivieren - "
    
    //Prüfung auf: Verschattungsautomatik an / ob es Tag ist / Jahreszeit
    if (AutoShading.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;
    }

    if (AutoShading_Start_last.state == NULL) {
        logInfo("rules", logPrefix + "Letzte Ausführung unbekannt, Belegung mit Initialwert (-1 Tag)")
        AutoShading_Start_last.postUpdate(now.toLocalDateTime.minusDays(1).toString)
    }

    //Markisenautomatik
        if (!isActiveBalkon) {
        //Azimuth ist größer als 181° (WEST)
            if ((Azimuth.state as Number) > (closingAzimuth_west)) {
                if ((BalkonTemperatursensor_Temperature.state as Number).floatValue > (AutoShading_Temp_min.state as Number) && (OW_localCurrentCloudiness.state as Number).floatValue < (AutoShading_Cloudiness_max.state as Number)) { 
                    logInfo("rules", logPrefix + "Markise Balkon")
                    gBalkonRollladen.sendCommand(UP)
                    AutoShadingM_Start_last.postUpdate(now.toLocalDateTime().toString())
                    isActiveBalkon = true;      
                }
            }    
        } else {
            logInfo("rules", logPrefix + "Verschattung für Balkon bereits aktiviert")
        }

    //Rollladenautomatik
       if (gPresence.state != OFF) {                                                                           
        logInfo("rules", logPrefix + "Verschattung (Rollläden) wird nicht ausgeführt, Anwesenheit erkannt.")
        return;
    }
    
    // Items für Sitemap füllen
    if(AutoShading_Azimuth_east.state == NULL)    AutoShading_Azimuth_east.postUpdate(closingAzimuth_east)
    if(AutoShading_Azimuth_south.state == NULL)   AutoShading_Azimuth_south.postUpdate(closingAzimuth_south)
    if(AutoShading_Azimuth_west.state == NULL)    AutoShading_Azimuth_west.postUpdate(closingAzimuth_west)
    if(AutoShading_Temp_diff.state == NULL)       AutoShading_Temp_diff.postUpdate(temperatureHysteresis)
    if(AutoShading_Cloudiness_Hyst.state == NULL) AutoShading_Cloudiness_Hyst.postUpdate(cloudHysteresis)
    if(AutoShading_Rain_min.state == NULL)        AutoShading_Rain_min.postUpdate(minPrecip)
    
    if ((OW_localCurrentTemperature.state as Number).floatValue <= (AutoShading_Temp_min.state as Number)) {
            logInfo("rules", logPrefix + "Verschattung (Rollläden) wird nicht ausgeführt, Mindesttemperatur von ({}) wurde nicht erreicht. Aktuelle Temperatur ({}) ", AutoShading_Temp_min.state, OW_localCurrentTemperature.state)
            return;
    }

    if ((OW_localCurrentCloudiness.state as Number).floatValue > (AutoShading_Cloudiness_max.state as Number)) { 
            logInfo("rules", logPrefix + "Verschattung (Rollläden) wird nicht ausgeführt, Aktuelle Bewoelkung ({}) ueberschreitet den eingestellten Grenzwert von ({})", OW_localCurrentCloudiness.state, AutoShading_Cloudiness_max.state)
            return;
    }

    if ((Elevation.state as Number) <= (AutoShading_Elevation_end.state as Number)) {
            logInfo("rules", logPrefix + "Verschattung (Rollläden) wird nicht ausgeführt, Elevation für das Beenden der Verschattung ({}) ist groesser als aktuelle ({}) ", AutoShading_Elevation_end.state, Elevation.state)
            return;
    }

    //Azimuth ist größer als 181° (WEST)
    if (!isActiveWest) { 
        if ((Azimuth.state as Number).floatValue > (closingAzimuth_west)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden WEST")
            isActiveWest = shadingStart.apply(gRollladenWest)
            return;
        }      
    } else {
            logInfo("rules", logPrefix + "Verschattung für Rollläden WEST bereits aktiviert")
        } 

    //Azimuth ist größer als 111° (SÜD)
    if (!isActiveSouth) { 
        if ((Azimuth.state as Number).floatValue > (closingAzimuth_south) && (Azimuth.state as Number).floatValue < (closingAzimuth_west)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD")
            isActiveSouth = shadingStart.apply(gRollladenSouth)
            return;
        }
    } else {
            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD bereits aktiviert")
        }

    //Azimuth ist größer als 65° (OST)
    if (!isActiveEast) { 
        if ((Azimuth.state as Number).floatValue > (closingAzimuth_east) && (Azimuth.state as Number).floatValue < (closingAzimuth_south)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden OST")
            isActiveEast = shadingStart.apply(gRollladenEast)
        return;
        }
    } else {
            logInfo("rules", logPrefix + "Verschattung für Rollläden OST bereits aktiviert")
        }
end

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

rule "Markisenautomatik (Astro) - Verschattung beenden "
when
    Item IsNight changed from OFF to ON 
then
    if (isActiveBalkon) {
        logInfo("rules", logPrefix + "Verschattung Balkon beenden")
        gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toLocalDateTime().toString())
    }
end


rule "Rollladenautomatik / Markisenautomatik - 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 = (OW_localCurrentRainVolume.maximumSince(now.minusHours(1), "influxdb").state >= (minPrecip))
    logInfo("rules", logPrefix + "Rain " + isRainLastHour)
    
    val Boolean isCloudLastHour = (OW_localCurrentCloudiness.averageSince(now.minusHours(1), "influxdb")as Number >= (cloudHysteresis))
    logInfo("rules", logPrefix + "Clouds " + isCloudLastHour )
    
    val Boolean isTemperature = ((gTemperaturesOut.state as Number).intValue < (gTemperaturesOut.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.toLocalDateTime.minusDays(1).toString)
            AutoShadingM_End_last.postUpdate(now.toLocalDateTime.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 (!isActiveWest && !isActiveEast && !isActiveSouth && !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.toLocalDateTime().toString())
        shadingEnd.apply(gRollladen)
        return;
    }

    if ((gTemperaturesOut.state as Number).floatValue > (AutoShading_Temp_raise.state as Number)) {
        logInfo("rules", logPrefix + "Beende, aktuelle Temperatur ({})° ueberschreitet den eingestellten Grenzwert zum hochfahren von ({})°",gTemperaturesOut.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)
        gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toLocalDateTime().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 (isActiveBalkon) {
        logInfo("rules", logPrefix + "Verschattung Balkon beenden")
        gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toLocalDateTime().toString())
    }

    if (isActiveWest || isActiveEast || isActiveSouth ) {
        logInfo("rules", logPrefix + "Verschattung Rollläden beenden")
        shadingEnd.apply(gRollladen)
        return;
    }        
end


/* -------------  Verschattung Variablen zurücksetzen wenn kein automtisches hochfahren erfolgt --------------------
*/

rule "Verschattung Variablen zurücksetzen"
when
        Time cron "0 0 23 * * ?" or 
        Channel 'astro:sun:home:nauticDusk#event' triggered END 
then
        logInfo("rules", logPrefix + "Verschattung Variablen zurücksetzen")
        isActiveWest = false
        isActiveEast = false
        isActiveSouth = false
        isActiveBalkon = false
end

rule "Verschattung Variablen update"
when
        Item Shading_Var received command
then
        logInfo("rules", "Verschattung Variablen: " + receivedCommand)
        switch (receivedCommand) {
            case "queryState" : {
                        logInfo("rules", logPrefix + "Verschattung Variablen update")
                        if (isActiveWest) {
                            logInfo("rules", logPrefix + "Verschattung für Rollläden WEST aktiv")
                        } else { 
                            logInfo("rules", logPrefix + "Verschattung für Rollläden WEST inaktiv")
                        }
                        if (isActiveEast) {
                            logInfo("rules", logPrefix + "Verschattung für Rollläden OST aktiv")
                        } else { 
                            logInfo("rules", logPrefix + "Verschattung für Rollläden OST inaktiv")
                        }
                        if (isActiveSouth) {
                            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD aktiv")
                        } else { 
                            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD inaktiv")
                        }
                        if (isActiveBalkon) {
                            logInfo("rules", logPrefix + "Verschattung für Markise (Balkon) aktiv")
                        } else { 
                            logInfo("rules", logPrefix + "Verschattung für Markise (Balkon) inaktiv")
                        }
            }
            case "reset" : {
                    logInfo("rules", logPrefix + "Verschattung Variablen reset")
                    isActiveWest = false
                    isActiveEast = false
                    isActiveSouth = false
                    isActiveBalkon = false
                }
            case "set" : {
                    logInfo("rules", logPrefix + "Verschattung Variablen set")
                    if(AutoShading_Azimuth_east.state == NULL)    AutoShading_Azimuth_east.postUpdate(closingAzimuth_east)
                    if(AutoShading_Azimuth_south.state == NULL)   AutoShading_Azimuth_south.postUpdate(closingAzimuth_south)
                    if(AutoShading_Azimuth_west.state == NULL)    AutoShading_Azimuth_west.postUpdate(closingAzimuth_west)
                    if(AutoShading_Temp_diff.state == NULL)       AutoShading_Temp_diff.postUpdate(temperatureHysteresis)
                    if(AutoShading_Cloudiness_Hyst.state == NULL) AutoShading_Cloudiness_Hyst.postUpdate(cloudHysteresis)
                    if(AutoShading_Rain_min.state == NULL)        AutoShading_Rain_min.postUpdate(minPrecip)
                }
        }
        Shading_Var.postUpdate(NULL) 
end
CYA
Cyrelian

salexes
Beiträge: 10
Registriert: 6. Jun 2021 14:44

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

Beitrag von salexes »

Cyrelian hat geschrieben: 7. Jun 2021 09:28 Hi salexes und Hoggle,

ja, das ist "fast" der "letzte" Stand. Meine rule läuft einwandfrei unter OH3. Das was ich angepasst habe war das:

- Versenden via Pushover (Änderung im Binding)
- "Zeitumstellung" Joda Time / Java time

Code: Alles auswählen

postUpdate(now.toString())
ersetzt durch

Code: Alles auswählen

postUpdate(now.toLocalDateTime().toString())
An der Stelle hatte er mir nämlich nen Fehler geworfen.


Hier die ganze Rule:

Code: Alles auswählen

import java.util.Map

var Boolean message = true
val actions = getActions("pushover", "pushover:pushover-account:openHAB")
var receipt = null

val String filename = "shutter.rules"

// Values und Variablen für die Verschattung

//val Number blindClosed = 100
//val Number blindOpen = 0
//val Number blindTranslucent = 35

var Number closingAzimuth_west = 181
var Number closingAzimuth_south = 111
var Number closingAzimuth_east = 65

var Number closingCloudiness = 20   
val Number cloudHysteresis = 45         //die Mindestbewölkung in der letzten Stunde
var Number openingTemperature = 22
var Number closingTemperature = 24
val Number temperatureHysteresis = 4    //Temperaturabfall von min. 4 Grad in der letzten Stunde
val Number minPrecip = 5                //die Mindestmenge an Regen in der letzten Stunde

var Boolean isActiveWest = false
var Boolean isActiveEast = false
var Boolean isActiveSouth = false
var Boolean isActiveBalkon = false

val String logPrefix = "Rollläden - "

/* -------------  Verschattung FUNKTIONEN --------------------
*/
//-------------  Verschattung starten --------------------

val shadingStart = [GroupItem shutter |

        val String logPrefix = "Verschattung aktivieren - "

                val Map<String, Number> targetHights = newHashMap ( 
                "KuecheRollladenTuer" -> 58,
                "SchlafzimmerRollladenTuer" -> 100,
                "BadezimmerRollladen" -> 55,
                "WohnzimmerRollladenEsstisch" -> 65,
                "WohnzimmerRollladenTuer" -> 68,
                "WohnzimmerRollladenBalkon" -> 100,
                "GaesteWCRollladen_Slider" -> 100,
                "BueroRollladen" -> 100
                )
                // Rollladen werden geschlossen
                logInfo("rules", logPrefix + "Grenzwert wurden erreicht, Rollladen werden geschlossen")

                shutter.allMembers.forEach[ blind |
                    if ((blind.state as Number) < targetHights.get(blind.name.toString()).intValue) {
                        logInfo("rules", logPrefix + "Fahre Rollladen (" + blind.name.toString() + ") auf (" + targetHights.get(blind.name.toString()).intValue + ") %" )
                        blind.sendCommand(targetHights.get(blind.name.toString()).intValue)
                        //Pushnachricht versenden
                        val actions = getActions("pushover", "pushover:pushover-account:openHAB")
                        var receipt = actions.sendMessage("Verschattung für " + blind.name.toString + " aktiviert, schließen auf " + targetHights.get(blind.name.toString()).toString() + " %", "openHAB")
                        //sendPushoverMessage(pushoverBuilder("Verschattung für " + blind.name.toString + " aktiviert, schließen auf " + targetHights.get(blind.name.toString()).toString() + " %"))
                    } else {
                        logInfo("rules", logPrefix + "Rollladen ist bereits weiter geschlossen (" + blind.state.toString() + "%) als er geschlossen werden sollte und wird daher ignoriert")
                    }
                ]
                AutoShading_Start_last.postUpdate(now.toLocalDateTime().toString())
    return true;
]

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

val shadingEnd = [GroupItem shutter |

        val String logPrefix = "Verschattung deaktivieren - "

                    val Map<String, Number> targetHights = newHashMap ( 
                    "KuecheRollladenTuer" -> 58,
                    "SchlafzimmerRollladenTuer" -> 100,
                    "BadezimmerRollladen" -> 55,
                    "WohnzimmerRollladenEsstisch" -> 65,
                    "WohnzimmerRollladenTuer" -> 68,
                    "WohnzimmerRollladenBalkon" -> 100,
                    "GaesteWCRollladen_Slider" -> 100,
                    "BueroRollladen" -> 100
                     )
                    // 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                        
                            val actions = getActions("pushover", "pushover:pushover-account:openHAB")
                            var receipt = actions.sendMessage("Verschattung für (" + blind.name.toString() + ") beendet, Rollladen wird geöffnet.", "openHAB")                            
                            //sendPushoverMessage(pushoverBuilder("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.toLocalDateTime().toString())
                    
                    //Variablen zurücksetzen
                    isActiveWest = false
                    isActiveEast = false
                    isActiveSouth = false
    return true;
]

/* -------------  Verschattung RULES --------------------
*/
//-------------  Verschattung starten --------------------

rule "Rollladenautomatik / Markisenautomatik - Verschattung starten"
when
    Item Azimuth changed
then
    val String logPrefix = "Verschattung aktivieren - "
    
    //Prüfung auf: Verschattungsautomatik an / ob es Tag ist / Jahreszeit
    if (AutoShading.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;
    }

    if (AutoShading_Start_last.state == NULL) {
        logInfo("rules", logPrefix + "Letzte Ausführung unbekannt, Belegung mit Initialwert (-1 Tag)")
        AutoShading_Start_last.postUpdate(now.toLocalDateTime.minusDays(1).toString)
    }

    //Markisenautomatik
        if (!isActiveBalkon) {
        //Azimuth ist größer als 181° (WEST)
            if ((Azimuth.state as Number) > (closingAzimuth_west)) {
                if ((BalkonTemperatursensor_Temperature.state as Number).floatValue > (AutoShading_Temp_min.state as Number) && (OW_localCurrentCloudiness.state as Number).floatValue < (AutoShading_Cloudiness_max.state as Number)) { 
                    logInfo("rules", logPrefix + "Markise Balkon")
                    gBalkonRollladen.sendCommand(UP)
                    AutoShadingM_Start_last.postUpdate(now.toLocalDateTime().toString())
                    isActiveBalkon = true;      
                }
            }    
        } else {
            logInfo("rules", logPrefix + "Verschattung für Balkon bereits aktiviert")
        }

    //Rollladenautomatik
       if (gPresence.state != OFF) {                                                                           
        logInfo("rules", logPrefix + "Verschattung (Rollläden) wird nicht ausgeführt, Anwesenheit erkannt.")
        return;
    }
    
    // Items für Sitemap füllen
    if(AutoShading_Azimuth_east.state == NULL)    AutoShading_Azimuth_east.postUpdate(closingAzimuth_east)
    if(AutoShading_Azimuth_south.state == NULL)   AutoShading_Azimuth_south.postUpdate(closingAzimuth_south)
    if(AutoShading_Azimuth_west.state == NULL)    AutoShading_Azimuth_west.postUpdate(closingAzimuth_west)
    if(AutoShading_Temp_diff.state == NULL)       AutoShading_Temp_diff.postUpdate(temperatureHysteresis)
    if(AutoShading_Cloudiness_Hyst.state == NULL) AutoShading_Cloudiness_Hyst.postUpdate(cloudHysteresis)
    if(AutoShading_Rain_min.state == NULL)        AutoShading_Rain_min.postUpdate(minPrecip)
    
    if ((OW_localCurrentTemperature.state as Number).floatValue <= (AutoShading_Temp_min.state as Number)) {
            logInfo("rules", logPrefix + "Verschattung (Rollläden) wird nicht ausgeführt, Mindesttemperatur von ({}) wurde nicht erreicht. Aktuelle Temperatur ({}) ", AutoShading_Temp_min.state, OW_localCurrentTemperature.state)
            return;
    }

    if ((OW_localCurrentCloudiness.state as Number).floatValue > (AutoShading_Cloudiness_max.state as Number)) { 
            logInfo("rules", logPrefix + "Verschattung (Rollläden) wird nicht ausgeführt, Aktuelle Bewoelkung ({}) ueberschreitet den eingestellten Grenzwert von ({})", OW_localCurrentCloudiness.state, AutoShading_Cloudiness_max.state)
            return;
    }

    if ((Elevation.state as Number) <= (AutoShading_Elevation_end.state as Number)) {
            logInfo("rules", logPrefix + "Verschattung (Rollläden) wird nicht ausgeführt, Elevation für das Beenden der Verschattung ({}) ist groesser als aktuelle ({}) ", AutoShading_Elevation_end.state, Elevation.state)
            return;
    }

    //Azimuth ist größer als 181° (WEST)
    if (!isActiveWest) { 
        if ((Azimuth.state as Number).floatValue > (closingAzimuth_west)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden WEST")
            isActiveWest = shadingStart.apply(gRollladenWest)
            return;
        }      
    } else {
            logInfo("rules", logPrefix + "Verschattung für Rollläden WEST bereits aktiviert")
        } 

    //Azimuth ist größer als 111° (SÜD)
    if (!isActiveSouth) { 
        if ((Azimuth.state as Number).floatValue > (closingAzimuth_south) && (Azimuth.state as Number).floatValue < (closingAzimuth_west)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD")
            isActiveSouth = shadingStart.apply(gRollladenSouth)
            return;
        }
    } else {
            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD bereits aktiviert")
        }

    //Azimuth ist größer als 65° (OST)
    if (!isActiveEast) { 
        if ((Azimuth.state as Number).floatValue > (closingAzimuth_east) && (Azimuth.state as Number).floatValue < (closingAzimuth_south)) {
            logInfo("rules", logPrefix + "Verschattung für Rollläden OST")
            isActiveEast = shadingStart.apply(gRollladenEast)
        return;
        }
    } else {
            logInfo("rules", logPrefix + "Verschattung für Rollläden OST bereits aktiviert")
        }
end

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

rule "Markisenautomatik (Astro) - Verschattung beenden "
when
    Item IsNight changed from OFF to ON 
then
    if (isActiveBalkon) {
        logInfo("rules", logPrefix + "Verschattung Balkon beenden")
        gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toLocalDateTime().toString())
    }
end


rule "Rollladenautomatik / Markisenautomatik - 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 = (OW_localCurrentRainVolume.maximumSince(now.minusHours(1), "influxdb").state >= (minPrecip))
    logInfo("rules", logPrefix + "Rain " + isRainLastHour)
    
    val Boolean isCloudLastHour = (OW_localCurrentCloudiness.averageSince(now.minusHours(1), "influxdb")as Number >= (cloudHysteresis))
    logInfo("rules", logPrefix + "Clouds " + isCloudLastHour )
    
    val Boolean isTemperature = ((gTemperaturesOut.state as Number).intValue < (gTemperaturesOut.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.toLocalDateTime.minusDays(1).toString)
            AutoShadingM_End_last.postUpdate(now.toLocalDateTime.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 (!isActiveWest && !isActiveEast && !isActiveSouth && !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.toLocalDateTime().toString())
        shadingEnd.apply(gRollladen)
        return;
    }

    if ((gTemperaturesOut.state as Number).floatValue > (AutoShading_Temp_raise.state as Number)) {
        logInfo("rules", logPrefix + "Beende, aktuelle Temperatur ({})° ueberschreitet den eingestellten Grenzwert zum hochfahren von ({})°",gTemperaturesOut.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)
        gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toLocalDateTime().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 (isActiveBalkon) {
        logInfo("rules", logPrefix + "Verschattung Balkon beenden")
        gBalkonRollladen.sendCommand(DOWN)
        AutoShadingM_End_last.postUpdate(now.toLocalDateTime().toString())
    }

    if (isActiveWest || isActiveEast || isActiveSouth ) {
        logInfo("rules", logPrefix + "Verschattung Rollläden beenden")
        shadingEnd.apply(gRollladen)
        return;
    }        
end


/* -------------  Verschattung Variablen zurücksetzen wenn kein automtisches hochfahren erfolgt --------------------
*/

rule "Verschattung Variablen zurücksetzen"
when
        Time cron "0 0 23 * * ?" or 
        Channel 'astro:sun:home:nauticDusk#event' triggered END 
then
        logInfo("rules", logPrefix + "Verschattung Variablen zurücksetzen")
        isActiveWest = false
        isActiveEast = false
        isActiveSouth = false
        isActiveBalkon = false
end

rule "Verschattung Variablen update"
when
        Item Shading_Var received command
then
        logInfo("rules", "Verschattung Variablen: " + receivedCommand)
        switch (receivedCommand) {
            case "queryState" : {
                        logInfo("rules", logPrefix + "Verschattung Variablen update")
                        if (isActiveWest) {
                            logInfo("rules", logPrefix + "Verschattung für Rollläden WEST aktiv")
                        } else { 
                            logInfo("rules", logPrefix + "Verschattung für Rollläden WEST inaktiv")
                        }
                        if (isActiveEast) {
                            logInfo("rules", logPrefix + "Verschattung für Rollläden OST aktiv")
                        } else { 
                            logInfo("rules", logPrefix + "Verschattung für Rollläden OST inaktiv")
                        }
                        if (isActiveSouth) {
                            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD aktiv")
                        } else { 
                            logInfo("rules", logPrefix + "Verschattung für Rollläden SÜD inaktiv")
                        }
                        if (isActiveBalkon) {
                            logInfo("rules", logPrefix + "Verschattung für Markise (Balkon) aktiv")
                        } else { 
                            logInfo("rules", logPrefix + "Verschattung für Markise (Balkon) inaktiv")
                        }
            }
            case "reset" : {
                    logInfo("rules", logPrefix + "Verschattung Variablen reset")
                    isActiveWest = false
                    isActiveEast = false
                    isActiveSouth = false
                    isActiveBalkon = false
                }
            case "set" : {
                    logInfo("rules", logPrefix + "Verschattung Variablen set")
                    if(AutoShading_Azimuth_east.state == NULL)    AutoShading_Azimuth_east.postUpdate(closingAzimuth_east)
                    if(AutoShading_Azimuth_south.state == NULL)   AutoShading_Azimuth_south.postUpdate(closingAzimuth_south)
                    if(AutoShading_Azimuth_west.state == NULL)    AutoShading_Azimuth_west.postUpdate(closingAzimuth_west)
                    if(AutoShading_Temp_diff.state == NULL)       AutoShading_Temp_diff.postUpdate(temperatureHysteresis)
                    if(AutoShading_Cloudiness_Hyst.state == NULL) AutoShading_Cloudiness_Hyst.postUpdate(cloudHysteresis)
                    if(AutoShading_Rain_min.state == NULL)        AutoShading_Rain_min.postUpdate(minPrecip)
                }
        }
        Shading_Var.postUpdate(NULL) 
end
CYA
Cyrelian

Genial danke für deine schnelle Antwort, werde die Rule gleich mal ausprobieren!

Eine Frage habe ich noch, ich will diese Lösung für meinen schon etwas älteren Vater einrichten, sodass er nicht immer alles händisch machen muss (er beschwert sich oft im Sommer das die Sonne das ganze Haus so aufheizt).
Ich denke dafür ist die Regel perfekt geeignet, nur ist es bei meinem Vater so das ihm sein schlaf heilig ist und daher zwischen 1 Uhr nachts und 8:30 morgens am besten keine lauten Rolladen aktiv sein sollten, gibt es die Möglichkeit das man vorausschauend ggf. schon um 1 Uhr nachts die Rolladen basierend auf den Voraussagen für den tag ggf. schon herunter zufahren, sodass wenn es morgens z.b. um 6 Uhr die Sonne eigentlich voll in den Raum scheinen würde die Rolladen schon unten wären.

Gruß,
salexes

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

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

Beitrag von PeterA »

hi salexes,

die betreffenden Rollladen zu einer bestimmten Uhrzeit schliessen zu lassen ist ja nun einfach.
Da würde ich eine via Timecron getriggerte Rule erstellen welche dann zur gewünschten Uhrzeit die gewünschten Rollladen schliessen lässt.

Gruß

Peter
- OpenHab 2.4
#PWRUP

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 salexes,

da würden mir mehrere Ansätze einfallen.

Meine Rule fängt schon mal den Status "Nacht" ab.

Code: Alles auswählen

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

Code: Alles auswählen

rule "IsDay"
when
    Channel 'astro:sun:home:daylight#event' triggered START 
then
    IsDay.sendCommand(ON)
    IsTwilight.sendCommand(OFF)
    IsNight.sendCommand(OFF)
end

rule "IsTwilight"
when
    Channel 'astro:sun:home:set#event' triggered END
then
    IsDay.sendCommand(OFF)
    IsTwilight.sendCommand(ON)
    IsNight.sendCommand(OFF)
end

rule "IsNight"
when
    Channel 'astro:sun:home:civilDusk#event' triggered END
then
    IsDay.sendCommand(OFF)
    IsTwilight.sendCommand(OFF)
    IsNight.sendCommand(ON)
end
Hier kannst du mit den verschiedenen Events schonmal die Zeit relativ gut eingrenzen.

Via https://www.sonnenverlauf.de/ würde ich das ganze mal simulieren. Also den Sonnenstand.

Was den Forecast für den nächsten Tag/Morgen angeht sind die Daten relativ ungenau. Darauf würde ich mich nicht verlassen. Dann am besten die OST Seite einfach am Vorabend schließen.

CU
Cyrelian

Quautiputzli
Beiträge: 317
Registriert: 29. Okt 2020 19:53
Answers: 2

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

Beitrag von Quautiputzli »

@Cyrelian

Ich würde auch gerne deine Rule für meine Rolläden benutzen. Ich arbeite mich gerade ein, und möchte das ganze natürlich auch verstehen und muss es natürlich etwas anpassen.

Dazu hätte ich ein paar Fragen:
- wie heißen denn deine Rollo Items?
- wie und in welche Gruppen sind diese bei dir eingeteilt?
- Wofür gibt es zusätzlich zu dem Iterm "AutoShading" noch das Item "ManualShading"
- Das mit der Markise finde ich auch interessant. Ist die bei dir auf der Westseite? Was machst du da anders als bei den Rollos?

Sorry für die vielen Fragen.
Danke und Servus
Servus

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,

also......
- wie heißen denn deine Rollo Items?

Code: Alles auswählen

Rollershutter	BueroRollladen	"Rollladen (Büro) [(%d %%) zu]"	<rollershutter>	(gBueroRollladenFenster,gBueroRollladen,gRollladenEast)	["Blinds"]	{channel="homematic:HM-LC-Bl1-FM:HMIPCCU3RM:MEQXXXXX:1#LEVEL"}
- wie und in welche Gruppen sind diese bei dir eingeteilt?

Code: Alles auswählen

Group:Rollershutter    gRollladen         "Alle Rollläden"                    <rollershutter>    (gWohnung)
Group:Rollershutter     gRollladenEast     "Rollläden (Ost)"          <rollershutter>    (gRollladen)
Group:Rollershutter     gRollladenSouth    "Rollläden (Süd)"         <rollershutter>    (gRollladen)
Group:Rollershutter     gRollladenWest     "Rollläden (West)"        <rollershutter>    (gRollladen)
- Wofür gibt es zusätzlich zu dem Iterm "AutoShading" noch das Item "ManualShading"
Der AutoShading ist der Haupt-Switch. Ist der AUS, findet keine Beschattung statt.

Code: Alles auswählen

    //Prüfung auf: Verschattungsautomatik an / ob es Tag ist / Jahreszeit
    if (AutoShading.state != ON) {                                                                  
        logInfo("rules", logPrefix + "Verschattung wird nicht ausgeführt, da deaktiviert.")
        return;
    }
Mit dem ManualShading fahre ich einfach nur die Rollläden in eine bestimmt Postion.

Code: Alles auswählen

rule "Manuelle Verschattung ein / aus"
when
	Item ManualShading received command	ON
then
		logInfo("rules", "Manuelle Verschattung ein")
        WohnzimmerRollladenEsstisch.sendCommand(60)
        WohnzimmerRollladenTuer.sendCommand(60)
        WohnzimmerRollladenBalkon.sendCommand(60)
        BadezimmerRollladen.sendCommand(55)
        SchlafzimmerRollladenTuer.sendCommand(DOWN)
        GaesteWCRollladen_Slider.sendCommand(100)
        KuecheRollladenTuer.sendCommand(58)
        BueroRollladen.sendCommand(DOWN)
end
- Das mit der Markise finde ich auch interessant. Ist die bei dir auf der Westseite? Was machst du da anders als bei den Rollos?
ja, diese ist auf der Westseite. Im Gegensatz zur Rollladenautomatik, fährt die Markise auch bei erkannter Anwesenheit raus.

Fall Du noch Fragen hast...einfach melden ;-)

CU
Cyrelian

Antworten