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
HansDampf
Beiträge: 34
Registriert: 23. Jul 2020 15:01
Answers: 1

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

Beitrag von HansDampf »

udo1toni hat geschrieben: 11. Aug 2021 17:07 Steht ja direkt in englisch da. influxdb speichert die Einheit mit ab. Die Meldung “Could not cast 13.32 °C…” besagt genau das. Der Wert ist eben kein DecimalType, sondern ein QuantityType. Number ist der Überbegriff. Im ersten Teil des Vergleichs verwendest Du die korrekte Form ( (… as Number).floatValue) und genau so muss das auch für den aus der Datenbank extrahierten Wert eingegeben werden.


Gesendet von iPad mit Tapatalk
Danke Dir. Klappt nun.

Ein Fehler habe ich nun noch und ich komme nicht drauf:

Code: Alles auswählen

                        if (blind === null) {
                                logInfo("shutterlambda", "Group member returned null")
                            } else {
                                logInfo("shutterlambda", "processing Group member " + blind.name)}
                       
                       if ((blind.state as Number) == targetHights.get(blind.name.toString()).intValue) {
                            logInfo("rules", logPrefix + "Oeffne Rollladen: " + blind.name.toString())
                            blind.sendCommand(UP)

Code: Alles auswählen

2021-08-17 20:42:51.671 [INFO ] [nhab.core.model.script.shutterlambda] - processing Group member EG_Windfang_Spots
2021-08-17 20:42:51.671 [ERROR] [internal.handler.ScriptActionHandler] - Script execution of rule with UID 'shutter-2' failed: Could not cast OFF to java.lang.Number; line 123, column 29, length 21 in shutter
Der Error sagt das bei "(blind.state as Number) == targetHights.get(blind.name.toString()).intValue" die Spots in der Lambda Funktion sind. Was irgendwie nicht sein kann, weil die nirgends angegeben sind. Habe auch die Groups gecheckt ...

Nochmal die ganze Rule:

Code: Alles auswählen

val shadingEnd = [GroupItem shutter |

        val String logPrefix = "Verschattung deaktivieren - "

                    val Map<String, Number> targetHights = newHashMap ( 
                        "EG_Arbeitszimmer_Ost" -> 75,
                        "EG_Arbeitszimmer_Sued" -> 75,
                        "EG_Jalousie_Essen_Tuere_West" -> 100,
                        "EG_Jalousie_Schiebetuere_rechts_Sued" -> 100,
                        "EG_Jalousie_Schiebetuere_Sued" -> 100,
                        //"EG_Jalousie_Essen_Tuere_West_Lamellen"-> 75,
                        //"EG_Jalousie_Schiebetuere_rechts_Sued_Lamellen"-> 75,
                        //"EG_Jalousie_Schiebetuere_Sued_Lamellen"-> 75, 
                        "EG_Fenster_West" -> 75,
                        "EG_Tuere_Kueche" -> 75,
                        "OG_Ankleide" -> 75,
                        "OG_Elternschlafen_West" -> 75,
                        "OG_Elternschlafen_Sued" -> 75,
                        "OG_Kinderbad" -> 75,
                        "OG_Amelie_Sued" -> 75,
                        "OG_Amelie_Ost" -> 75,
                        "OG_Emil_Ost" -> 75,
                        "KG_Hobbyraum_Abstellraum" -> 75
                     )
                    // Rollladen öffnen
                    logInfo("rules", logPrefix + "Rollladen werden geoeffnet")

                    shutter.allMembers.forEach[ blind |

                        if (blind === null) {
                                logInfo("shutterlambda", "Group member returned null")
                            } else {
                                logInfo("shutterlambda", "processing Group member " + blind.name)}
                       
                       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."))
                        } 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(ZonedDateTime.now.toLocalDateTime.toString())
                    

                    //Variablen zurücksetzen
                    isActiveWest = false
                    isActiveEast = false
                    isActiveSouth = false
    return true;
]

Backbe01
Beiträge: 107
Registriert: 19. Jul 2019 21:04

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

Beitrag von Backbe01 »

Es wird Sommer, ich traue mich ein zweites mal an die Rule von @Cyrelian.

Ich habe die Items, Sitemap und die Rule eingebaut und angepasst. Eine Frage stellt sich mir noch zu diesem Baustein:

Code: Alles auswählen

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
                        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")
                    }
                ]
