Rule: Steuerung Hitzeschutz Rollos - Wert über bestimmte Zeit

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
DonMarcello
Beiträge: 19
Registriert: 13. Apr 2022 11:15
Answers: 0

Rule: Steuerung Hitzeschutz Rollos - Wert über bestimmte Zeit

Beitrag von DonMarcello »

Hallo zusammen,

pünktlich zum beginnenden Sommer wollte ich den Hitzeschutz per Rollo auf unserer Haus-Südseite konfigurieren.

Folgende Komponenten kommen zum Einsatz:
Helligkeitssensor - Garten
Temperatursensor - Garten
Rollos Südseite

Folgendes gedachtes Szenario:
Wenn der Helligkeitswert für 10 Min. über 60000 Lux und die Temperatur größer als 25 Grad ist, dann sollen die Rollos auf der Südseite des Hauses herunterfahren.

Die Rule habe ich soweit fertig, nur der erste Part (Wenn der Helligkeitswert für 10 Min. über 60000 Lux) kriege ich in Blockly nicht dargestellt. Die aktuelle Rule wird ausgeführt, sobald der Wert einmal über 60000 Lux ist. Das bedeutet, wenn es 25 Grad warm ist, den ganzen Tag bewölkt und für einen kurzen Moment kommt die Sonne heraus, dann werden die Rollos heruntergefahren. Das ist natürlich nicht Sinn der Sache.

Könnt ihr mir vielleicht eine Hilfestellung geben, welche Blockly-Blöcke ich wie für den fehlenden Part verwenden muss?
Habt ihr vielleicht ein ähnliches Szenario für einen Hitzeschutz konfiguriert? Ich würde mich über eine Erläuterung eurer Umsetzung freuen.

Danke im Voraus!

Edit: Ich sehe gerade, dass ich im Kanal "Setup und Konfiguration" gepostet habe. Ich denke das Thema ist in Projekte besser aufgehoben. Vielleicht kann ein Mod das Thema einmal verschieben ... sorry :)

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

Re: Rule: Steuerung Hitzeschutz Rollos - Wert über bestimmte Zeit

Beitrag von udo1toni »

Das Problem dabei ist die fehlende Möglichkeit, den Timer abzubrechen, das bräuchte es dafür. In der DSL ist das kein Problem. Nur zur Anschauung:

Code: Alles auswählen

var Timer tShade = null                                  // Globale Variable für Timer

rule "Beschattung Automatik"
when
    Item Helligkeit changed                              // Helligkeit hat sich geändert
then
    var Integer iTemp = 0                                // definiere Variable für Temperatur
    if(Temperatur.state instanceof Number)               // falls gültige Temperatur
        iTemp = (Temperatur.state as Number).intValue    // lade Temperatur in Variable
    var Integer iBright = 0                              // definiere Variable für Helligkeit
    if(Helligkeit.state instanceof Number)               // falls gültige Helligkeit
        iBright = (Helligkeit.state as Number).intValue  // lade Helligkeit in Variable

    if(tShade === null && iBright > 60000 && iTemp > 24) // Bedingungen erfüllt? (Timer nicht gestartet, hell genug, warm genug
        tShade = createTimer(now.plusMinutes(10),[|      // starte Timer. bei Ablauf des Timers:
            gShutterSued.sendCommand(55)                 // schließe Rollos
            tShade = null                                // lösche Timer Variable
        ])                                               // Ende Timer
    else if(iBright < 59000) {                           // falls erste Bedingung nicht erfülllt und Helligkeit geringer als 59000
        tShade?.cancel                                   // breche Timer ab, falls einer läuft
        tShade = null                                    // lösche Timer
    }
end
Die Rule löst jedes Mal aus, wenn ein geänderter Helligkeitswert herein kommt.
Zu Beginn werden de benötigten Werte ermittelt, das sind die Helligkeit und die Temperatur.
Es reicht, die Werte als Integer zu verwenden. Bei der Wandlung nach Integer wird außerdem eine evtl. vorhandene Einheit entfernt.
Nun folgt die Prüfung auf Überschreiten der Grenzwerte. Die Integer Werte für Helligkeit und Temperatur müssen passen, außerdem darf der Timer noch nicht gestartet sein. Sind all diese Bedingungen erfüllt, so wird der Timer angelegt und die Rule ist fertig.
Ist eine der Bedingungen nicht erfüllt und gleichzeitig die Helligkeit unter 59000 (man sollte immer eine gewisse Hysterese vorsehen) so wird ein eventuell laufender Timer abgebrochen und die Variable gelöscht. Somit kann die nächste Hell-Phase einen neuen Timer starten.

