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

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

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

Beitrag von udo1toni »

Hast Du denn die Gruppen entsprechend angelegt?

Die Fehlermeldung rührt daher, dass myGroup nicht als Group Item definiert ist.

Kannst Du bitte mal diese Zeile:

Code: Alles auswählen

    val myGroup = g_R_OG_Group.members.filter[i|i.name == strGroup].head
so abändern:

Code: Alles auswählen

    val myGroup = g_R_OG_Group.members.filter[i|i.name == strGroup].head as GroupItem
Ich bin mir allerdings nicht sicher, ob der Typ so stimmt. Wenn ich den Source Code korrekt gelesen habe, sollte es richtig sein...
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet

dcridaz
Beiträge: 18
Registriert: 20. Jun 2022 16:16
Answers: 0

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

Beitrag von dcridaz »

Hallo Zusammen,
ich bin beim stöbern auf dieser Seite auf Euer Projekt gestoßen.
Aus einem Thread habe ich folgende Rule übernommen. Allerdings scheint dies so nicht zu funktionieren.
Hat jemand von Euch zufällig eine Idee?

Ich wüde auch noch gerne die Abfrage nach "Automatikmodus Verschattung" einbringen.
Aber scheinbar funktioniert das nicht so einfach, wie ich es mir gedacht habe.

Code: Alles auswählen


rule "Verschattung Wohnzimmer"
when
    Item AUSonnenstand changed
then
    
    if(!(previousState instanceof Number)) {
        logWarn("Verschattung-Wohnzimmer","previousState keine gültige Zahl! ({})",previousState)
        return;
    }
    if(!(newState instanceof Number)) {
        logWarn("Verschattung-Wohnzimmer","newState keine gültige Zahl! ({})",newState)
        return;
    }
    if(previousState >= 137 && newState < 195) 
        OGWohnzimmerVerschattung.sendCommand (ON)
    else if(previousState < 136 && newState >= 196) 
        OGWohnzimmerVerschattung.sendCommand (OFF)
end

rule "Verschattung Wohnzimmer Jalousiefahrt Runter"
when
    Item OGWohnzimmerVerschattung changed from OFF to ON
then
    OGWohnzimmerJalousie_Rollensteuerung.sendCommand (DOWN)
    OGWohnenBalkontuerJalousie.sendCommand (DOWN)
end

rule "Verschattung Wohnzimmer Jalousiefahrt Hoch"
when
    Item OGWohnzimmerVerschattung changed from ON to OFF
then
    OGWohnzimmerJalousie_Rollensteuerung.sendCommand (UP)
    OGWohnenBalkontuerJalousie.sendCommand (UP)
end






Liebe Grüße
Tim
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: 14829
Registriert: 11. Apr 2018 18:05
Answers: 232
Wohnort: Darmstadt

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

Beitrag von udo1toni »

Die Frage ist zunächst, wie Deine Items definiert sind.

Ist AUSonnenstand vom Typ Number? Oder ist es vom Typ Number:Angle (das wäre z.B. der Fall, wenn Du das mit dem Channel astro:sun:local:azimuth automatisch verlinkt hast und es automatisch generiert wurde)

Weiterhin wird die erste Rule maximal ein ON senden, aber niemals ein OFF (es sei denn, Du hast die Aktualisierungsrate der Quelle so absurd niedrig eingestellt, dass die Sonne innerhalb eines Messzyklus von weniger als 136° auf mehr als 195° wandert - faul gerechnet wären das 4 Stunden.

So wäre es eher sinnvoll:

Code: Alles auswählen

rule "Verschattung Wohnzimmer"
when
    Item AUSonnenstand changed
then
    if(!(newState instanceof Number)) {
        logWarn("autoshade","newState keine gültige Zahl! ({})",newState)
        return;
    }
    val azimuth = (newState as Number).floatValue
    var soll = OGWohnzimmerVerschattung.state

    if(azimuth >= 137 && azimuth < 195)
        soll = ON
    else if(azimuth < 136 || azimuth >= 196)
        soll = OFF

    if(soll != OGWohnzimmerVerschattung.state)
        OGWohnzimmerVerschattung.postUpdate(state.toString)
end


rule "Verschattung Wohnzimmer Jalousiefahrt"
when
    Item OGWohnzimmerVerschattung changed
then
    if(newState == ON) {
        OGWohnzimmerJalousie_Rollensteuerung.sendCommand(DOWN)
        OGWohnenBalkontuerJalousie.sendCommand(DOWN)
    } else if(newState == OFF) {
        OGWohnzimmerJalousie_Rollensteuerung.sendCommand(UP)
        OGWohnenBalkontuerJalousie.sendCommand(UP)
    }
end
Der alte Status des Items interessiert eigentlich nicht. Wichtig ist, dass der neue Status sich im gewünschten Bereich befindet, also zwischen 137°und 195°.
Damit wir die Unsicherheit der eventuell vorhandenen Einheit nicht mehr berücksichtigen müssen, füllen wir eine lokale Konstante azimuth mit dem aktuellen Status (newState), allerdings zuerst gecastet nach Number (weil ein Number Objekt die Methode .floatValue kennt) und anschließend in eine Fließkommazahl gewandelt. Fließkommazahlen sind einheitenlos, also ohne das ° hintendran.
Dann wird eine lokale Variable mit dem aktuellen Status des Items OGWohnzimmerVerschattung gefüllt. Anschließend wird die lokale Variable geändert, je nach Wert von azimuth. Es gibt ein (kleines) Fenster von 1° auf beiden Seiten (also zwischen 136 und 137 sowie zwischen 195 und 196), in diesem Bereich soll der Wert einfach so bleiben wie er gerade ist, dafür dieser Umweg :)

