Schalter / Switch mit 1x Reaktion Lux

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Benutzeravatar
Joe
Beiträge: 200
Registriert: 10. Okt 2018 12:22
Answers: 0
Wohnort: bei Mannheim

Schalter / Switch mit 1x Reaktion Lux

Beitrag von Joe »

Hallo zusammen,
ich habe mir eine kleine Wetterstation gebaut, die unter anderem meine Rollladensteuerung übernehmen soll.
Soweit funktioniert das alles..bis auf die Tatsache, das der Switch (item: Wetterstation) für die LUX Zahl mehrfach ein und aus geht und somit die bzw. der Rollladen (WzTu_1) mehrfach am Abend geschalten werden.
Beispiel:
Ich stelle an der OH Oberfläche ein, dass die Rollläden bei einem LUX-Wert von <1 runterfahren sollen...funktioniert ohne Problem.
Wenn jetzt jedoch der LUX-Wert sich am Abend nochmals ändert, sprich er geht wieder über 1 (passiert mit den Rollläden nichts) nur wenn er dann wieder <1 geht fahren die Rollläden wieder los.
Wie kann ich es programmieren, dass der Switch der auf den Wert LUX <1 reagiert nur 1x am Abend reagiert.
Sprich wenn der Wert <1, 1x erreicht wurde darf der Switch bis Morgens ca. 7 Uhr nicht nochmals reagieren.
Ab 7 Uhr übernimmt dann die Zeitsteuerung die Rollläden.

Code: Alles auswählen

rule "Steuerung Wetterstation MCU2"
  when
    Item mcu2_L_Rollo changed to ON
  then
    if (Wetterstation.state == ON){ 
            WzFe_1_Stl.sendCommand(3) //Rollo Wohnzimmer Fenster runter
            WzTu_1_Stl.sendCommand(40) //Rollo Wohnzimmer Tür 60% runter
            WzEz_1.sendCommand(3) //Rollo Wohn-Esszimmer
            Kueche_1_Stl.sendCommand(3) //Rollo Küche
            Studio_1_Pro.sendCommand(3) //Rollo Studio
            WC_1_Pro.sendCommand(3) //Rollo WC
            Thread::sleep(900000) 
            WzTu_1_Stl.sendCommand(3) //Rollo Wohnzimmer Tür 97% runter
    } else {
        sendTelegram("bot1", "Die Rolllandensteuerung über die Wetterstation ist deaktiviert, die Helligkeit hat den angegebene Wert erreicht")
    }   
end
Viele Grüße und Danke schon mal

bastler
Beiträge: 114
Registriert: 7. Jan 2020 19:36
Answers: 2

Re: Schalter / Switch mit 1x Reaktion Lux

Beitrag von bastler »

ich würde es mit einer variablen realisieren (habs nicht probiert), zb:

Code: Alles auswählen

var boolean rollosSindZu = false

rule "RollosSinZu Reset"
    when
        Time cron "0 0 7 ? * * *"   // morgens um 7:00 Uhr
    then
        rollosSindZu = false
    end


rule "Steuerung Wetterstation MCU2"
  when
    Item mcu2_L_Rollo changed to ON
  then
    if rollosSindZu
        return;

    rollosSindZu = true
    if (Wetterstation.state == ON){ 
            WzFe_1_Stl.sendCommand(3) //Rollo Wohnzimmer Fenster runter
            WzTu_1_Stl.sendCommand(40) //Rollo Wohnzimmer Tür 60% runter
            WzEz_1.sendCommand(3) //Rollo Wohn-Esszimmer
            Kueche_1_Stl.sendCommand(3) //Rollo Küche
            Studio_1_Pro.sendCommand(3) //Rollo Studio
            WC_1_Pro.sendCommand(3) //Rollo WC
            Thread::sleep(900000) 
            WzTu_1_Stl.sendCommand(3) //Rollo Wohnzimmer Tür 97% runter
    } else {
        sendTelegram("bot1", "Die Rolllandensteuerung über die Wetterstation ist deaktiviert, die Helligkeit hat den angegebene Wert erreicht")
    }   
end
die variable rollosSindZu ist erst mal false. wenn deine rollo-funktion das erste mal gestartet wird dann wird sie auf true gesetzt. wird die funktion ein zweites mal aufgerufen greift die erste if-abfrage und beendet die funktion an der stelle, es wird also kein rollo angesteuert. morgens um sieben wird mit einer anderen rule die variable wieder auf false gesetzt und das spiel kann von vorne beginnen.

Benutzeravatar
PeterA
Beiträge: 1052
Registriert: 8. Feb 2019 12:12
Answers: 13

Re: Schalter / Switch mit 1x Reaktion Lux

Beitrag von PeterA »

Hi Joe,

wie wäre es denn wenn Du hier mit einer "Verriegelung" arbeitest:

Code: Alles auswählen