Wenn der Timer abläuft, ohne dass er gecancelt wurde, kommt der Code im Timer zur Ausführung. Das wäre hier das Schließen der Läden und natürlich das Zurücksetzen der Timer Variablen.

Für Blockly gäbe es eventuell eine Möglichkeit, mit Metadata Expiration zu arbeiten. Vorarbeit:
Ein ungebundenes Item anlegen. Ich nutze hier als Namen "StartShade" (Switch Item passt). In den Metadaten des Items wird die Expiration eingetragen, und zwar 10 Minuten, Command OFF.
Nun brauchst Du drei Rules (oder zwei, je nachdem...).

1. Rule: bei Änderung Helligkeit, aber nur, falls Temperatur über 25 und Helligkeit über 60000 und Status StartShade nicht gleich ON -> Ändere den Status von StartShade auf ON
2. Rule: bei Änderung Helligkeit, aber nur, falls Helligkeit unter 59000 -> Ändere den Status von StartShade auf OFF (es ist essenziell, dass nur der Status gesetzt wird, es darf kein Befehl gesendet werden!!!)
3. Rule sobald das Item StartShade den Befehl (!) OFF empfängt -> Schließe die Läden.

Die drei Rules sind so einfach, dass Du dafür noch nicht mal Blockly bemühen musst. Du kannst natürlich die erste und die zweite Rule zu einer zusammenfassen und die Bedingungen dann innerhalb Blockly abfragen.
Der Knackpunkt ist aber, dass der Code lediglich den Status des ungebundenen Items setzt, während das Ende der Expiration ein Command OFF sendet.
Deshalb triggert die letzte Rule nur, wenn die Expiration abläuft, nicht aber, wenn der Status einfach zurückgesetzt wurde.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

DonMarcello
Beiträge: 19
Registriert: 13. Apr 2022 11:15
Answers: 0

Re: Rule: Steuerung Hitzeschutz Rollos - Wert über bestimmte Zeit

Beitrag von DonMarcello »

Wow, udo1toni, mal wieder vielen Dank für deine ausführliche Hilfe ...

Also das DSL-Skript verstehe ich grundsätzlich. Ich denke, dass ich dies auch so umsetzen werde. Zwei/Drei Blockly-Skripte sind dann für die Übersicht nicht so gut :). Das mit den Meta Data Expiration hatte ich schon mal gelesen, aber über die GUI irgendwie nicht hingekriegt.

Vielleicht kannst du mir einmal mit der Anwendung des Skriptes helfen:

Ich arbeite eig. ausschließlich mit der GUI. Wenn ich dort eine neue Rule anlege muss ich den Part

Code: Alles auswählen

rule "Beschattung Automatik"

when

    Item Helligkeit changed

then


wohl aus dem Skript herauslassen, oder? Das wird ja über die Schaltflächen in der GUI definiert.

Kann ich über die GUI auch globale Variablen definieren?

In der Rule-Ausführung könnte ich ja dann den Rest des DSL-Skriptes unterbringen.

Ich komme häufig mit der Schreibweise der Items in den Skript-Sprachen durcheinander.

Mein Helligkeitssensor heißt als Thing

Garten_Helligkeit

und hat den Channel

Helligkeit-Lux

Ist in deinem Skriptbeispiel dann "Helligkeit" übersetzt für mein Thing

Garten_Helligkeit.Helligkeit-Lux.state ?

Sollte diese Anwendung über die GUI nicht möglich sein, wie muss die Datei heißen (Endung) und in welchen Ordner müsste ich diese legen?

Sehe ich diese Regel dann irgendwo in der GUI? Wäre natürlich schön, wenn ich einen Überblick über sowohl die Skript- als auch die GUI Regeln hätte.

Was ist denn der Unterschied wenn das Item einen Status oder einen Befehl "gesetzt" bekommt?

Vielen Dank nochmal bis hierhin! :)

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

Re: Rule: Steuerung Hitzeschutz Rollos - Wert über bestimmte Zeit

Beitrag von udo1toni »

Weil Du für das Script eine globale Variable brauchst, geht das ausschließlich über die Text Dateien. Wenn Du unbedingt über die UI arbeiten willst, bleibt Dir nur der Weg über das ungebundene Item.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

DonMarcello
Beiträge: 19
Registriert: 13. Apr 2022 11:15
Answers: 0

Re: Rule: Steuerung Hitzeschutz Rollos - Wert über bestimmte Zeit

Beitrag von DonMarcello »

Funktioniert wunderbar! Vielen Dank!

Antworten