Ist "shutter" die Gruppe in der alle Rollläden sind? Wenn ja, soll dann das Dimmer- oder Rollershutteritem in dieser Gruppe sein (habe shelly 2.5)?
Openhab3 mit Hue, Harmony, Tahoma, Wemos D1 mini über MQTT, Chromecast, Hyperion, FB tr064, AVM Fritz!, Wifi LED

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

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

Beitrag von udo1toni »

Ja, shutter sind alle Rollershutter Items als Gruppe zusammengefasst.

Rollläden werden grundsätzlich über Rollershutter Items gesteuert. Das sollte unabhängig von der verwendeten Hardware sein.
Da man bei Jalousien zusätzlich den Anstellwinkel der Lamellen steuern kann, wird hierfür gerne ein DImmer Item verwendet. Dafür ist die Rule aber nicht ausgelegt (es müssten dann jeweils zwei Items gesteuert werden, und das zweite Item dürfte erst dann gesteuert werden, wenn die Jalousie ihre Sollposition erreicht hat).
openHAB2.5.12 in einem Debian-Container (Proxmox, LXC)

Backbe01
Beiträge: 107
Registriert: 19. Jul 2019 21:04

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

Beitrag von Backbe01 »

Danke für die schnelle Antwort! Habe ich mir fast gedacht, das mit der Gruppe. Die Items musste ich ändern. Für mich war das Dimmer-Item immer verständlicher: 100% = max. Helligkeit = Rollladen offen... Naja, muss ich mich eben umgewöhnen.

Leider habe ich nach aktivieren der Rule folgende Fehlermeldung erhalten:

Code: Alles auswählen

2022-05-05 11:41:33.032 [WARN ] [b.core.model.script.actions.BusEvent] - Cannot convert '2022-05-04T11:41:33.012957+02:00[Europe/Berlin]' to a state type which item 'AutoShading_Start_last' accepts: [DateTimeType, UnDefType].
Dies bezieht sich wohl auf diesen Code-Teil:

Code: Alles auswählen

if (AutoShading_Start_last.state == NULL) {
        logInfo("rules", logPrefix + "Letzte Ausführung unbekannt, Belegung mit Initialwert (-1 Tag)")
        AutoShading_Start_last.postUpdate(now.minusDays(1).toString())
    }
An welchem Rädchen müsste ich denn drehen??? :D

Noch eine Verständnisfrage: Die Rule läuft, alle Parameter sollten eine Verschattung aktivieren. Aber es hängt an diesem Argument:

Code: Alles auswählen

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;
Irgendwie verstehe ich die Zeile nicht! Die Elevation muss doch kleiner sein als die End-Elevation? Das ist sie auch! Kann es sein, dass es hier Probleme mit den Einheiten gibt? Muss hier noch ein .floatValue eingebaut werden?

Meine Ausgabe sieht so aus:

Code: Alles auswählen

2022-05-05 12:31:33.020 [INFO ] [org.openhab.core.model.script.rules ] - Verschattung aktivieren - Verschattung (Rollläden) wird nicht ausgeführt, Elevation für das Beenden der Verschattung (10) ist groesser als aktuelle (56.78802259140557 °)
Openhab3 mit Hue, Harmony, Tahoma, Wemos D1 mini über MQTT, Chromecast, Hyperion, FB tr064, AVM Fritz!, Wifi LED

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

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

Beitrag von udo1toni »

Backbe01 hat geschrieben: 5. Mai 2022 11:49Danke für die schnelle Antwort! Habe ich mir fast gedacht, das mit der Gruppe. Die Items musste ich ändern. Für mich war das Dimmer-Item immer verständlicher: 100% = max. Helligkeit = Rollladen offen... Naja, muss ich mich eben umgewöhnen.
Das ist aber kompletter Quatsch.
Ein Rollladen ist das exakte (!) Gegenteil eines Dimmers. Wenn der Dimmer aus ist, und es ist hell im Zimmer (sagen wir mal "sonnendurchflutet"), dann kannst Du mit dem Dimmer die Helligkeit nicht verringern. Maximal kannst Du die Helligkeit noch erhöhen. Wenn der Dimmer zu 0% wirkt, ist es im Zimmer halt so hell, wie es gerade ist.
Wenn es hingegen Nacht ist, kannst Du es mit einem Rollladen im Zimmer höchstens noch dunkler machen, aber nicht heller. Ist der Rollladen offen, ist es im Zimmer halt so dunkel, wie es ist.
Oder anders ausgedrückt: Ein Rollladen ist im vollständig geschlossenen Zustand zu 100% aktiv. Im vollständig offenen Zustand ist er zu 0% aktiv.

