Ankündigung

Einklappen
Keine Ankündigung bisher.

openHAB GROUP via KNX Taster schalten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

    openHAB GROUP via KNX Taster schalten

    Hallo zusammen,

    ich möchte gerne eine in openHAB 2.5.x definierte Gruppe (GROUP) via KNX Taster und aus der openHAB UI schalten. Die Gruppe besteht aus mehreren Lampen. Ich möchte den Zustand der Gruppe rein in openHAB speichern und nicht den Zustand eines (z.B. separaten) Aktor-Kanals nutzen.

    Mein Testszenario schaut wie folgt aus:

    Im Arbeitszimmer gibt es eine Deckenleuchte (A) und einen Deckenfluter (B).
    An einem Schaltaktor sind die Lampen auf Kanal A und B gelegt. Sie können also einzeln geschaltet werden.
    Ein KNX-Taster (MDT Glastaster 2) schaltet:
    • Taste 1 die Gruppe an/aus
    • Taste 3 die Deckenleuchte (A) einzeln
    • Taste 4 den Deckenfluter (B) einzeln
    Die Tasten auf dem KNX-Taster und auf der UI sollen immer den korrekten Zustand anzeigen.

    Bei der Gruppe hießt für mich: UND verknüpft. Was am Ende für mich sehr trickreich war: Schaltet man am KNX Taster die Deckenleuchte (Taste 3) oder den Deckenfluter (Taste 4) auf AUS, soll der Gesamtzustand der Gruppe auf AUS gehen. D.h. die Taste 1 am KNX Taster zeigt Zustand AUS. Drückt man jetzt erneut die Taste 1 auf dem KNX Taster schaltet die Gruppe wieder EIN.

    Ich habe das abschließend nur mit folgender (aufwendigen) Konfiguration hinbekommen. Habt ihr da eine einfachere Lösung im praktischen Einsatz?

    relevante openHAB Konfiguration:

    knx.things
    Code:
    Type switch :  LICHT_IM_ARBEITSZIMMER_TRIGGER "Licht im Arbeitszimmer Trigger"     [ ga="8/0/2" ]
    Type switch :  LICHT_IM_ARBEITSZIMMER_STATUS  "Licht im Arbeitszimmer Status"      [ ga="8/1/2" ]
    Type switch : LIC_AZ_L15_1      "LIC_AZ_L15_1 Licht: Arbeitszimmer schalten"                        [ga="0/2/6+<0/3/6"]
    Type switch : EGS_AZ_S15_3    "EGS_AZ_S15_3 Deckenfluter schalten"                                [ga="4/2/10+<4/3/10"]
    Licht.items
    Code:
    Group:Switch:AND(ON,OFF) LICHT_EG_AZ
                                                                          
    Switch LICHT_IM_ARBEITSZIMMER_TRIGGER ""     { channel="knx:device:bridge:actor_EGS:LICHT_IM_ARBEITSZIMMER_TRIGGER" }
    Switch LICHT_IM_ARBEITSZIMMER_STATUS  ""      { channel="knx:device:bridge:actor_EGS:LICHT_IM_ARBEITSZIMMER_STATUS" }
    
    Switch LIC_AZ_L15_1      "LIC_AZ_L15_1 Licht: Arbeitszimmer schalten"      (LICHT_EG_AZ)       { channel="knx:device:bridge:actor_EGS:LIC_AZ_L15_1" }
    Switch EGS_AZ_S15_3      "EGS_AZ_S15_3 Deckenfluter schalten"              (LICHT_EG_AZ)       { channel="knx:device:bridge:actor_EGS:EGS_AZ_S15_3" }
    Licht.rules
    Code:
    rule "Licht in Arbeitszimmer: Zustand an KNX-Taster senden"
    when
      Item LICHT_EG_AZ changed
    then
      LICHT_IM_ARBEITSZIMMER_STATUS.sendCommand(newState)
    end
     
    rule "Licht in Arbeitszimmer: Schaltbefehl von KNX-Taster umsetzen"
    when
      Item LICHT_IM_ARBEITSZIMMER_TRIGGER received update
    then
      LICHT_EG_AZ.sendCommand(newState)
    end
    Licht.sitemap
    Code:
      Frame label="Licht im Arbeitszimmer (Gruppe)" {
        Switch item=LICHT_EG_AZ icon="light" label="Licht im AZ"
      }
    relevante KNX Konfiguration:
    GA Gerät KO Objektfunktion
    8/0/2 LICHT_IM_AZ_GRUPPE_SCHALTEN KNX-Taster Taste 1 Schalten
    8/1/2 LICHT_IM_AZ_GRUPPE_STATUS KNX-Taster Taste 1 Wert für Umschaltung
    0/2/6 LICHT_IM_AZ_SCHALTEN KNX-Taster Taste 3 Schalten
    Schaltaktor Kanal A Schalten EIN/AUS
    0/3/6 LICHT_IM_AZ_STATUS KNX-Taster Taste 3 Wert für Umschaltung
    Schaltaktor Kanal A Status
    Die GAs für den Deckenfluter (4/2/10 und 4/3/10) sind analog der GAs für das Deckenlicht (0/2/6 und 0/3/6) nur natürlich für Taste 4 und Kanal B.

    Mit dieser Konfiguration geht es. Aber das muss doch auch einfacher, also ohne Rules gehen, oder?

    Ich habe mit einem Channel auf der Group experimentiert, aber ohne Erfolg:

    Code:
    Group:Switch:AND(ON,OFF) LICHT_EG_AZ { channel="knx:device:bridge:actor_EGS:LICHT_IM_ARBEITSZIMMER" }
    Viele Grüße aus Nürnberg
    Zuletzt geändert von mbengl; 05.01.2020, 20:52.

    #2
    Es gibt hier eine kleine "Komplikation", die aber eigentlich gar keine ist. Im Unterschied zu den echten Schaltkanälen gibt es keinen zuständigen Aktor für die Gruppe. Zum Glück ist das Problem leicht zu lösen:
    Channels:
    Code:
    Type switch-control : LICHT_IM_ARBEITSZIMMER "Licht gesamt"   [ ga="8/1/2+8/0/2" ]
    Type switch         : LIC_AZ_L15_1           "Deckenleuchte"  [ ga="0/2/6+<0/3/6" ]
    Type switch         : EGS_AZ_S15_3           "Deckenfluter"   [ ga="4/2/10+<4/3/10" ]
    Der springende Punkt ist, den Typ switch-control zu verwenden. Damit wird openHAB virtuell zum Aktor
    Der Status wird nun von openHAB an knx gesendet (entsprechend muss die Status GA vorne stehen!)
    Der Channel setzt Nachrichten von knx für die GA 8/0/2 nun als command auf den Bus um.

    Items:
    Code:
    Group:Switch:AND(ON,OFF) LICHT_EG_AZ "Alle Leuchten"
    Switch LICHT_IM_ARBEITSZIMMER { channel="knx:device:bridge:actor_EGS:LICHT_IM_ARBEITSZIMMER" }
    Switch LIC_AZ_L15_1 "Deckenleuchte" (LICHT_EG_AZ) { channel="knx:device:bridge:actor_EGS:LIC_AZ_L15_1" }
    Switch EGS_AZ_S15_3 "Deckenfluter" (LICHT_EG_AZ) { channel="knx:device:bridge:actor_EGS:EGS_AZ_S15_3" }
    Ganz ohne Rule geht es leider nicht, da die direkte Kopplung eines Group Items mit einem Channel meines Wissens nicht vorgesehen ist.
    Code:
    rule "Licht in Arbeitszimmer: Zustand an KNX-Taster senden"
    when
        Item LICHT_EG_AZ changed
    then
        LICHT_IM_ARBEITSZIMMER.postUpdate(newState)
    end
    
    rule "Licht in Arbeitszimmer: Schaltbefehl von KNX-Taster umsetzen"
    when
        Item LICHT_IM_ARBEITSZIMMER received command
    then
        LICHT_EG_AZ.sendCommand(receivedCommand)
    end
    Zuletzt geändert von udo1toni; 06.01.2020, 01:06.

    Kommentar


      #3
      Herzlichen Dank udo für den Optimierungshinweis :-)
      Unabhängig von der Lösung habe ich noch folgenden Seiteneffekt:

      Beim Einschalten (unabhängig ob von UI oder KNX-Taster) wird die Regel "Licht in Arbeitszimmer: Zustand an KNX-Taster senden" dreimal aufgerufen.
      Das ist unabhängig von der Anzahl der Lampen in der Gruppe (ich habe sie testweise auf 5 Lampen erweitert)

      Ich habe die Regeln um Logausgaben erweitert:
      Code:
      rule "Licht in Arbeitszimmer: Auf Schaltvorgang reagieren"
      when
        Item LICHT_EG_AZ changed
      then
        logInfo("logLicht", "LICHT_EG_AZ changed from {} to {}", previousState, newState)  
        logInfo("logLicht", "TriggeringItem: Name = {}, State = {}", triggeringItem.name, triggeringItem.state)  
        LICHT_IM_ARBEITSZIMMER.postUpdate(newState)
      end
      
      rule "Licht in Arbeitszimmer: Schaltbefehl von KNX-Taster umsetzen"
      when
        Item LICHT_IM_ARBEITSZIMMER received command
      then
        logInfo("logLicht", "LICHT_IM_ARBEITSZIMMER_TRIGGER received command")  
        LICHT_EG_AZ.sendCommand(receivedCommand)
      end
      und erhalte beim Einschalten folgende Logausgaben:

      Code:
      2020-01-06 11:50:53.159 [INFO ] [t.logLicht] - LICHT_IM_ARBEITSZIMMER_TRIGGER received command
      2020-01-06 11:50:53.161 [INFO ] [t.logLicht] - LICHT_EG_AZ changed from OFF to ON
      2020-01-06 11:50:53.161 [INFO ] [t.logLicht] - TriggeringItem: Name = LICHT_EG_AZ, State = ON
      2020-01-06 11:50:53.286 [INFO ] [t.logLicht] - LICHT_EG_AZ changed from ON to OFF
      2020-01-06 11:50:53.287 [INFO ] [t.logLicht] - TriggeringItem: Name = LICHT_EG_AZ, State = OFF
      2020-01-06 11:50:53.476 [INFO ] [t.logLicht] - LICHT_EG_AZ changed from OFF to ON
      2020-01-06 11:50:53.476 [INFO ] [t.logLicht] - TriggeringItem: Name = LICHT_EG_AZ, State = ON
      Der Switch in der OpenHAB UI toggelt auch ganz schnell einmal hin und her.
      Auf dem KNX-Bus sehe ich entsprechend drei Telegramme:

      Code:
       
      # Zeit Dienst Flags Prio Quelladresse Quellname Zieladresse Zielname Rout Typ DPT Info
      1412 06.01.2020 11:50:53,562 vom Bus Niedrig 1.0.100 OPENHAB 8/1/2 Lichter im Arbeitszimmer Status 6 GroupValueWrite 1.001 Schalten $01 | Ein
      1414 06.01.2020 11:50:53,655 vom Bus Niedrig 1.0.100 OPENHAB 8/1/2 Lichter im Arbeitszimmer Status 6 GroupValueWrite 1.001 Schalten $00 | Aus
      1420 06.01.2020 11:50:53,824 vom Bus Niedrig 1.0.100 OPENHAB 8/1/2 Lichter im Arbeitszimmer Status 6 GroupValueWrite 1.001 Schalten $01 | Ein
      Beim Ausschalten erhalte ich nur eine Ausgabe:

      Code:
      2020-01-06 11:58:30.581 [INFO ] [t.logLicht] - LICHT_IM_ARBEITSZIMMER_TRIGGER received command
      2020-01-06 11:58:30.583 [INFO ] [t.logLicht] - LICHT_EG_AZ changed from ON to OFF
      2020-01-06 11:58:30.583 [INFO ] [t.logLicht] - TriggeringItem: Name = LICHT_EG_AZ, State = OFF
      Woran könnte das liegen?

      Nochmals Danke!

      Kommentar


        #4
        Ja, das ist eigentlich logisch, beim Ausschalten behält die Gruppe ihren Status, weil das Statusupdate des Groupitems den Status auf OFF setzt, Ein OFF-Befehl ändert daran nichts.
        Beim Einschalten wird der ON-Befehl gesendet, das erste Item wechselt seinen Status, worauf der Status der Gruppe neu berechnet wird. Nur ein Item ist ON, also ist der neue Status OFF. Anschließend wechselt auch das zweite Item auf ON.
        Es wundert mich eher, dass die Anzahl der Items, die der Gruppe angehören hier keinen Einfluss hat. Wäre interessant, das mal zu analysieren.

        Kommentar

        Lädt...
        X