KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Benutzeravatar
TuxTux
Beiträge: 65
Registriert: 6. Nov 2019 23:47
Answers: 0
Wohnort: Achim

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von TuxTux »

Empfangen wird Increase und Decrease sowohl für den Dimmwert als auch für die Farbtemperatur. Ich denke bei der Farbtemperatur komme ich zwecks Umrechnung nicht um eine Rule drum rum, aber beim Dimmen müsste es doch eigentlich klappen. Wie gesagt, Increase kommt beim drücken auf + beim Taster und Decrease beim drücken auf - . Stimmt den meine Zuordnung der GA’s beim Dimmer in OpenHAB? Komme da immer wieder durcheinander ;-).
Proxmoxx 6.xx @ HP T610 8GB Ram 128GB SSD
HOST 1: LXC Ubuntu 18.04 --> Fhem 6.xx SIGNALDUINO / MQTT / ZIGBEE / HOMEBRIDGE
HOST 2: LXC Ubuntu 18.04 --> OH 2.xx BSB BUS /KNX / WEATHER / NTP / ASTRO / MQTT / TIMESCHEDULING BLINDS
HOST 3: LXC Ubuntu 20.4 --> TVHEADEND Server Running Zattoo
HOST 4: LXC Ubuntu 20.04 --> OH 3.xx actual playground

"No message, is a good message"

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

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von udo1toni »

Zuordnung der GA sieht für mich gut aus. Eigentlich auch recht einfach zu merken, switch ist 1 Bit, increaseDecrease ist 4 bit und position ist 8 Bit. Bei einem Prozentwert ist 8 Bit naheliegend, und bei increaseDecrease kann man in knx die Schrittweite einstellen, heißt, es gibt ein Bit für die Richtung und drei weitere Bit für die Schrittweite.
Da Du aber INCREASE empfängst und der Dimmer dennoch DECREASE ausführt, muss das ein Problem des Dimmers selbst sein. Was passiert, wenn Du in openHAB selbst ein INCREASE sendest? openHAB steuert die Dimmer gewöhnlich über Absolutwerte an, eventuell musst Du auch an dieser Stelle mit einer Rule eingreifen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
TuxTux
Beiträge: 65
Registriert: 6. Nov 2019 23:47
Answers: 0
Wohnort: Achim

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von TuxTux »

Wie immer wirst du recht haben.
Leider komme ich mit der Script Sprache in den Rules nicht weiter. Ich verstehe die Syntax einfach nicht bzw. wie ich zum Beispiel an das gesendete command komme um es auszuwerten. Es ist einfach unbefriedigend. Habe gerade 4 Stunden davor gesessen und nichts geschafft noch verstanden. Das ist echt ermüdend und frustrierend.
Proxmoxx 6.xx @ HP T610 8GB Ram 128GB SSD
HOST 1: LXC Ubuntu 18.04 --> Fhem 6.xx SIGNALDUINO / MQTT / ZIGBEE / HOMEBRIDGE
HOST 2: LXC Ubuntu 18.04 --> OH 2.xx BSB BUS /KNX / WEATHER / NTP / ASTRO / MQTT / TIMESCHEDULING BLINDS
HOST 3: LXC Ubuntu 20.4 --> TVHEADEND Server Running Zattoo
HOST 4: LXC Ubuntu 20.04 --> OH 3.xx actual playground

"No message, is a good message"

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

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von udo1toni »

? Die DSL ist nun wirklich einfach. Ich gebe aber zu, dass es leider keine vernünftige Dokumentation gibt.

Grundsätzlich möchte ich immer zu einer Text-DSL Rule raten, das liegt aber natürlich daran, dass ich die DSL bevorzuge :)

Du hast ein Item BrightnessDimmer. Willst Du einen Befehl an dieses Item senden, so verwendest Du dazu die Method .sendCommand() Als Befehl stehen ON,OFF,INCREASE,DECREASE sowie dei Zahlen 0-100 zur Verfügung (weil es sich um ein Dimmer Item handelt).
Umgekehrt liefert das Item den Status des Dimmers zurück. Der Status eines Dimmers ist grundsätzlich ein Zahlenwert von 0 - 100.