Deshalb ist auch jegliche Definition eines Rollladens, der in der offenen Position als 100% angezeigt wird, schlicht falsch, da gibt es nichts zu rütteln :)
knx als eines der ältesten Protokolle in der Hausautomation sieht nicht vor, den Rollladen anders abzubilden. knx (ursprünglich mal EIB) wurde maßgeblich von deutschen Ingenieuren mitgestaltet, zu einem Zeitpunkt, als man solche Dinge noch logisch angegangen ist... :)
Leider hat auch in diesem Bereich "Meinung" die Wissenschaft verdrängt.

Zur anderen Frage müsste ich Dich an @Cyrelain verweisen, da ich mich nie eingehend mit dem Code beschäftigt habe (meine Läden fahren anders).
openHAB2.5.12 in einem Debian-Container (Proxmox, LXC)

Backbe01
Beiträge: 107
Registriert: 19. Jul 2019 21:04

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

Beitrag von Backbe01 »

Das postUpdate Problem ist gelöst. Habe ich beim durchlesen des Threads überlesen...
eagledata hat geschrieben: 8. Apr 2021 11:04
HansDampf hat geschrieben: 30. Mär 2021 15:48 hat schon jemand auf OH3 umgestellt und bekommt den selben Fehler?

Vermutlich zielt es auf folgenden Code:

Code: Alles auswählen

