Ankündigung

Einklappen
Keine Ankündigung bisher.

TP Link dimmbare LED Leuchte über KNX steuern

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

    TP Link dimmbare LED Leuchte über KNX steuern

    Hallo zusammen,

    ich habe eine Stehleuchte, welche zum an/aus schalten an einem KNX Schaltaktor hängt.

    Nun habe ich, weil ich die Leuchte dimmen möchte, dafür ein dimmbares LED Leuchtmittel (TP Link KL110) gekauft, welches über WLAN mittels dem TP Link Binding https://www.openhab.org/addons/bindi...linksmarthome/ an openHAB angebunden ist (OH 2.5.5).

    Funktioniert auch wunderbar.

    Nur möchte ich nun, dass die Leuchte auch über den KNX Bus gesteuert (also nicht nur an/aus sondern auch gedimmt werden kann).

    Bis jetzt hatte ich folgende Konfiguration:

    KNX things (Schaltaktor an/aus)
    Code:
    Type switch : GF_Wohnzimmer_Licht_Stehleuchte "Licht Stehleuchte (Wand Süd rechts)" [ ga="2/1/6+<2/4/6" ]
    KNX item (Schaltaktor an/aus)
    Code:
    Switch GF_Wohnzimmer_Licht_Stehleuchte "Wohnzimmer Stehleuchte [MAP(de.map):%s]" <light> (GF_Wohnzimmer, gLight) [ "Lighting" ] {channel="knx:device:bridge:generic:GF_Wohnzimmer_Licht_Stehleuchte"}
    TP Link things (Dimmen)
    Code:
    tplinksmarthome:kl110:DF7AF4 "Stehleuchte" [ ipAddress="192.168.10.204", refresh=60 ]
    TP Link item (Dimmen)
    Code:
    Dimmer GF_Wohnzimmer_Licht_Stehleuchte_Tplink "Wohnzimmer Stehleuchte TPLink [%d %%]" <light> (GF_Wohnzimmer, gLight) { channel="tplinksmarthome:kl110:DF7AF4:brightness" }
    Zusätzlich habe ich nun noch ein dimmer-control thing angelegt, um vom KNX Bus Kommandos an die TP Link Leuchte zu senden:
    Code:
    Type dimmer-control : GF_Wohnzimmer_Licht_Stehleuchte_KNX "Licht" [ switch="1/1/22+<1/4/22", position="1/3/22+<1/5/22", increaseDecrease="1/2/22" ]

    Was mir nun nicht klar ist, ist wie ich die beiden Welten (KNX und TP Link) Mappen muss, um z.B. über den KNX Bus ein heller/dunkler oder ein 50% Helligkeit an die TP Link Leuchte senden zu können?

    #2
    Es gibt hier zwei Möglichkeiten. Schau aber bitte zunächst, ob Du nicht noch im dimmer-control Channel den Parameter frequency setzen musst. Dafür kommt es darauf an, ob der Wandtaster mit Start-Stop-Dimming arbeitet oder mit Telegrammwiederholung (in letzterem Fall wäre frequency unnötig).
    Kann die stehleuchte mit INCREASE/DECREASE Befehlen umgehen? dann sollte es reichen, beide Channel mit dem gleichen Item zu verlinken:
    Code:
    Dimmer GF_Wohnzimmer_Licht_Stehleuchte_Tplink "Wohnzimmer Stehleuchte TPLink [%d %%]" <light> (GF_Wohnzimmer, gLight) { channel="tplinksmarthome:kl110:DF7AF4:brightness", channel="knx:device:bridge:generic:GF_Wohnzimmer_Licht_Stehleuchte_KNX" }
    Falls das nicht funktioniert, müsstest Du halt eine Rule verwenden, welche auf ein Item received command triggert (mit dem Item, welches Du dann mit dem dimmer-control verknüpfst).

    Kommentar


      #3
      Ok danke, habe das Item wie von dir vorgeschlagen angepasst und es hat dann mit absoluten Werten (%) direkt funktioniert.

      Im nächsten Schritt bin das Dimmen über Schritte am Taster angegangen. Dieser sendet INCREASE und DECREASE Kommandos. Der Taster hat folgende Parameter:

      taster_wz.png

      Das dimmer-control item habe ich um den frequency Parameter ergänzt
      Code:
      Type dimmer-control : GF_Wohnzimmer_Licht_Stehleuchte_KNX "Licht" [ switch="1/1/22+<1/4/22", position="1/3/22+<1/5/22", increaseDecrease="1/2/22", frequency=400 ]
      Und ich habe eine Rule geschrieben, welche die INCREASE und DECREASE Werte in absolute Werte (%) umwandelt, damit die TP Link damit etwas anfangen kann
      Code:
      rule "RULE_TPLink_Wohnzimmer_Stehleuchte_Dimmen_KNX "
      when
      Item GF_Wohnzimmer_Licht_Stehleuchte_KNX received command
      then
      // Umwandlung von INCREASE und DECREASE KNX Kommandos in absolute Dimmwerte (%)
      if (receivedCommand.toString == "INCREASE") {
      val dimVal = GF_Wohnzimmer_Licht_Stehleuchte_Tplink.state as Number
      val newDimVal = dimVal + 12.5
      if (newDimVal > 100) {
      GF_Wohnzimmer_Licht_Stehleuchte_Tplink.sendCommand (100)
      }
      else {
      GF_Wohnzimmer_Licht_Stehleuchte_Tplink.sendCommand (newDimVal)
      }
      }
      if (receivedCommand.toString == "DECREASE") {
      val dimVal = GF_Wohnzimmer_Licht_Stehleuchte_Tplink.state as Number
      val newDimVal = dimVal - 12.5
      if (newDimVal <= 0) {
      GF_Wohnzimmer_Licht_Stehleuchte_Tplink.sendCommand (0)
      }
      else {
      GF_Wohnzimmer_Licht_Stehleuchte_Tplink.sendCommand (newDimVal)
      }
      }
      end
      Die Rule macht auch was sie soll.

      Allerdings ist es so, dass wenn man auf dem Taster drauf bleibt dieser ja den INCREASE/DECREASE ständig wiederholt. Das kommt leider auf Seiten openHAB nicht an. Was kann ich da noch tun?

      Kommentar


        #4
        Nein, der Taster ist ja nicht auf Telegramwiederholung konfiguriert (sende Stoptelegramm = ja und Telegrammwiederholung = nein)

        dimmer-control kennt keine lesenden Status-GA, denn bei dimmer-control übernimmt openHAB ja (stellvertretend) die Rolle des Dimmaktors, das heißt, wenn dann sendet openHAB den Status auf den knx Bus, nicht umgekehrt.
        Die ganzen GA können so eigentlich auch nicht stimmen... es sei denn, der Taster ist so ein Supertaster, der auch selbst Absolutwerte senden kann.

        Nehmen wir an, der Taster sendet für Kurzzeit 1/1/22 und empfängt auf 1/4/22 auf dem gleichen KO den Status (für die Anzeige am Taster). Für Langzeit sendet der Taster auf 1/2/22. Dann sähe der Channel so aus:
        Code:
        Type dimmer-control : GF_Wohnzimmer_Licht_Stehleuchte_KNX "Licht" [ switch="1/4/22+1/1/22", increaseDecrease="1/2/22", frequency=400 ]
        openHAB kann nun auf 1/4/22 den Status senden und Befehle auf 1/1/22 empfangen. (By the way: Der Channelname sollte besser kurz sein. knx als Begriff ist ohnehin fester Bestandteil der UUID, warum also noch mal hinten dran schreiben?

        Die passende Rule (vollständig) sollte eher so aussehen:
        Code:
        rule "TPLink Wohnzimmer Stehleuchte mit knx Dimmen"
        when
            Item GF_Wohnzimmer_Licht_Stehleuchte_KNX received command
        then
            var nDim = 0
            if(GF_Wohnzimmer_Licht_Stehleuchte_Tplink.state instanceof Number)
                nDim = GF_Wohnzimmer_Licht_Stehleuchte_Tplink.state as Number
        
            switch(receivedCommand) {
                case INCREASE :
                    nDim = if(nDim < 100 - 12) nDim + 12 else 100
                case DECREASE :
                    nDim = if(nDim > 12) nDim - 12 else 0
                default :
                    nDim = receivedCommand
            }
            GF_Wohnzimmer_Licht_Stehleuchte_Tplink.sendCommand(nDim)
        end
        Idee: Die Variable nDim wird mit 0 initialisiert. Falls der Status von GF_Wohnzimmer_Licht_Stehleuchte_Tplink. vom Typ Number ist, wird dieser Wert nach nDim übernommen.
        Anschließend findet eine bedingte Verzweigung statt, in Abhängigkeit von receivedCommand (nicht mit toString). Es gibt drei Möglichkeiten, das empfangene Kommando lautet INCREASE, DECREASE oder anders (ON oder OFF...)
        Bei INCREASE wird 12 hinzugezählt, falls nDim kleiner als 100 - 12 ist. Andernfalls wird nDim auf 100 gesetzt.
        Bei DECREASE wird 12 abgezogen, falls nDim größer als 12 ist. Andernfalls wird nDim auf 0 gesetzt.
        Bei einem anderen Befehl wird der Inhalt von nDim durch das empfangene Kommando (ON oder OFF) ersetzt.
        Zum Abschluss wird nDim gesendet.

        Falls es so zu einer Fehlermeldung kommt, kannst Du auch die beiden Commands ON und OFF hinschreiben und nDim entsprechend auf 100 bzw. 0 setzen. Auf jeden Fall ist zu beachten, dass die Commands nicht in Anführungszeichen geschrieben werden!

        Kommentar


          #5
          Leider bringt der Code von dir noch zwei Syntaxfehler. Weiß nicht warum?

          code1.png

          code2.png
          Angehängte Dateien

          Kommentar


            #6
            Ich hab es fast befürchtet (das kommt davon, wenn man etwas nicht direkt ausprobieren kann...)
            Dann machen wir es halt anders:
            Code:
            rule "TPLink Wohnzimmer Stehleuchte mit knx Dimmen"
            when
                Item GF_Wohnzimmer_Licht_Stehleuchte_KNX received command
            then
                var nDim = 0
                if(GF_Wohnzimmer_Licht_Stehleuchte_Tplink.state instanceof Number)
                    nDim = (GF_Wohnzimmer_Licht_Stehleuchte_Tplink.state as Number).intValue
            
                switch(receivedCommand) {
                    case INCREASE :
                        nDim = if(nDim < 100 - 12) nDim + 12 else 100
                    case DECREASE :
                        nDim = if(nDim > 12) nDim - 12 else 0
                    case ON :
                        nDim = 100
                    case OFF :
                        nDim = 0
                }
                GF_Wohnzimmer_Licht_Stehleuchte_Tplink.sendCommand(nDim)
            end

            Kommentar


              #7
              Die Rule hat nun keinen Syntaxfehler mehr, danke.

              Leider entwickelt die Leuchte mit der Rule eine gewisse Eigendynamik, d.h. nach dem Einschalten werden diverse Kommandos aufgeführt und dann schaltet die Leuchte wieder aus (ohne zutun).

              Irgendeine Idee warum das so ist?

              Das Log zu diesem Effekt:
              HTML-Code:
              2020-11-25 12:44:37.475 [GroupItemStateChangedEvent] - gLight changed from OFF to ON through GF_Wohnzimmer_Licht_Stehleuchte
              2020-11-25 12:44:37.479 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte changed from OFF to ON
              2020-11-25 12:44:37.536 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Ist_Temperatur changed from 23.34 to 23.38
              2020-11-25 12:44:46.219 [hingStatusInfoChangedEvent] - 'tplinksmarthome:kl110F7AF4' changed from OFFLINE (COMMUNICATION_ERROR): Keine Route zum Zielrechner (Host unreachable) to ONLINE
              2020-11-25 12:44:46.285 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from UNDEF to 0
              2020-11-25 12:44:46.318 [ome.event.ItemCommandEvent] - Item 'GF_Wohnzimmer_Licht_Stehleuchte' received command OFF
              2020-11-25 12:44:46.326 [nt.ItemStatePredictedEvent] - GF_Wohnzimmer_Licht_Stehleuchte predicted to become ON
              2020-11-25 12:44:46.539 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte changed from ON to OFF
              2020-11-25 12:44:46.546 [GroupItemStateChangedEvent] - gLight changed from ON to OFF through GF_Wohnzimmer_Licht_Stehleuchte
              2020-11-25 12:44:49.671 [hingStatusInfoChangedEvent] - 'tplinksmarthome:kl110F7AF4' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Read timed out
              2020-11-25 12:44:49.696 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from 0 to UNDEF
              2020-11-25 12:44:54.096 [GroupItemStateChangedEvent] - gLight changed from OFF to ON through GF_Wohnzimmer_Licht_Stehleuchte
              2020-11-25 12:44:54.104 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte changed from OFF to ON
              2020-11-25 12:45:02.334 [vent.ItemStateChangedEvent] - FF_Flur_OG_Ist_Temperatur changed from 20.94 to 21.06
              2020-11-25 12:45:04.319 [vent.ItemStateChangedEvent] - FF_Flur_OG_Ist_Temperatur changed from 21.06 to 20.96
              2020-11-25 12:45:05.843 [hingStatusInfoChangedEvent] - 'tplinksmarthome:kl110F7AF4' changed from OFFLINE (COMMUNICATION_ERROR): Read timed out to ONLINE
              2020-11-25 12:45:05.858 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from UNDEF to 0
              2020-11-25 12:45:05.887 [ome.event.ItemCommandEvent] - Item 'GF_Wohnzimmer_Licht_Stehleuchte' received command OFF
              2020-11-25 12:45:05.895 [nt.ItemStatePredictedEvent] - GF_Wohnzimmer_Licht_Stehleuchte predicted to become ON
              2020-11-25 12:45:06.072 [GroupItemStateChangedEvent] - gLight changed from ON to OFF through GF_Wohnzimmer_Licht_Stehleuchte
              2020-11-25 12:45:06.079 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte changed from ON to OFF
              2020-11-25 12:45:09.317 [hingStatusInfoChangedEvent] - 'tplinksmarthome:kl110F7AF4' changed from ONLINE to OFFLINE (COMMUNICATION_ERROR): Read timed out
              ==> /var/log/openhab2/openhab.log <==
              2020-11-25 12:45:12.582 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink_Power_Usage changed from UNDEF to 0.0 W
              ==> /var/log/openhab2/openhab.log <==
              2020-11-25 12:45:23.778 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte changed from OFF to ON
              2020-11-25 12:45:23.789 [GroupItemStateChangedEvent] - gLight changed from OFF to ON through GF_Wohnzimmer_Licht_Stehleuchte
              2020-11-25 12:45:41.705 [hingStatusInfoChangedEvent] - 'tplinksmarthome:kl110F7AF4' changed from OFFLINE (COMMUNICATION_ERROR): Read timed out to ONLINE
              2020-11-25 12:45:45.266 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from 0 to 12
              2020-11-25 12:45:45.668 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from 12 to 24
              2020-11-25 12:45:45.922 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from 24 to 12
              2020-11-25 12:45:46.218 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from 12 to 0
              2020-11-25 12:45:46.234 [ome.event.ItemCommandEvent] - Item 'GF_Wohnzimmer_Licht_Stehleuchte' received command OFF
              2020-11-25 12:45:46.238 [nt.ItemStatePredictedEvent] - GF_Wohnzimmer_Licht_Stehleuchte predicted to become ON
              2020-11-25 12:45:46.467 [GroupItemStateChangedEvent] - gLight changed from ON to OFF through GF_Wohnzimmer_Licht_Stehleuchte
              2020-11-25 12:45:46.471 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte changed from ON to OFF
              2020-11-25 12:45:46.532 [GroupItemStateChangedEvent] - gLight changed from OFF to ON through GF_Wohnzimmer_Licht_Stehleuchte_Tplink
              2020-11-25 12:45:46.538 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from 0 to 12
              2020-11-25 12:45:46.553 [ome.event.ItemCommandEvent] - Item 'GF_Wohnzimmer_Licht_Stehleuchte' received command ON
              2020-11-25 12:45:46.555 [nt.ItemStatePredictedEvent] - GF_Wohnzimmer_Licht_Stehleuchte predicted to become OFF
              2020-11-25 12:45:46.763 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte changed from OFF to ON
              2020-11-25 12:45:46.844 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from 12 to 24
              2020-11-25 12:45:47.217 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from 24 to 12
              2020-11-25 12:45:47.516 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte_Tplink changed from 12 to 0
              2020-11-25 12:45:47.539 [ome.event.ItemCommandEvent] - Item 'GF_Wohnzimmer_Licht_Stehleuchte' received command OFF
              2020-11-25 12:45:47.544 [nt.ItemStatePredictedEvent] - GF_Wohnzimmer_Licht_Stehleuchte predicted to become ON
              2020-11-25 12:45:47.775 [GroupItemStateChangedEvent] - gLight changed from ON to OFF through GF_Wohnzimmer_Licht_Stehleuchte
              2020-11-25 12:45:47.784 [vent.ItemStateChangedEvent] - GF_Wohnzimmer_Licht_Stehleuchte changed from ON to OFF

              Kommentar

              Lädt...
              X