HM-RC-2-PBU-FM mit HmIP-BDT verbinden

Moderator: seppy

Antworten
Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

HM-RC-2-PBU-FM mit HmIP-BDT verbinden

Beitrag von Hoggle »

Hallo zusammen.
Ich hatte bis vor kurzem einen "normalen" HM-Schaltaktor mit Dimmfunktion (HM-LC-Sw1PBU-FM) und 2 HM-RC-2-PBU-FM und konnte die 2 direkt mit dem Schaltaktor verknüpfen, so das ich an 3 Schaltstellen eine Lampe schalten und dimmen konnte.
Leider hat der Schaltaktor (HM-LC-Sw1PBU-FM) den Geist aufgegeben und ich dachte mir, einfach schnell nen neuen Schaltaktor bestellt und fertig.
Jepp, leider knapp daneben gegriffen, da ich einfach mal nen HMIP-BDT gekauft habe und jetzt erst nachgelesen habe, das ich die "normalen" HM-Komponenten nicht mit den IP-Komponenten direkt verknüpfen kann.
Kann mir jetzt jemand dabei helfen, wie ich welche Kanäle(Items) miteinander per Rule verbinden kann, damit ich wieder von allen 3 Stellen die Lampe dimmen und schalten kann?
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: HM-RC-2-PBU-FM mit HmIP-BDT verbinden

Beitrag von Hoggle »

Vielleicht habe ich die Frage zu speziell verfasst.
Mal anders gefragt: Wie kann ich auf einen kurzen und einen langen Tastendruck eines Tasters reagieren, also kurz gedrückt soll eine Lampe, die an einem Schaltaktor angeschlossen ist, an- oder ausgeschaltet werden und bei einem langen Tastendruck heller oder dunkler gedimmt werden.
Beide Aktoren haben ein Dimmer-Item angelegt, aber ich weiß nicht, wie man das Rules-mäßig hin bekommt.
Klar, an und aus geht ja über sendcommand 0 oder 100 an das Dimmer-Items des Aktors, wo die Lampe angeschlossen ist, aber wie funktioniert das mit dem Dimmen?
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

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

Re: HM-RC-2-PBU-FM mit HmIP-BDT verbinden

Beitrag von udo1toni »

Ich hab ja keinen Schimmer von Homematic...

Was bekommst Du denn exakt für Signale vom Taster? In der Doku von Homematic habe ich auf die Schnelle das hier gefunden:
https://www.openhab.org/addons/bindings ... ic/#button
also stünden vier verschiedene Signale zur Verfügung, SHORT_PRESSED, LONG_PRESSED, LONG_REPEATED und LONG_RELEASED, welche beim Drücken/gedrückt Halten/Loslassen getriggert werden.

Was kannst Du für Kommandos an den Dimmer senden? Funktioniert INCREASE/DECREASE als Kommando? Dann könnte die Rule ungefähr so aussehen

Code: Alles auswählen

//globale Variablen vor der ersten Rule definieren!
var Boolean bDimDirection = false  // Dimmrichtung merken

rule "Taster 1"
when
    Channel 'homematic:HM-RC-19-B:ccu:KEQ0012345:1#BUTTON' triggered
then
    switch(receivedEvent) {
        case "SHORT_PRESSED" : {
            meinDimmer.sendCommand(
                if(meinDimmer.getStateAs(OnOffType) != ON)
                    ON
                else
                    OFF
            )
        }
        case "LONG_PRESSED"  : {
            meinDimmer.sendCommand(
                if(bDimDirection)
                    INCRESE
                else
                    DECREASE
            )
        }
        case "LONG_REPEATED" : {
                if(bDimDirection)
                    INCRESE
                else
                    DECREASE
            )
        }
        case "LONG_RELEASED" : {
            bDimDirection = !bDimDirection
        }
        default: logWarn("taster","Taster 1: Da ist was faul. Empfangenes Event ({}) ungültig",receivedEvent)
    }
end
Wenn Du Zwei-Tasten-Bedienung nutzt (also eine Taste für EIN/heller, die andere für AUS/dunkler), brauchst Du zwei Rules, die dafür entsprechend einfacher ausfallen können. Die gezeigte Variante ermöglicht Ein-Tasten-Bedienung.
Den ternären Operator habe ich hier nur zur besseren Lesbarkeit in getrennte Zeilen geschrieben :)

Wenn der Dimmer die Befehle INCREASE/DECREASE nicht unterstützt, musst Du den Helligkeitswert absolut setzen, das ist auch nicht weiter schlimm:

Code: Alles auswählen

rule "Taster 1"
when
    Channel 'homematic:HM-RC-19-B:ccu:KEQ0012345:1#BUTTON' triggered
