Shelly 2.5 Rollo Rule mit Luxmeter

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
redaeq
Beiträge: 18
Registriert: 26. Aug 2022 14:10
Answers: 0

Shelly 2.5 Rollo Rule mit Luxmeter

Beitrag von redaeq »

Hi,
ich brauche vielleicht einen Denkanstoss von euch.
Ich habe mir mit einem Wemos Mini und meinem Helligkeitssensor ein "Luxmeter" gebaut, das an Openhab angebunden.
Nun möchte ich, anhand enstspr. Helligkeit die Rollos per Shelly 2.5 runterfahren, wenn es "zu hell" ist.
Dazu habe ich diese Regel (siehe Bild) per GUI angelegt (der Code ist noch nicht so mein Fall)
Das Problem ist natürlich, dass der Shelly Schalter natürlich immer wenn das Luxmeter updated und über 1800 Lux ist den Schalter "Down" bzw. 80% schaltet. Das Führt zum ausführen des Relais im Schalter und man hört oft das klicken.
Da das nicht sonderlich gesund sein kann, habe ich diese Regel erstmal deaktiviert.
Hat einer eine Idee wie man das klüger hinbekommt, dass er nur einmal schaltet und es dann gut sein lässt für den Rest des Zeitraums?
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.

mad-mike
Beiträge: 491
Registriert: 6. Jan 2021 18:05
Answers: 3

Re: Shelly 2.5 Rollo Rule mit Luxmeter

Beitrag von mad-mike »

Moin.

Ich löse solche ""Probleme"" immer mit einem Hilfs Item "switch". Wenn Rule also ausgeführt wird, wird Hilfs Item auch geschalten, und mit ""But only if"" wird abgefragt, ob der Schalter schon aktiv ist...

Dann brauchst halt nur den Punkt wie man das Hilfs Item wieder deaktiviert... Entweder jede Nacht, oder wenn einer der Rollos Manuell gefahren wird, oder, oder, oder... wenn ein Lux wert wieder unterschritten wird...

Mit den Text rules kann man dies aber sicherlich besser lösen.
Gruss mad-mike

openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB) ;)

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

Re: Shelly 2.5 Rollo Rule mit Luxmeter

Beitrag von udo1toni »

Du siehst ja, dass man mit dieser Art Rule schnell an die Grenzen des sinnvoll möglichen kommt. Die gewünschte Funktion in einer Text Rule (die Form ist die für *.rules Dateien):

Code: Alles auswählen

rule "Rollos Südseite runter im Herbst zwischen 10 Uhr und 13:45 Uhr"               // Sinnvoller wäre ein kürzerer Name und ein Kommentar
when //------------------------------------------------------------------------------> Ab hier werden die Trigger gelistet
    Item tasLuxTerrasse_Lux changed                                                 // changed ist ausreichend, received update ginge ebenfalls
then //------------------------------------------------------------------------------> hier beginnt der Code-Block
    if(now.getDayOfWeek.getValue > 5)                                               // Falls Samstag oder Sonntag
        return;                                                                     // Abbruch
    if(LokaleSonnendaten_Jahreszeit.state.toString != "AUTUMN")                     // Falls nicht Herbst
        return;                                                                     // Abbruch
    if(tasLuxTerrasse_Lux.state < 1800)                                             // Falls dunkler als 1800
        return;                                                                     // Abbruch
    if(now.get(MINUTE_OF_DAY) < 600 || now.get(MINUTE_OF_DAY) > 13*60+45)           // falls vor 10 Uhr oder nach 13:45 Uhr
        return;                                                                     // Abbruch
                                                                                    // Ab hier sollten die Läden geschlossen werden.
    if(Rollowohnzimmerlinks_Rollensteuerung0offen100geschlossen.state != 80)        // Falls Stand nicht 80
        Rollowohnzimmerlinks_Rollensteuerung0offen100geschlossen.sendCommand(80)
    if(Rollowohnzimmer2vlinks_Rollensteuerung0offen100geschlossen.state != 80)      // Falls Stand nicht 80
        Rollowohnzimmer2vlinks_Rollensteuerung0offen100geschlossen.sendCommand(80)
    if(Rollowohnzimmer2vrechts_Rollensteuerung0offen100geschlossen.state != 80)     // Falls Stand nicht 80
        Rollowohnzimmer2vrechts_Rollensteuerung0offen100geschlossen.sendCommand(80)
    if(Rollowohnzimmerrechts_Rollensteuerung0offen100geschlossen.state != 80)       // Falls Stand nicht 80
        Rollowohnzimmerrechts_Rollensteuerung0offen100geschlossen.sendCommand(80)