In einem letzten Schritt wird er Status des Items OGWohnzimmerVerschattung auf das neue Soll gebracht, unter der Voraussetzung, dass das Soll vom Ist abweicht.
Die Statusänderung wird dabei direkt vorgenommen, per .postUpdate(). Die Methode .sendCommand() sendet einen Befehl an das Item, ändert aber nicht dessen Status. openHAB "errät" anhand des Befehls den vermutlich zukünftigen Status des Items und löst ein .postUpdate() mit dem neuen Status aus, um schon mal dieAnzeige aktuell zu haben, auch wenn die angesteuerte Hardware noch kein Status Update gesendet hat. Hier steuern wir aber mit hoher Wahrscheinlichkeit gar keine Hardware, sondern lediglich andere Rules. Dann kann man auch gleich .postUpdate() verwenden :)

Zu guter Letzt reicht eine Rule um aufgrund des Status von OGWohnzimmerVerschattung die beiden Jalousien zu fahren (eigentlich könnte man da sauch in der Rule oben abfrühstücken, aber vielleicht willst Du noch von weiteren Rules aus auf die Steuerung zugreifen).
Ich habe hier bewusst darauf verzichtet, auch previousState abzufragen, denn wenn das System neu gestartet wird, hat das Item evtl. den Status NULL, d.h. ein Befehl ON oder OFF würde von der zweiten Rule ignoriert, das ist vermutlich eher nicht der Wunsch.

Es gibt noch einen weiteren Punkt, falls es nämlich so ist, dass Du tatsächlich die Jalousien auch von anderer Stelle steuen möchtest, wird Dir obige Rule die Suppe versalzen. Dann sähe die erste Rule eher so aus:

Code: Alles auswählen

rule "Verschattung Wohnzimmer"
when
    Item AUSonnenstand changed
then
    if(!(newState instanceof Number)) {
        logWarn("autoshade","newState keine gültige Zahl! ({})",newState)
        return;
    }
    if(!(previousState instanceof Number)) {
        logWarn("autoshade","previousState keine gültige Zahl! ({})",previousState)
        return;
    }
    val azimuthOld = (previousState as Number).floatValue
    val azimuth = (newState as Number).floatValue
    var soll = OGWohnzimmerVerschattung.state

    if(azimuthOld < 137 && azimuth >= 137)
        soll = ON
    else if(azimuthOld < 196 && azimuth >= 196)
        soll = OFF

    if(soll != OGWohnzimmerVerschattung.state)
        OGWohnzimmerVerschattung.postUpdate(state.toString)
end
Nun prüft die Rule, ob vom letzten Stand zum neuen Stand die Untergrenze (137) überschritten wurde (sie war also kleiner als 137 und ist jetzt größer oder gleich). Dann wird die Beschattung aktiviert.
Falls stattdessen die Obergrenze (196) überschritten wurde, wird die Beschattung deaktiviert. Es gibt nun also exakt zwei Zeitpunkte am Tag, an denen die Rule aktiv in den Schaltzustand des Items OGWohnzimmerVerschattung eingreift, sonst nicht. Somit kannst Du die Verschattung jederzeit manuell ein- oder ausschalten. Die Automatik wird lediglich zum errechneten Zeitpunkt die Verschattung aktivieren, falls nicht schon aktiv, bzw. deaktiveren, falls noch nicht inaktiv. Ich vermute, das ist das gewünschte Verhalten :)
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet

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

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

Beitrag von udo1toni »

Ach so, glatt vergessen...

Soll ide Automatik gänzlich ausgesetzt werden, so musst Du lediglich dafür sorgen, dass die Rule erst gar nicht so weit kommt, OGWohnzimmerVerschattung zu steuern. einfach gleich als ersten Befehl sowas einbauen:

Code: Alles auswählen

rule "Verschattung Wohnzimmer"
when
    Item AUSonnenstand changed
then
    if(Automatik.state != ON)  // Item, welches die Automatik aktiv/inaktiv schaltet
        return;