then
    var nBright = meinDimmer.state as Number
    if(bDimDirection)
        nBright += 5  // in 5-Prozent-Schritten, bei Bedarf anpassen
    else
        nBright -= 5
    )
    if(nBright > 100) nBright = 100
    if(nBright < 0)   nBright = 0

    switch(receivedEvent) {
        case "SHORT_PRESSED" : {
            meinDimmer.sendCommand(if(meinDimmer.getStateAs(OnOffType) != ON) ON else OFF)
        }
        case "LONG_PRESSED"  : {
            meinDimmer.sendCommand(nBright)
        }
        case "LONG_REPEATED" : {
            meinDimmer.sendCommand(nBright)
        }
        case "LONG_RELEASED" : {
            bDimDirection = !bDimDirection
        }
        default: logWarn("taster","Taster 1: Da ist was faul. Empfangenes Event ({}) ungültig",receivedEvent)
    }
end
Eine weitere Möglichkeit bestünde darin, einen Timer zu starten, wenn LONG_PRESSED detektiert wird und diesen zu beenden, wenn LONG_RELEASED detektiert wird. Der Timer kümmert sich dann ums Dimmen und startet sich selbst wieder neu.

Code: Alles auswählen

//globale Variablen vor der ersten Rule definieren!
var Boolean bDimDirection = false  // Dimmrichtung merken
var Timer tDimmer = null

rule "Taster 1"
when
    Channel 'homematic:HM-RC-19-B:ccu:KEQ0012345:1#BUTTON' triggered
then
    switch(receivedEvent) {
        case "SHORT_PRESSED" : {
            meinDimmer.sendCommand(if(meinDimmer.getStateAs(OnOffType) != ON) ON else OFF)
        }
        case "LONG_PRESSED"  : {
            tDimmer = createTimer(now.plusNanos(10000000),[
                var nBright = meinDimmer.state as Number
                if(bDimDirection)
                    nBright += 5  // in 5-Prozent-Schritten, bei Bedarf anpassen
                else
                    nBright -= 5
                )
                if(nBright > 100) nBright = 100
                if(nBright < 0)   nBright = 0
                meinDimmer.sendCommand(nBright)
                tDimmer.reschedule(now.plusNanos(400000000)) // alle 400 Millisekunden ein Durchlauf
            ])
        }
        case "LONG_REPEATED" : {
        }
        case "LONG_RELEASED" : {
            tDimmer?.cancel
            bDimDirection = !bDimDirection
        }
        default: logWarn("taster","Taster 1: Da ist was faul. Empfangenes Event ({}) ungültig",receivedEvent)
    }
end
Vorteil: Du kannst die Dimmgeschwindigkeit aus openHAB heraus besser kontrollieren
Nachteil: Wenn LONG_RELEASED aus irgendeinem Grund nicht empfangen wird, läuft der Timer endlos, bis Du den Stopp des Timers auf anderem Wege erzwingst (z.B. ein cancel aus einer anderen Rule heraus, oder eben ein Restart von openHAB)
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: HM-RC-2-PBU-FM mit HmIP-BDT verbinden

Beitrag von Hoggle »

Hallo und mal wieder vielen, vielen Dank für deine ausführliche Antwort.
Ich habe mal alle Channel, die ich zur Verfügung habe, mal angehängt.

Als 1. mal den Schaltaktor, an dem die Lampe direkt angeschlossen ist:

Code: Alles auswählen

Switch                     EZLichtK1PRESSSHORT                      "Press short"                         
Switch                     EZLichtK1PRESSLONGSTART                  "Press long start"                    
Switch                     EZLichtK1PRESSLONG                       "Press long"                          
Switch                     EZLichtK1PRESSLONGRELEASE                "Press long release"

Switch                     EZLichtK2PRESSSHORT                      "Press short"                         
Switch                     EZLichtK2PRESSLONGSTART                  "Press long start"                    
Switch                     EZLichtK2PRESSLONG                       "Press long"                          
Switch                     EZLichtK2PRESSLONGRELEASE                "Press long release"

String                     EZLichtK3PROCESS                         "Process"                             
Number                     EZLichtK3SECTION                         "Section"                             
String                     EZLichtK3SECTIONSTATUS                   "Section status"                      
String                     EZLichtK3ACTIVITYSTATE                   "Activity state"                      
Dimmer                     EZLichtK3LEVEL                           "Level"                               
String                     EZLichtK3LEVELSTATUS                     "Level status"

Number                     EZLichtK4SECTION                         "Section"                             
String                     EZLichtK4SECTIONSTATUS                   "Section status"                      
String                     EZLichtK4ACTIVITYSTATE                   "Activity state"                      
Number                     EZLichtK4RAMPTIME                        "Ramp time"                           
Dimmer                     EZLichtK4LEVEL                           "Level"                               
Number                     EZLichtK4ONTIMEAUTOMATIC                 "On time automatic"                   
String                     EZLichtK4LEVELSTATUS                     "Level status"                        
Number                     EZLichtK4ONTIME                          "On time"                             
String                     EZLichtK4COMBINEDPARAMETER               "Combined parameter"                  
String                     EZLichtK4PROCESS                         "Process"

