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?
Shelly 2.5 Rollo Rule mit Luxmeter
-
- Beiträge: 18
- Registriert: 26. Aug 2022 14:10
Shelly 2.5 Rollo Rule mit Luxmeter
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
-
- Beiträge: 491
- Registriert: 6. Jan 2021 18:05
Re: Shelly 2.5 Rollo Rule mit Luxmeter
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.
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)
openHABian 4.3.5 auf Raspberry Pi 4 Mod. b (8GB)

- udo1toni
- Beiträge: 15265
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Shelly 2.5 Rollo Rule mit Luxmeter
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):
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:
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.
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
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)
]
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet
-
- Beiträge: 18
- Registriert: 26. Aug 2022 14:10
Re: Shelly 2.5 Rollo Rule mit Luxmeter
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
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