end //-------------------------------------------------------------------------------> hier endet der Code-Block
Die Rule prüft zunächst die Abbruchbedingungen ("But only if"). In den "alten" Rules Dateien gab es diesen Bedingungsblock nie, die Abfrage ist also Teil des auszuführenden Codes.
Der einfachste Weg ist hier, die Rule abzubrechen, falls eine Bedingung nicht passt. Entsprechend muss die Logik hier andersrum definiert sein.
Es werden also nacheinander der Wochentag, die Jahreszeit, die Helligkeit und die Uhrzeit geprüft. Dabei kann man die Bedingungen auch beliebig verketten, aber so wie aufgeführt kann man den Code auch leicht nachvollziehen.
Sind alle Bedingungen erfolgreich "nicht erfüllt", so müssen die Läden auf Beschattung gefahren werden, allerdings nur, wenn das nicht bereits geschehen ist.
Diese letzte Bedingung muss pro Laden einzeln geprüft werden.

Deine Itemnamen sind übrigens nicht so besonders toll, angefangen von Doppelungen (Lux...Lux, Rollo...Rollen...) über unsinnige Informationen (...Rollensteuerung0offen100geschlossen) die auch noch irrsinnig lang ist und keinerlei Mehrwert bietet - Rollläden sind in openHAB immer(!) zu x % geschlossen. Solltest Du Rollläden haben, die mit 100% komplett geöffnet sind, so solltest Du die entsprechende Steuerung dahin gehend ändern, dass 0 % die maximale Öffnung und 100 % die maximale Verdunkelung repräsentieren.

Du kannst hoffentlich erkennen, dass die Rule quasi 1:1 Deine Rule abbildet, nur mit dem Unterschied, dass jeder Aktor einzeln auf seinen aktuellen Stand geprüft wird - eine Funktion, die so über die UI Rule (ohne Code) nicht möglich ist - mindestens müsstest Du für jedes Rollo eine eigene Rule anlegen...

Die Rule ist (mit dem passenden Editor) auch nicht weniger komfortabel zusammenzustellen als über die UI.
Es gäbe auch noch Verbesserungspotenzial, z.B. könnte man alle Rollläden in einer Gruppe zusammenfassen und sie über die Grupppe gemeinsam steuern:

Code: Alles auswählen

gRollosWohnzimmer.members.forEach[r|
    if(r.state != 80)
        r.sendCommand(80)
]
Die Gruppe gRollosWohnzimmer wird durchlaufen, für jedes Item dieser Gruppe wird die Befehlsfolge ausgeführt, welche in den eckigen Klammern steht. Dabei steht r für das konkrete Item. So ist es egal, falls Du auf die Idee kommen solltest, noch ein zusätzliches Fenster mit zusätzlichem Rollo einzubauen. Es reicht dann, das Item der Gruppe hinzuzufügen.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

redaeq
Beiträge: 18
Registriert: 26. Aug 2022 14:10
Answers: 0

Re: Shelly 2.5 Rollo Rule mit Luxmeter

Beitrag von redaeq »

Vielen Dank für eure beiden Kommentare.
Der Tipp mit dem Schalter ist auf jedenfall ne gute Alternative.
@Udo danke für die Ausführung.
Ich habe jedoch heute nochmal mit der Rule rumgespielt, Und festgestellt, dass ich das Problem des Dauerschaltens des Shellys nur habe, wenn ich als Command "DOWN" gesetzt habe. Wenn ich, wie du ja auch geschrieben hast, Werte wie 100 oder 0 als zu oder auf verwende, dann schaltet die Rule den Shelly nicht mehrfach. Somit reichte es in meinem Fall aus, DOWN durch 100 zur ersetzen und alles war takko.
Zu den Itemnamen, ich habe einfach die Standardnamen, die vorgeschlagen worden behalten, Könnte man sicher verbessern, hast du schon recht ;)

Antworten