AutoShading_Start_last.postUpdate(now.toString()
oder 
AutoShading_Start_last.postUpdate(now.minusDays(1).toString()
Ich hab auch schon geupdated und hatte das selbe Problem.
Ich hab es auf folgende Variante umgestellt und es funktioniert:

Code: Alles auswählen

AutoShading_End_last.postUpdate(new DateTimeType())
bzw. wenn es mit dem minusDay ist:

Code: Alles auswählen

AutoShading_Start_last.postUpdate(new DateTimeType(now.minusDays(1)))
Für das Elevation Item habe ich jetzt zum testen eines ohne Einheit erstellt (nur Number ohne Angle). Kann es leider erst morgen testen...

Zu den Rollershutter... :lol: Für mich war es eben immer genau anders herum logisch! Aber ja, wenn man sieht was ein Rollladen machen soll, dann ist es vedunkeln. Und das macht er bei 100% am meisten... Jetzt muss ich dies nur noch meiner Familie beibringen.. :lol:
Openhab3 mit Hue, Harmony, Tahoma, Wemos D1 mini über MQTT, Chromecast, Hyperion, FB tr064, AVM Fritz!, Wifi LED

Backbe01
Beiträge: 107
Registriert: 19. Jul 2019 21:04

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

Beitrag von Backbe01 »

Edit: Erledigt! Problem im Thread gefunden...
Openhab3 mit Hue, Harmony, Tahoma, Wemos D1 mini über MQTT, Chromecast, Hyperion, FB tr064, AVM Fritz!, Wifi LED

dcridaz
Beiträge: 2
Registriert: 20. Jun 2022 16:16

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

Beitrag von dcridaz »

Hallo Zusammen,
bisher war ich nur stiller "Mitleser" und habe einige Regeln und Ideen für mein Smarthome gewinnen können.
An dieser Stelle erstmal ein recht herzliches Dankeschön!
Nun hänge ich selbst an einem "Problem" mit meiner Markise im Wintergarten.
Die Problemstellung ist folgende:
Wenn die Markise ausgefahren ist kann die Tür in den Garten nur bis zur hälfte geöffnet werden, da diese in das Gelenk der Markise
anstösst.
Wird nun grade bei diesen Temperaturen die Tür im maximal möglichen Anstellwinkel geöffnet gelassen und jemand betätigt den Schalter zum einfahren
der Markise, fährt diese voll in die Tür und (zum Glück) löst nur der Motorschutzschalter der Markise aus und ich kann mit großen Kraftakt die Tür, welche unter extremer Spannung steht, wieder "befreien". Baulich ungünstigt gemacht, aber nun will ich eine Abhilfe schaffen.
Meine Idee war folgende:

Wenn die Markise ausgefahren ist und die Tür wurde geöffnet, dann darf die Markise trotz betätigung des Schalters nicht fahren.
Eine optionale Sprachausgabe auf der Alexa als Hinweis, warum grade nichts passiert wäre hilfreich, ist aber kein muss.
Allerdings wenn der Wert der Markise <50 ist, darf diese, trotz geöffneter Tür einfahren (weil diese über den Punkt des "einklemmens" hinausgefahren ist).

Verbaut ist an der Markise ein kalibrierter Shelly 2.5 und an der Tür ein Aqara Door-/Window- sensor.

Dies in einer Regel darzustellen überfordert mich total.

Einen Ansatz habe ich mal so versucht:

Code: Alles auswählen

Rule „Wintergarten Markise Nothalt“

When 
	Item EG-WIGA-Markise_SW1 changed to ON // Schalter Markise Ausfahren wurde betätigt
Then 
postUpdate(EG-WIGA-Markise_SW1, ON)
if(EG-WIGA-TUER.state == OPEN) 
{
 [| sendCommand(EG-WIGA-Markise_, Stop) ] 
}
end
Nun noch die Freigabe zu erteilen, wenn die Markise <50 ist und dann fahren darf, kriege ich nicht unter. Mal abgesehen davon, funtkioniert diese Regel leider nicht :-(


Vielleicht kann mir jemand von Euch helfen.
Openhab3 auf einem Raspberry-PI4, Wemos D1 mini über MQTT, AVM Fritz!, Wifi LED, Diverse Shelly Produkte, Gardena Smart Produkte, Reolink-IP Cams, Wansview-IP Cams, Foscam-IP Cams.

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

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

Beitrag von udo1toni »

Ich gehe davon aus, dass der Taster für die Markise diese direkt ansteuert, nicht auf dem Umweg über openHAB?

Also, die Rule funktioniert unter anderem nicht, weil Du Schlüsselworte falsch geschrieben hast :)
rule wird klein geschrieben, ebenso wie when und then. STOP wird komplett in Großbuchstaben geschrieben.

Grundsätzlich werden alle Schlüsselworte in CamelCase geschrieben (also statt die Worte einfach zusammenzuhängen werden die eigentlichen Wortanfänge mit Großbuchstaben gekennzeichnet) und beginnen mit einem Kleinbuchstaben. Ausnahme hiervon sind z.B. Datentypen wie Number, Switch, String, DecimalType, OnOffType. Und die Status eines Items werden komplett in Großbuchstaben geschrieben, es sei denn, es handelt sich dabei um keinen nativen Datentyp sondern um einen String, dann wird der Status so geschrieben, wie vom Addon/Binding/externer Software vorgegeben.
Native Datentypen sind z.B. OnOffType, OpenClosedType, IncreaseDecreaseType und UpDownType, wobei beide Letztere natürlich nur als Befehle verwendet werden, aber auch da gilt: durchgehend Großbuchstaben, also ON und OFF, OPEN und CLOSED, INCREASE und DECREASE, UP, DOWN und STOP.

Semantische Anführungszeichen („unten und oben“) gibt es in der Rule Engine auch nicht (das kann allerdings auch eine fehlerhafte Übernahme per Copy&Paste sein). Stattdessen immer nur das " verwenden (oder auch das ', wenn man ein " mit einschließen muss - sollte man aber nur tun, wenn es sich nicht vermeiden lässt).

Das postUpdate ist an der Stelle sinnlos, postUpdate setzt den Status eines Items (ohne irgendwelche Befehle zu senden). Die Rule triggert aber aufgrund des Status, so dass der Status immer schon auf ON steht.
Dann möchte ich immer wieder betonen, dass es besser ist, die Methode statt der Action zu verwenden, das heißt:

Besser EG-WIGA-Markise_SW1.postUpdate(ON) als postUpdate(EG-WIGA-Markise_SW1, ON) schreiben.

So sähe die bereinigte Rule aus:

Code: Alles auswählen

rule "Wintergarten Markise Nothalt"
when
    Item EG-WIGA-Markise_SW1 changed to ON
then
    if(EG-WIGA-TUER.state == OPEN)
        EG-WIGA-Markise_.sendCommand(STOP)
end
Jetzt fällt mir aber sofort die nächste Seltsamkeit auf: Endet der Name des Rollershutter Items tatsächlich mit einem Unterstrich? Mach das bitte nicht. Es mag sein, dass es nicht zu einem Fehler kommt, aber es ist absolut unüblich und kann potenziell zu Fehlern führen.
Funktionieren die Items denn überhaupt? Weil mir nämlich auch nicht bewusst wäre, dass ein Minus (-) im Itemnamen erlaubt wäre. Gewöhnlich wird man an diesen Stellen immer einen Unterstrich nutzen, oder eben CamelCase.

Zu Deinem Problem, die Rule nur dann auszuführen, wenn die Markise mehr als 50 % ausgefahren ist, bräuchte ich zusätzlichen Input, und da wird es auch potenziell etwas haarig.
Gewöhnlich hat man exakt ein (!) Item für einen Rollladen (oder in diesem Fall Markise - ist für openHAB das gleiche). Dieses Item liefert den Status (Position) und wird zum Steuern verwendet. Problematisch wird es nun, wann der Status des Items upgedatet wird, zu Beginn einer Fahrt oder erst am Ende (oder vielleicht sogar laufend während der Fahrt?) Davon ist es abhängig, wie man die Rule baut.
Letztlich würde ich den aktuellen Status im Item EG-WIGA-Markise_ erwarten.

Falls der Status direkt beim Start geändert wird (üblich, wenn openHAB den Befehl zum Fahren sendet), wäre diese Rule passend:

Code: Alles auswählen

rule "Wintergarten Markise Nothalt"
when
    Item EG-WIGA-Markise_ changed                                    // Status der Markise hat sich geändert
then
    if(EG-WIGA-TUER.state == CLOSED)                                 // Tür ist zu
        return;                                                      // Rule abbrechen

    if((previousState as Number) < 50 && (newState as Number) < 50)  // Markise war schon weit genug eingefahren und wird eingefahren
        return;                                                      // Rule abbrechen

    if((previousState as Number) => 50 && (newState as Number) > 50) // Markise war schon weit genug ausgefahren und wird ausgefahren
        return;                                                      // Rule abbrechen

    EG-WIGA-Markise_.sendCommand(STOP)
end
Sobald sich der Status der Markise ändert, prüft die Rule die verschiedenen Bedingungen ab. Ist die Tür geschlossen, muss nichts gemacht werden.
Ist die Markise auf dem Weg in die Kassette, war aber bereits mehr als 50 % eingefahren, muss nichts gemacht werden.
Wird die Markise ausgefahren und war bereits mehr als 50 % geöffnet, muss auch nichts gemacht werden.
Wenn keine der drei Bedingungen zutreffen, besteht die Gefahr, dass die Markise gegen die geöffnete Tür fährt und der Stop-Befehl wird gesendet.

Diese Rule wird auch funktionieren, wenn Du über die openHAB Oberfläche eine Positionsfahrt auslöst.

Damit sie auch mit den Schaltern funktioniert, bräuchte es nur zwei kleine weitere Rules, die den passenden Status erzwingen:

Code: Alles auswählen

rule "Wintergarten Markise schließt"
when
    Item EG-WIGA-Markise_SW1 changed to ON
then
    EG-WIGA-Markise_.postUpdate(0)
end

rule "Wintergarten Markise öffnet"
when
    Item EG-WIGA-Markise_SW2 changed to ON
then
    EG-WIGA-Markise_.postUpdate(100)
end
Man beachte, dass in den Namen der Rules Sonderzeichen enthalten sind. Das ist zulässig :)

Die Idee ist, sobald der Startimpuls erkannt wird, wird der Status auf die neue Endlage gesetzt. Damit löst die Nothalt-Rule aus (vorausgesetzt, die Position hat sich gegenüber vorher geändert).
openHAB2.5.12 in einem Debian-Container (Proxmox, LXC)

dcridaz
Beiträge: 2
Registriert: 20. Jun 2022 16:16

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

Beitrag von dcridaz »

Hallo udo1toni,

ich weiß gar nicht wie ich Dir danken soll. :)
Das ist genau die Art von Regel, die ich seit mehreren Anläufen versuche zum "fliegen" zu kriegen.
Einige Wörter sind durch Copy & Paste irrtümlicherweise falsch geschrieben worden, so wie auch der Name des Items.
Ich danke Dir wirklich von ganzen Herzen für einen Input. 8-)
Openhab3 auf einem Raspberry-PI4, Wemos D1 mini über MQTT, AVM Fritz!, Wifi LED, Diverse Shelly Produkte, Gardena Smart Produkte, Reolink-IP Cams, Wansview-IP Cams, Foscam-IP Cams.

Antworten