Switch-Dimmer via Rule

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Switch-Dimmer via Rule

Beitrag von Heavy-Dee »

Hallo zusammen,
ich habe im Wohnzimmer eine neue Deckenlampe! Diese verfügt über einen Switch-Dimmer, d.h. beim einschalten leuchtet sie 100%. Wenn ich nun den Lichtschalter ausschalte und innerhalb von 3 sek wieder einschalte leuchtet sie 60%, bei nochmaligen aus- und einschalten 30%. Die eingestellte Dimstufe wird nicht gespeichert !
Da 100% zu hell ist, würde ich gerne eine Rule einbauen die beim einschalten automatisch nochmal aus- u. wieder einschaltet so das 60% leuchten.
Ist so was realisierbar?
Info:
Die Lampe wird über einen Wechselschalter und eingebautem mit Shelly2 (Tasmota Firmware) geschaltet.

ITEM:

Code: Alles auswählen

Switch Shelly2_55C04A_A     "Wohnzimmer Decke"          <light>         (grpHomeNet,grpHaus,grpEG,grpWohnzimmer,grpLicht)       ["Switchable"]   {mqtt=">[broker:cmnd/Shelly2_55C04A/POWER1:command:*:default], <[broker:stat/Shelly2_55C04A/POWER1:state:default]"}
Die perfekte Lösung wäre wenn ich mit Alexa die 3 verschieden Helligkeitsstufen anwählen könnte. Dazu bräuchte aber wahrscheinlich eine Variable, welche die aktuelle der 3 Schaltstufen speichern würde und je nach Schaltzustand verschiedene rules anwählt.

Am wichtigsten wäre aber die 60%-Schaltung beim Start.
Hat jmd mit so etwas schon Erfahrung?
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

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

Re: Switch-Dimmer via Rule

Beitrag von udo1toni »

Ja, kann man realisiseren.
Die Rule muss sich merken, ob die Leuchte aus war oder nicht. Weiterhin braucht es einen Timer. So als (ungeprüfter) Schnellschuss:

Code: Alles auswählen

Dimmer WoziLicht "Wohnzimmer [%d]"

Code: Alles auswählen

// Globale Variablen werden zu Beginn der Datei definiert
var Timer  tWozi = null                                   // Timer um zwischen Aus und Dunkler zu unterscheiden

rule "Wozi Licht"
when
    Item Shelly2_55C04A_A received command                // Zustand geändert
then
    if(receivedCommand == ON) {                           // Kommando war ON
        tWozi?.cancel                                     // Timer stoppen
        switch (WoziLicht.state as Number) {              // Abhängig vom Zustand
            case 0: {                                     // falls vorher aus
                WoziLicht.postUpdate(100)                 // Neuer Status 100
                Shelly2_55C04A_A..sendCommand(OFF)        // Licht aus
                Thread::sleep(500)                        // kurz warten
                Shelly2_55C04A_A..sendCommand(ON)         // Licht an
            }
            case  60: WoziLicht.postUpdate(30)            // Neuer Status 30
            case  30: WoziLicht.postUpdate(100)           // Neuer Status 100
            case 100: WoziLicht.postUpdate(60)            // Neuer Status 60
        }
    } else                                                // Kommando war OFF
        tWozi = createTimer(now.plusSeconds(3), [ |       // Starte Timer
            WoziLicht.postUpdate(0)                       // Neuer Status 0
        ])
end
Die Herausforderung besteht darin, dass die Rule sich zwangsläufig selbst auslöst. Deshalb müssen wir uns merken, wo wir gerade stehen. Die Rule triggert jedes Mal, wenn das Licht geschaltet wird. Ist das Kommando OFF, wird ein Timer gestartet, der nach drei Sekunden den Zustand auf 0 setzt.
Ist das Kommando ON, wird zunächst ein eventuell laufender Timer abgebrochen. Dann prüft die Rule, ob das Licht aus war. Ist das der Fall, setzt sie den neuen Status auf 100 und schaltet das Licht aus, nach 500 MilliSec schaltet sie das Licht wieder ein. Dadurch erfolgt ein neuer Trigger. Nun ist der Zustand aber 100, die Rule ändert den Zustand auf 60. Wird das Licht dann manuell auf eine andere Stufe geschaltet, wird der Status jeweils angepasst.
Das Item kann direkt in der UI verwendet werden, um den Zustand der Leuchte abzubilden. (Man sollte allerdings ein Text Widget verwenden, damit kein Slider gemalt wird, der hätte ja keine Funktion.

Wie gesagt, ein Schnellschuss ohne getestet zu haben, aber schon beim formulieren bin ich an diversen Ecken angestoßen :) vielleicht habe ich schon alles bedacht, vielleicht auch nicht...
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Re: Switch-Dimmer via Rule

Beitrag von Heavy-Dee »

Erst mal Danke für die Info.
Da ich die nächsten 5Tg erst mal nicht zuhause bin, kann ich es noch nicht umsetzen.
Sobald ich wieder zuhause bin werde ich es versuchen. -> ICH MELDE MICH WIEDER:

P.S. ... bei deinem Know How wird das bestimmt was werden ! :D
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Re: Switch-Dimmer via Rule

Beitrag von Heavy-Dee »

Ich habe jetzt mal versucht den Code umzusetzen.
Allerdings wird die Timer Variable nicht verarbeitet :?:

Code: Alles auswählen

var Timer  tWozi = null
-> Visual Studio: Missing EOF at 'var'
d.h. Beim Einschalten wird die Rule nicht angesprochen.
Wenn ich diese und die Zeile

Code: Alles auswählen

tWozi?.cancel
auskommentiere dann geht es soweit.
Nur der Timer setzt mir nach 3 sek den Status auf Null.
Habe schon div Internetseiten durchgestöbert, aber auf denen wird der Timer genau so beschrieben.
Woran kann das liegen?
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

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

Re: Switch-Dimmer via Rule

Beitrag von udo1toni »

Solche "seltsamen" Fehler sprechen immer dafür, dass irgendwo in der Nähe ein Tippfehler ist, der die korrekte Codeverarbeitung schon im Vorfeld verhindert. Wie bearbeitest Du das rules-File? Welcher Editor? Direkt oder per Freigabe? Welche Umgebung nutzt Du? Windows? Linux?

Die Zeile

Code: Alles auswählen

var Timer tWozi = null 
muss wie im Kommentar zu lesen ganz oben in der Datei stehen. Damit wird der Timer global definiert.
die Zeile

Code: Alles auswählen

tWozi?.cancel
ist gleichbedeutend mit

Code: Alles auswählen

if(tWozi !== null) tWozi.cancel
also, falls der Zeiger auf einen Timer gesetzt ist, verwerfe den Timer.
openHAB4.3.5 stable in einem Debian-Container (bookworm) (Proxmox 8.4.1, LXC), mit openHABian eingerichtet

Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Re: Switch-Dimmer via Rule

Beitrag von Heavy-Dee »

Ich benutze den Visual Studio Editor auf Windows und das openHAB Verzeichniss ist als Netzlaufwerk eingebunden.
Fehler gefunden !!! :?
Das genaue lesen der Antwort war der Schlüssel !
Ich habe die Variable "var Timer Wozi" an den Anfang der Rule, NICHT aber an den Anfang der Datei geschrieben.
Jetzt geht es. -> DANKE

Der nächste Schritt werden drei verschiedene Schalter sein, mit denen ich die Helligkeit direkt via BasicUI ("Alexa") anwählen kann.
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

Antworten