Alle Text Rules haben ein festgelegtes Format:

Code: Alles auswählen

rule "Name der Rule" // Der Name muss eindeutig sein, er darf Sonderzeichen und Leerzeichen enthalten
when                 // Beginn des Bereichs, ni dem die Trigger für die Rule stehen
     // irgendwelche Trigger
then                 // Beginn des Codeblocks, welches ausgeführt werden soll, wenn einer der Trigger auftritt
     // irgendwelceh Anweisungen
end                  // Ende der Rule
Du könntest also z.B. ein Switch Item im System anlegen, z.B. Test. das machst Du auf der Oberfläche verfügbar, aber mit zwei Schaltflächen, die gezielt ON bzw. OFF senden. Du kansnt damit also auch dreimal hintereinander OFF senden, ohne zwischendurch (wie bei einem gewöhnlichen Schalter) ON senden zu müssen.
Nun kannst Du eine kleine Rule programmieren:

Code: Alles auswählen

rule "test Dimmer Increase und Decrease"
when
    Item Test received command // Das Item Test hat ein Kommando empfangen, z.B. weil in der UI die Schaltfläche gedrückt wurde
then
    if(receivedCommand == ON) { // falls das empfangene Kommando ON lautet
        BrightnessDimmer.sendCommand(INCREASE)
    } else {
        BrightnessDimmer.sendCommand(DECREASE)
    }
end
Die geschweiften Klammern sind hier streng genommen nicht notwendig. Sie sorgen dafür, dass die if-Anweisung sich auf alle Befehle innerhalb des Klammer-Blocks bezieht.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
TuxTux
Beiträge: 65
Registriert: 6. Nov 2019 23:47
Answers: 0
Wohnort: Achim

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von TuxTux »

Hallo Udo,

vielen Dank für dein Feedback. Wo bekomme ich den genau diese Informationen her die du mir da aufgezählt hast?
Ist es wirklich so das man nur einen Zahlenwert 0-100 vom Dimmer erhalten kann? Mein Log liefert mir hier beim runter Dimmern

Code: Alles auswählen

2022-03-14 19:01:59.944 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'BrightnessDimmer' received command DECREASE
bzw.

Code: Alles auswählen

2022-03-14 19:02:25.739 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'BrightnessDimmer' received command INCREASE
beim hoch Dimmen.

Genau das möchte ich dann auch in der Rule nutzen. Ein ON und OFF erhalte ich ebenfalls beim kurzen antippen.

Ich hätte also alles nötige um eine Rule zu erstellen meine Interpretation würde dann wie folgt aussehen.

Code: Alles auswählen

rule "MY Zigbee Dimmer"
when
    Item BrightnessDimmer received command // Das Item BrightnessDimmer hat ein Kommando empfangen (KNX Taster)