// ab hier der Code von oben
Und dann ist nur noch die Frage, ob die Rule, falls die Verschattung gerade aktiv ist, diese noch deaktivieren soll... Das würde ich im Zweifel aber über eine zweite Rule erledigen, also so:

Code: Alles auswählen

rule "Verschattungsautomaik schlaten"
when
    Item Automatik changed to OFF
then
    if(OGWohnzimmerVerschattung.state != OFF)
        OGWohnzimmerVerschattung.postUpdate(OFF)
end
Die Verschattung nachträglich automatisch zu aktivieren (wenn man die Automatik "zu spät" einschaltet) ist dann natürlich ebenfalls möglich :)
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet

dcridaz
Beiträge: 18
Registriert: 20. Jun 2022 16:16
Answers: 0

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

Beitrag von dcridaz »

Hallo udo1toni,

erstmal wiedereinmal vielen lieben Dank für Deinen Post.
Ich habe geprüft, ob das Azimuth-Item wirklich vom Typ Number ist.
Es ist natürlich, wie Du bereits vermutet hast, ein Number:Angle.
Ohne vorher zu fragen, ob das nun eine Auswirkung auf die Rule hat, habe ich versucht das Item in einen reinen "Number" zu ändern.
Dann kam als Ergebnis sofort "NULL". Auch nach Rückänderung steht der Status weiterhin auf "NULL".
Ich habe nun die Rule kopiert und würde dies gerne morgen einmal im Livebetrieb testen.
Wird sich der Status wieder ändern, oder muss ich OH bzw. den Putty einmal rebooten?

Liebe Grüße

Tim
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: 14829
Registriert: 11. Apr 2018 18:05
Answers: 232
Wohnort: Darmstadt

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

Beitrag von udo1toni »

Number:Angle ist schon die richtige Art, den Status zu übernehmen. Wenn Du das Item änderst, wird es zunächst mal den Status verlieren, sollte aber beim nächsten Update auch wieder den vorher vorhandenen Wert erhalten, notfalls das Astro Binding einmal pausieren und wieder starten, dann sollte unmittelbar ein Update ausgeführt werden.

Funktioniert das nicht, so hast Du einen Fehler gemacht :)
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet

dcridaz
Beiträge: 18
Registriert: 20. Jun 2022 16:16
Answers: 0

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

Beitrag von dcridaz »

Hallo udo1toni,
jetzt klappt es wieder. Danke für Deine Unterstützung.
Liebe Grüße
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
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 »

jensilein hat geschrieben: 7. Jun 2023 21:18
Cyrelian hat geschrieben: 14. Jul 2021 17:55 Hi,

zwei Xiaomi Lichtsensoren, angebunden via Deconz.

CU
Cyrelian
Hallo Cyrelian,

könntest Du evtl. kurz einmal posten, wie Du das genau umgesetzt hast von der Programmierung her? Ich bin mit der Verwendung der Bewölkung von OWM auch nicht mehr zufrieden und würde gern auf den von Dir beschriebenen Ansatz schwenken.
Vielen Dank für die Unterstützung.
Hi,

klar, sorry für die Verspätung.

Code: Alles auswählen

 val Boolean isLuxLastHour = (localCurrentLux.averageSince(now.minusHours(1), "influxdb")as Number >= (LuxHysteresis))
    logInfo("rules", logPrefix + "Lux " + isLuxLastHour )
Die beiden Sensoren schreiben einmal pro Minute und jeden "change" in die DB. Es hat ne ganze Weile gedauert bis ich die richtigen Grenzwerte ermittelt habe. Grafana zur Auswertung ist da ganz gut und halt viel in den Himmel schauen :D .
Bisher bin ich sehr zufrieden mit der Lösung und die funktioniert besser als die Wetterdienste wie z.b. OWM.

CU
Cyrelian

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

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

Beitrag von udo1toni »

Cyrelian hat geschrieben: 21. Jul 2023 09:08 die funktioniert besser als die Wetterdienste
Kein Wunder, Du sammelst die Daten ja auch unmittelbar vor Ort ein. Solange nicht einer der Sensoren defekt ist, sind selbst erfasste Daten immer besser als solche über einen Webservice.

Anders sieht es bei der Vorhersage aus, da braucht es große Wettermodelle und Millionen Messpunkte, um eine vernünftige Vorhersage zu basteln.
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet

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

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

Beitrag von Hoggle »

Hallo.
Wie in einem anderen Post geschrieben, will ich mein System von Grund auf neu installieren und dann auch dieses Projekt mit integrieren.
Ich werde das openhabian-Image installieren und auch wahrscheinlich sofort auf 4.0 gehen.
Ich frage mich jetzt allerdings, wo ich in diesem 25 Seiten langen Post anfangen soll, um die richtigen Items und Rules anzulegen.
Am Anfang begann ja alles mit OH 2.4 und zwischendrin wurden noch Ergänzungen am Code gemacht. Ich habe leider die Übersicht verloren.
Kann mich da jemand unterstützen?
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