rule "Steuerung Wetterstation MCU2"
  when
    Item mcu2_L_Rollo changed to ON
  then
    if (Wetterstation.state == ON && Verschattungaktiv.state == OFF){ 
            WzFe_1_Stl.sendCommand(3) //Rollo Wohnzimmer Fenster runter
            WzTu_1_Stl.sendCommand(40) //Rollo Wohnzimmer Tür 60% runter
            WzEz_1.sendCommand(3) //Rollo Wohn-Esszimmer
            Kueche_1_Stl.sendCommand(3) //Rollo Küche
            Studio_1_Pro.sendCommand(3) //Rollo Studio
            WC_1_Pro.sendCommand(3) //Rollo WC
            Thread::sleep(900000) 
            WzTu_1_Stl.sendCommand(3) //Rollo Wohnzimmer Tür 97% runter
            Verschattungaktiv.postUpdate(ON)
    } else {
        sendTelegram("bot1", "Die Rolllandensteuerung über die Wetterstation ist deaktiviert, die Helligkeit hat den angegebene Wert erreicht")
    }   
end
"Verschattungaktiv" ist ein ungebundenes hilfs Item.
Der if Teil der Rule läuft erst mal durch.... weil das Item OFF ist.
Wenn die Rule durchgelaufen ist wird das Item mit "postUpdate" auf ON geschaltet, somit kann bei einem erneutem Change des Wetterstation Item
der If teil nicht mehr ausgeführt werden und die Rule ist verriegelt.
Und mit deiner Zeitschaltung kannst Du dann das "Verschattungaktiv" Item auch wieder mit postUpdate(OFF) "zurückschalten" und die Rule "entriegeln"

Edit:
Zu dem ungebundenem Item muss man aber Wissen das es am Anfang noch keinen Status bzw "NULL" hat.
Hier habe ich mir immer damit geholfen das Item kurz irgendwo in die Sitemap einzufügen und einmal zu Schalten. Dann hat es seinen
Status. OFF oder ON. Und später sollte man das Item auch persistieren.

Gruß Peter
Zuletzt geändert von PeterA am 29. Mai 2020 09:41, insgesamt 1-mal geändert.
- OpenHab 2.4
#PWRUP

Benutzeravatar
Joe
Beiträge: 200
Registriert: 10. Okt 2018 12:22
Answers: 0
Wohnort: bei Mannheim

Re: Schalter / Switch mit 1x Reaktion Lux

Beitrag von Joe »

Hallo zusammen,
danke das Ihr so schnell geantwortet habt, ich werde mal die Lösungen umsetzten und prüfen was am besten zu meiner Wetterstation passt.
Vielen Dank

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

Re: Schalter / Switch mit 1x Reaktion Lux

Beitrag von udo1toni »

Also, ich möchte hier mal darauf hinweisen, dass ein Thread::sleep(900000) eine gaaaaanz schlechte Idee ist, zumal, wenn die Rule über ein Item getriggert wird, dass seinen Wert eventuell mehrfach innerhalb kurzer Zeit wechselt, denn die Rule wird dann eventuell innerhalb kurzer Zeit mehrfach gestartet. Da aber die Rule eine Viertelstunde Toter Mann spielt, hängen nach einigen Minuten vielleicht mehrere Rules im künstlichen Koma und openHAB hat keine Threads mehr übrig, um weitere Rules zu starten. Schlimmer noch, merkt sich openHAB durchaus, welche Rules noch zu starten sind, es kann also passieren, dass dadurch Befehle ausgeführt werden, die inzwischen obsolet sind.

Weiterhin fällt mir auf, dass Du Deine Rollläden offensichtlich falsch herum angeschlossen hast. Ein Rolladen ist niemals zu 100% geöffnet, sondern zu 100% geschlossen. Vergleiche das bitte mit einem Dimmer, dessen Funktion ist es, heller zu machen. Ein Rollladen soll dunkler machen, er entfaltet seine Wirksamkeit, wenn er geschlossen ist. (Ja, ich weiß, dass es Hersteller gibt, die das nicht verstanden haben.)

Du triggerst Deine Rule mit einem Item, welches ON (und vermutlich alternativ OFF) liefert. Wie hängt dieses Item an der Helligkeit? Gewöhnlich sollte der Status dieses Items mit einer Hysterese versehen sein, also z.B. Helligkeit sinkt unter 1 -> Status geht ON. Helligkeit steigt über 1 -> es passiert nix. Helligkeit steigt über 10 -> Status geht OFF. Helligkeit sinkt unter 10 -> es passiert nix.
Natürlich kommt es darauf an, wie hoch die Hysterese sein darf/kann, ob das für die Lösung Deines Problems hilfreich ist.
openHAB4.1.2 stable in einem Debian-Container (bookworm) (Proxmox 8.1.5, LXC), mit openHABian eingerichtet

Antworten