then
    switch(receivedCommand) {
        case "ON" : {
            testhwr_LIGHTLevelControl.sendCommand(100)	// testhwr_LightLevelControl an (ZIGBEE )
        }
        case "OFF" : {
        	testhwr_LIGHTLevelControl.sendCommand(0)	// testhwr_LightLevelControl aus(ZIGBEE )
        }
        case "INCREASE" :{
        	testhwr_LIGHTLevelControl.sendCommand(BrightnessDimmer.state + 5)	//testhwr_LightLevelControl +5 (ZIGBEE )
        }
         case "Decrease" :{
        	testhwr_LIGHTLevelControl.sendCommand(BrightnessDimmer.state - 5)	//testhwr_LightLevelControl -5 (ZIGBEE )
        }
end
Ggf. müsste man hier jetzt noch eine Verzögerung fürs Dimmen einbringen und ggf. eine Verriegelung für den min und max Wert aber im großen und ganzen stelle ich mir das so vor.
Da ich aber nicht sehen kann was ich von den ITEMS lesen kann kann ich es auch nicht testen. Irgendwas copy und pasten ist nicht so mein Ding, ich will es verstehen und dann implementieren. Ich denke du kannst das nachvollziehen.

Den KNX Teil habe ich wie du sehen kannst ja über .items und .things schon definiert, beim ZIGBEE habe ich alles über die WEBUI definiert und auch hier die Items angelegt. Über die UI kann ich auch die Helligkeit und Farbtemperatur per Slider ändern.

Bei der Rule harkt jetzt einfach nur. :-(

Vielen Dank schon mal für dein Feedback.
Proxmoxx 6.xx @ HP T610 8GB Ram 128GB SSD
HOST 1: LXC Ubuntu 18.04 --> Fhem 6.xx SIGNALDUINO / MQTT / ZIGBEE / HOMEBRIDGE
HOST 2: LXC Ubuntu 18.04 --> OH 2.xx BSB BUS /KNX / WEATHER / NTP / ASTRO / MQTT / TIMESCHEDULING BLINDS
HOST 3: LXC Ubuntu 20.4 --> TVHEADEND Server Running Zattoo
HOST 4: LXC Ubuntu 20.04 --> OH 3.xx actual playground

"No message, is a good message"

Benutzeravatar
TuxTux
Beiträge: 65
Registriert: 6. Nov 2019 23:47
Answers: 0
Wohnort: Achim

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von TuxTux »

Hallo Udo,

ich hab mich jetzt nochmal dran gesetzt und Stück für Stück angefangen.

Code: Alles auswählen

var int iDimming  
 
rule "Zigbee Dimmer"
when
    Item BrightnessDimmer received command
    //Item BrightnessDimmer changed 
then
    logInfo("BrightnessDimmer", "BrightnessDimmer hat folgenden Wert empfangen {}", receivedCommand)
    
     //INCREASE DECREASE und MIN MAX arbeiten
    iDimming = (testhwr_LIGHTLevelControl.state as Number).intValue
    if(receivedCommand == INCREASE) iDimming +=5 else if(receivedCommand == DECREASE) iDimming -=5
    if(iDimming <= 0) iDimming = 0 else if(iDimming >= 100) iDimming = 100
    
    switch(receivedCommand) {
        case ON : {
            logInfo("BrightnessDimmer", "ON!!!!!!!!!!!!!!!!!!!!!!")
            testhwr_LIGHTLevelControl.sendCommand(ON)
        }
        case OFF : {
            logInfo("BrightnessDimmer", "OFF!!!!!!!!!!!!!!!!!!!!!!")
             testhwr_LIGHTLevelControl.sendCommand(OFF)
        }
        case INCREASE :{
            logInfo("BrightnessDimmer", "INCREASE!!!!!!!!!!!!!!!!!!!!!!")
            testhwr_LIGHTLevelControl.sendCommand(iDimming)
        }
        case DECREASE :{
            logInfo("BrightnessDimmer", "DECREASE!!!!!!!!!!!!!!!!!!!!!!")
            testhwr_LIGHTLevelControl.sendCommand(iDimming)
        }
        default:{
            /*if(iDimming >= 0 && iDimming <= 100 )
            {
                logInfo("BrightnessDimmer", "Absolut Value {}", BrightnessDimmer.state )
                testhwr_LIGHTLevelControl.sendCommand(iDimming)
            }       
            else*/
                loginfo("BrightnessDimmer", "FEHLER")
        }
    }
        
end
Die LogInfo dient natürlich nur dem testen :-)

Kann jetzt Ein / Aus schalten und hoch und runter dimmen. Leider zieht das KNX Item und auch die Anzeige am Taster nicht mit. ON / OFF wird syncronisiert, das value oder besser gesagt der state nicht. Könntest du hier vielleicht nochmal einen Tipp geben?

Vielen Dank im Voraus und einen schönen Abend!
Proxmoxx 6.xx @ HP T610 8GB Ram 128GB SSD
HOST 1: LXC Ubuntu 18.04 --> Fhem 6.xx SIGNALDUINO / MQTT / ZIGBEE / HOMEBRIDGE
HOST 2: LXC Ubuntu 18.04 --> OH 2.xx BSB BUS /KNX / WEATHER / NTP / ASTRO / MQTT / TIMESCHEDULING BLINDS
HOST 3: LXC Ubuntu 20.4 --> TVHEADEND Server Running Zattoo
HOST 4: LXC Ubuntu 20.04 --> OH 3.xx actual playground

"No message, is a good message"

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

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von udo1toni »

Ja, Du musst da halt unterscheiden... :)
Das Dimmer Item hält einen Status. Der Status ist eine Zahl von 0 -100 (oder UNDEV oder NULL, falls es noch keinen definierten Status gibt.)
Das Dimmer Item kann aber auch ein Kommando empfangen, das kann eine Zahl sein, aber auch ON, OFF, INCREASE oder DECREASE. Wenn Du also in einer Rule einen Status eines Dimmers abfragst, kann es nur der Zahlenwert sein. wenn Du receivedCommand auswertest, gehen auch die genannten Begriffe.
Aber.
Und jetzt kommt der zweite Punkt, an dem Du unterscheiden musst.
ON ist etwas anderes als "ON", wie auch 45 etwas anderes als "45" ist.
ON, OFF, INCREASE und DECREASE sind Commands, während "ON", "OFF", "INCREASE" und "DECREASE" Strings sind.