Number                     EZLichtK5SECTION                         "Section"                             
String                     EZLichtK5SECTIONSTATUS                   "Section status"                      
String                     EZLichtK5ACTIVITYSTATE                   "Activity state"                      
Dimmer                     EZLichtK5LEVEL                           "Level"                               
Number                     EZLichtK5ONTIMEAUTOMATIC                 "On time automatic"                   
Number                     EZLichtK5ONTIME                          "On time"                             
Number                     EZLichtK5RAMPTIME                        "Ramp time"                           
String                     EZLichtK5LEVELSTATUS                     "Level status"                        
String                     EZLichtK5COMBINEDPARAMETER               "Combined parameter"                  
String                     EZLichtK5PROCESS                         "Process"

String                     EZLichtK6SECTIONSTATUS                   "Section status"                      
Number                     EZLichtK6SECTION                         "Section"                             
String                     EZLichtK6ACTIVITYSTATE                   "Activity state"                      
String                     EZLichtK6LEVELSTATUS                     "Level status"                        
Number                     EZLichtK6ONTIME                          "On time"                             
Dimmer                     EZLichtK6LEVEL                           "Level"                               
Number                     EZLichtK6RAMPTIME                        "Ramp time"                           
Number                     EZLichtK6ONTIMEAUTOMATIC                 "On time automatic"                   
String                     EZLichtK6COMBINEDPARAMETER               "Combined parameter"                  
String                     EZLichtK6PROCESS                         "Process"
                             
Number                     EZLichtK7WEEKPROGRAMTARGETCHANNELLOCKS   "Week program target channel locks"   
Number                     EZLichtK7WEEKPROGRAMCHANNELLOCKS         "Week program channel locks"          
String                     EZLichtK7WEEKPROGRAMTARGETCHANNELLOCK    "Week program target channel lock"    
String                     EZLichtK7COMBINEDPARAMETER               "Combined parameter"                  
Und hier die Channel, die ich von einem der beiden Taster habe:

Code: Alles auswählen

Switch   EZLichtFl1PRESSLONG            "Press long"             
Switch   EZLichtFl1PRESSCONT            "Press cont"             
Switch   EZLichtFl1PRESSSHORT           "Press short"            
Switch   EZLichtFl1PRESSLONGRELEASE     "Press long release"     
Switch   EZLichtFl1INSTALLTEST          "Install test"
           
Switch   EZLichtFl2INSTALLTEST          "Install test"           
Switch   EZLichtFl2PRESSLONG            "Press long"             
Switch   EZLichtFl2PRESSLONGRELEASE     "Press long release"     
Switch   EZLichtFl2PRESSCONT            "Press cont"             
Switch   EZLichtFl2PRESSSHORT           "Press short"            
Für mich noch einmal zur Erklärung, wenn es auch sehr vereinfacht sein sollte:
Der Schaltaktor (Der mit der Lampe) besteht doch aus 2 Geräten, oder? 1 x der Empfänger mit den Stromanschlüssen für die Lampe und dann ein Taster, ähnlich den beiden anderen, die ich noch an der Flur- und der Terassentür habe?!?

Ich weiß, man mag nicht so gerne Screenshoots, aber da kann man die "Sortierung" der Channel ganz gut erkennen
Channel1.png
Dimmer Transmitter.png
Dimmer virtual Receiver.png
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

Hoggle
Beiträge: 221
Registriert: 16. Dez 2017 10:49
Answers: 0

Re: HM-RC-2-PBU-FM mit HmIP-BDT verbinden

Beitrag von Hoggle »

Und hier noch die "Sortierung eines Tasters:
Taster.png
Okay, der Trigger ist der Button.

Increase oder decrease habe ich aber nicht gesehen.
Du hast keine ausreichende Berechtigung, um die Dateianhänge dieses Beitrags anzusehen.
RPI4/8GB RAM mit openhabian (bullseye) - Kernel Linux 6.1.21-v8+ - openhab 4.0.2 - Release Build - HM-CCU3 - ZWave UZB-USB Stick - Wifi-LED-Stripes - Logitech Harmony Hub - AVM Fritzbox - Enigma2-Box - Gardena HUB - Fronius-Binding - Miele@Home

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

Re: HM-RC-2-PBU-FM mit HmIP-BDT verbinden

Beitrag von udo1toni »