Deine Rule sollte also so funktionieren:

Code: Alles auswählen

rule "MY Zigbee Dimmer"
when
    Item BrightnessDimmer received command // Das Item BrightnessDimmer hat ein Kommando empfangen (KNX Taster)
then
    switch(receivedCommand) {
        case ON : {
            testhwr_LIGHTLevelControl.sendCommand(100)	// testhwr_LightLevelControl an (ZIGBEE )
        }
        case OFF : {
        	testhwr_LIGHTLevelControl.sendCommand(0)	// testhwr_LightLevelControl aus(ZIGBEE )
        }
        case INCREASE :{
        	testhwr_LIGHTLevelControl.sendCommand(BrightnessDimmer.state + 5)	//testhwr_LightLevelControl +5 (ZIGBEE )
        }
         case DECREASE :{
        	testhwr_LIGHTLevelControl.sendCommand(BrightnessDimmer.state - 5)	//testhwr_LightLevelControl -5 (ZIGBEE )
        }
end
Etwas allgemeiner und mit ein paar Tests, um die schlimmsten Fehler abzufangen:

Code: Alles auswählen

rule "MY Zigbee Dimmer"
when
    Item BrightnessDimmer received command                    // Das Item BrightnessDimmer hat ein Kommando empfangen (KNX Taster)
then
    var Integer iLevel = 0                                    // Variable initialisieren
    if(BrightnessDimmer.state instanceof Number)              // Falls Item gültigen Status enthält
        iLevel = (BrightnessDimmer.state as Number).intValue  // Nutze diesen als Wert

    switch(receivedCommand) {                                 // Unterscheide nach empfangenem Kommando
        case ON      : iLevel = 100                           // Falls ON setze 100
        case OFF     : iLevel = 0                             // Falls OFF setze 0
        case INCREASE: iLevel += 5                            // Falls INCREASE erhöhe um 5
        case DECREASE: iLevel -= 5                            // Falls DECREASE verringere um 5
        default      : iLevel = (receivedCommand as Number).intValue // wenn auch Absolutwerte empfangen werden können
    }
    if(iLevel > 100) iLevel = 100                             // Falls über 100 setze auf 100
    if(iLevel <   0) iLevel = 0                               // Falls unter 0 setze auf 0
    if(BrightnessDimmer.state != iLevel)                      // Falls Ist von Soll abweicht setze neuen Wert
        BrightnessDimmer.postUpdate(iLevel)
    if(testhwr_LIGHTLevelControl.state != iLevel)             // Falls Ist von Soll abweicht, sende Befehl
        testhwr_LIGHTLevelControl.sendCommand(iLevel)
end
Wahlweise kannst Du auch statt

Code: Alles auswählen

    switch(receivedCommand)
einfach

Code: Alles auswählen

    switch(receivedCommand.toString)
verwenden. Dann musst Du tatsächlich Anführungszeichen um die Befehle setzen.
der default Zweig bliebe aber unverändert. Diesen bruchst Du auch, wenn Du das Item BrightnessDimmer in die UI einbaust und von dort zum Steuern nutzen willst. Steuerung in der UI löst jeweils ein received command Event aus. Dimmer Items werden in der UI gewöhnlich als Slider gerendert, womit das Item dann nur Befehle 0 - 100 empfängt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
TuxTux
Beiträge: 65
Registriert: 6. Nov 2019 23:47
Answers: 0
Wohnort: Achim

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von TuxTux »

Hallo Udo,

da haben wir gestern Abend wohl Zeitglich geschrieben :-) Hab mir gestern Abend einfach nochmal die Zeit genommen und ein wenig getestet. Leider ist es immer sehr spät und dann arbeitet das Gehirn ein wenig langsamer.