Der erste "Fehler" ist schon, dass Du überhaupt alle Channel auflistest, bis auf (weil Du diese Channel nicht mit Items verknüpfen kannst) die beiden wichtigsten Channel einfach unterschlägst :) Erster Screenshot. dritter und neunter Channel Taster 1#BUTTON und 2#BUTTON. Dies sind die Trigger Channel, welche eben nicht mit einem Item verlinkt werden können, sondern direkt in Rules verwendet werden (wie in meinem Beispiel gezeigt)
Falls diese Channel übrigens keine Daten liefern, dann liegt das daran, dass sie mindestens einen "Empfänger" brauchen, sie müssen also in Homematic mit einem (notfalls virtuellen) Punkt verknüpft sein (ist in der Doku in openHAB erwähnt).

Wie wird nun der Dimmer angesteuert... Ich habe ja darauf hingewiesen, dass ich von Homematic erst mal keine Ahnung habe...
Aber Homematic ist ja grundsätzlich in der Lage, über die CCU Geräte "intern" miteinander zu verknüpfen. Dass das mit Deinen Geräten jetzt so nicht geht, weil sie unterschiedliche Protokolle verwenden, ist erst mal unerheblich.
Wie sähe eine Verknüpfung in der Homematic ccu aus (also auf welchen Befehl würdest Du den langen Tastendruck verbinden)?
Eventuell verbirgt sich der Befehl auch hinter den beiden Tastern, die ja Bestandteil des Dimmers sind. Dann wäre ein Befehl EZLichtK1PRESSLONGSTART der Befehl, mit dem Aufdimmen zu beginnen und ein Befehl EZLichtK1PRESSLONGRELEASE, diesen Vorgang zu beenden. Für die 2. Taste wäre es entsprechend die Gegenrichtung. Gewöhnlich wird man die Tasten ja immer in Verbindung mit dem Dimmer verwenden, also zur lokalen Bedienung.

Falls Du überhaupt keine Zentrale nutzt (die Geräte können ja wohl auch untereinander kommunizieren, nur halt nicht, wenn sie unterschiedliche Medien und/oder Protokolle verwenden), schau mal nach RaspberryMatic, damit sollte man eine CCU3 ersetzen können.

Falls das alles nicht funktioniert, steht immer noch die letzte Variante zur Verfügung, openHAB sendet absolute Helligkeitswerte, und zwar zyklisch, beginnend mit dem Langen Drücken auf eine Taste, und dann aufsteigend (bzw. absteigend) bis die Taste wieder losgelassen wird.
Wenn der Dimmvorgang über zwei Taster gesteuert werden soll:

Code: Alles auswählen

rule "Taster 1"
when
    Channel 'homematic:HM-RC-19-B:ccu:KEQ0012345:1#BUTTON' triggered
then
    var nBright = meinDimmer.state as Number
    nBright += 5  // in 5-Prozent-Schritten, bei Bedarf anpassen
    if(nBright > 100) nBright = 100

    switch(receivedEvent) {
        case "SHORT_PRESSED" : {
            meinDimmer.sendCommand(ON)
        }
        case "LONG_PRESSED"  : {
            meinDimmer.sendCommand(nBright)
        }
        case "LONG_REPEATED" : {
            meinDimmer.sendCommand(nBright)
        }
        case "LONG_RELEASED" : {
        }
        default: logWarn("taster","Taster 1: Da ist was faul. Empfangenes Event ({}) ungültig",receivedEvent)
    }
end

rule "Taster 2"
when
    Channel 'homematic:HM-RC-19-B:ccu:KEQ0012345:2#BUTTON' triggered
then
    var nBright = meinDimmer.state as Number
    nBright -= 5
    if(nBright < 0)   nBright = 0

    switch(receivedEvent) {
        case "SHORT_PRESSED" : {
            meinDimmer.sendCommand(OFF)
        }
        case "LONG_PRESSED"  : {
            meinDimmer.sendCommand(nBright)
        }
        case "LONG_REPEATED" : {
            meinDimmer.sendCommand(nBright)
        }
        case "LONG_RELEASED" : {
        }
        default: logWarn("taster","Taster 1: Da ist was faul. Empfangenes Event ({}) ungültig",receivedEvent)
    }
end
Die eine Rule kümmert sich um den einen Taster, die andere um den anderen Taster.
Bei der einen Rule wird bei kurzem Druck eingeschaltet, bei langem Druck die Helligkeit in 5-Prozent-Stufen erhöht, bei der zweiten Rule ist es genau umgekehrt.

Wenn der Channel nicht funktioniert, welche Events empfängst Du beim Drücken des Tasters (kurz, lang start, loslassen, getrennt für beide Tasten)
openHAB4.2.2 stable in einem Debian-Container (bookworm) (Proxmox 8.2.8, LXC), mit openHABian eingerichtet

Antworten