Was sagst du zu meiner Variante? Bleibt nur der Sync zwischen den beiden Items, denke das könnte dann das PostUpdate lösen oder ?
Proxmoxx 6.xx @ HP T610 8GB Ram 128GB SSD
HOST 1: LXC Ubuntu 18.04 --> Fhem 6.xx SIGNALDUINO / MQTT / ZIGBEE / HOMEBRIDGE
HOST 2: LXC Ubuntu 18.04 --> OH 2.xx BSB BUS /KNX / WEATHER / NTP / ASTRO / MQTT / TIMESCHEDULING BLINDS
HOST 3: LXC Ubuntu 20.4 --> TVHEADEND Server Running Zattoo
HOST 4: LXC Ubuntu 20.04 --> OH 3.xx actual playground

"No message, is a good message"

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

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von udo1toni »

Letztlich kannst Du die Rule so gestalten, wie Du willst. Aber wirf noch mal einen Blick auf meinen Vorschlag. Ich denke, mein Code ist etwas strukturierter :)
Die Kommentare kann man natürlich weg lassen. Logmeldungen sind beim Testen gut, müllen aber das Log voll.
Ein nicht ganz unwichtiger Punkt: Meine Rule sendet nur bei Bedarf Befehle (also wenn es eine Änderung gegenüber dem vorherigen Zustand gibt) Das kommt z.B. zum Tragen, wenn der Dimmer die maximale Helligkeit erreicht hat (genauso in der Gegenrichtung).
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Benutzeravatar
TuxTux
Beiträge: 65
Registriert: 6. Nov 2019 23:47
Answers: 0
Wohnort: Achim

Re: KNX "dimmer-control" reagiert nicht auf 3.007 Dimmer-Schritt

Beitrag von TuxTux »

Guten Abend Udo,

wie zu erwarten klappt es sehr gut. Werte werden in alle Richtungen übertragen und angezeigt. Vielen lieben Dank!!!
Beim langen Tastendruck klappt es leider nicht, habe es mit dem frequenzy parameter in der .things versucht, leider ohne Erfolg. Im Log steht auch nur eine Meldung ebenso im Bus Monitor.

Was muss hier jetzt noch ein Timer in die Rule integriert werden?

Gruss

Sebastian
Proxmoxx 6.xx @ HP T610 8GB Ram 128GB SSD
HOST 1: LXC Ubuntu 18.04 --> Fhem 6.xx SIGNALDUINO / MQTT / ZIGBEE / HOMEBRIDGE
HOST 2: LXC Ubuntu 18.04 --> OH 2.xx BSB BUS /KNX / WEATHER / NTP / ASTRO / MQTT / TIMESCHEDULING BLINDS
HOST 3: LXC Ubuntu 20.4 --> TVHEADEND Server Running Zattoo
HOST 4: LXC Ubuntu 20.04 --> OH 3.xx actual playground

"No message, is a good message"

Antworten