Ankündigung

Einklappen
Keine Ankündigung bisher.

OpenHAB mit KNX GIRA IP Router (216700)

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

    OpenHAB mit KNX GIRA IP Router (216700)

    Hallo zusammen,

    vorab vielen Dank für die ganzen hilfreichen Beiträge hier im Forum - die haben mir die letzten Jahre immer sehr geholfen. Leider stoße ich gerade an meine Grenzen, da ich das Problem nicht nachvollziehen kann.

    Folgendes Setup:
    - Ich habe einen IP Router (216700) von GIRA, den ich bereits erfolgreich per ETS in mein bestehendes KNX/BUS-Netz eingebunden habe. Das heißt, ich kann in der ETS6 alles über den IP Router steuern/bereitstellen.
    - Auf einem INTEL NUC läuft aktuell OpenHAB als Docker-Container. Das Setup nutze ich seit mehreren Jahren erfolgreich.
    - Feste IP des NUC = 192.168.178.15
    - Feste IP des IP Routers = 192.168.178.16 (Vergabe mittels ETS und taucht auch so in der FritzBox auf)
    - Aktuell laufen in meinem KNX-Setup mehrere Universal-Schnittstellen, zum steuern der Jalousien (Universal-Schnittstelle > Aktor > Jalousie). Das funktioniert auch wunderbar - wenn ich den Taster an der Türe drücke, fahren die Jalousien, so wie sie sollen.

    Mein Problem:
    Was allerdings nicht geht, das ich die Jalousien per OpenHAB steuern kann. Und da bin ich leider am verzweifeln.
    Ich habe in OpenHAB das KNX-Binding installiert und den IP-Router auch erfolgreich eingebunden - zumindest ist die Bridge, als auch ein KNX-Device grün und online.

    image.png
    Mein Thing-file sieht aktuell so aus:
    image.png
    Meine Annahme, die Gruppenadresse 1.1.34 lässt die Jalousie haben unten und 1.1.35 nach oben fahren. Das tut sie zumindest, wenn ich auf den Taster im Büro drücke.

    image.png​​
    Wenn ich allerdings auf einen von den Pfeilen in dem OpenHAB Item drücke, bleibt die Jalousie still.

    Vermutlich habe ich nur irgendwo einen Denkfehler oder eine Kleinigkeit stimmt nicht - es beschäftigt mich die dritte Woche in Folge. Ich hoffe die Community hier kann mir helfen.

    Vorab vielen Dank und großes Sorry, sollte ich eine Info vergessen haben.


    Beste Grüße aus Thüringen
    Hannes
    Angehängte Dateien

    #2
    Nein, so funktioniert knx nicht. (eine GA für rauf, eine GA für runter)

    Aber zunächst mal, wenn Du den ROUTER Mode nutzt, lass die ipAddress unkonfiguriert, dann nimmt openHAB die bekannte Multicast IP Adresse. das gleiche gilt für den Port. Du solltest nur die Dinge konfigurieren, welche vom Default abweichen oder unbedingt konfiguriert werden müssen, hier also lediglich type="ROUTER" und localIp="192.168.178.15"

    Leider kann openHAB bei einer ROUTER Verbindung nicht erkennen, ob es mit dem Gateway Kontakt hat - Du kannst allenfalls das Logigng für knx aufdrehen (auf DEBUG oder TRACE) und dann ein paar Dinge in knx schalten und prüfen, ob in openhab.log Einträge von calimero auftauchen

    knx kommuniziert im Normalbetrieb (also wenn Du nicht gerade Geräte programmierst) ausschließlich über GruppenAdressen (GA).
    Ein Telegramm enthält die physikalische Adresse des Senders (Schreibweise 15.15.255), die angesprochene GA (Schreibweise 31/7/255) sowie ein Datum, welches sich an den mit der GA verknüpften KommunikationsObjekten (KO) orientiert, also z.B. ein Schaltaktor hat ein KO, mit dem der Ausgang ein-/ und ausgeschaltet werden kann, entsprechend ist das Datum ein einzelnes Bit, 1 für ON und 0 für OFF. Innerhalb des Telegramms gibt es natürlich noch Informationen darüber, wie groß das Datum ist, es gibt noch Prüfsummen und einen Hop-Zähler, womit sichergestellt wird, dass Datentelegramme nicht z.B. wegen eines Konfigurationsfehlers endlos über den Bus geschickt werden - nach spätestens sieben Weiterleitungen ist Schluss.

    Bei Deinem Rollladenaktor gibt es auf jeden Fall zwei KO, diese sind gewöhnlich als Langzeit und Kurzzeit bezeichnet. Beide sind ein Bit breit.
    Eine 0 zum Langzeit KO führt dazu, dass der Rollladen nach oben fährt, eine 1 sorgt für eine Abwärtsfahrt.
    Eine 0 zum Kurzzeit KO lässt den Motor kurz nach oben laufen, eine 1 lässt ihn kurz nach unten laufen.
    Wenn Du also einen Rollladen stoppen willst, so geschieht das immer über eine kurze Auf- oder Abwärtsfahrt.
    Je nach Modell des Aktors gibt es noch weitere KO, heutzutage üblich wären z.B. noch KO für Positionsfahrten. Hierbei wird ein komplettes Byte an ein KO gesendet, also ein Wert von 0 - 255, der dann 0 % - 100 % entspricht (0 % ist "offen", 100 % ist "geschlossen"). Die Position wird dann gewöhnlich über ein weiteres KO zurückgemeldet, in der gleichen Form.

    Schau in der ETS nach, welche KO am Aktor zur Verfügung stehen, Langzeit verknüpfst Du mit upDown, Kurzzeit mit stopMove, die Position mit position.
    Nur mit einer aktiven Rückmeldung hast Du bei einem Rollladen auch ein Feld, in dem mehr als eine GA angegeben ist, nämlich dann position="1/2/3+<1/2/4", wobei 1/2/3 die GA ist, welche mit dem KO zum Ansteuern einer Position verbunden ist, während 1/2/4 die Rückmeldung der aktuellen Position in Richtung openHAB wäre.
    Ein Schaltaktor hat ebenfalls eine Rückmeldung des aktuellen Schaltzustands über ein eigenes KO, welches dann auch über eine eigene GA mit dem passenden Channel in openHAB verknüpft werden kann.

    Zurück zum Kommunikationsproblem... Ein knx/IP Router ist ein sehr komplexes Gerät zur Anbindung, welches gerne und oft Probleme bereitet. Ein wichtiger Punkt dabei ist eine Standardfunktion der Routers, das ist das Filtern von GA. Stelle also sicher, dass der knx/IP Router alle Telegramme ungefiltert passieren lässt.
    Weiterhin muss Multicast im Netzwerk funktionieren, je nach Topologie kann schon das problematisch sein.

    Prüfe, ob der Router als Tunnel funktioniert:
    Code:
    //KNX IP-ROUTER als Tunnel
    Bridge knx:ip:bridge "knx Router" [
        type="TUNNEL",
        ipAddress="192.168.178.16", // Unicast IP des Routers
        localIp="192.168.178.15", // IP-Adresse des openHAB Systems
     ​] {
        Thing device gira "Rollaktor Gira" [] {
            Type rollershutter : ch1 "Rollladen 1" [ upDown="1/1/34", stopMove="1/1/36" ]
        }
    }​
    Eine Tunnel Verbindung kann von openHAB zuverlässig korrekt als ONLINE oder OFFLINE erkannt werden, im Gegensatz zur Router Verbindung.

    Natürlich muss der Channel mit einem Item verknüpft sein:
    Code:
    Rollershutter Rollladen1 "Mein Rollladen" {channel="knx:device:bridge:gira:ch1"}
    Allgemein empfehle ich immer, mit dem möglichst einfachen Objekt zu beginnen, das wäre ein Schaltaktor:
    Code:
    Thing device schaltaktor "Mein Schaltaktor" [] {
        Type switch : ch1 "Schaltkanal 1" [ ga="1/1/1+<1/1/2" ]
    }
    Wobei hier 1/1/1 den Befehl zum Schalten sendet, 1/1/2 ist die Rückmeldung des Schaltzustands. Das < vor der 2. GA bedeutet, dass openHAB beim Systemstart aktiv auf dem knx Bus nachfragt, welchen Schaltzustand der Aktorkanal gerade hat. Unter der Voraussetzung, dass knx korrekt konfiguriert ist, antwortet der Aktor und openHAB weiß von Systemstart an direkt um den aktuellen Zustand der verknüpften Kanäle.
    Zuletzt geändert von udo1toni; 24.10.2023, 20:29.

    Kommentar


      #3
      Hab vielen Dank für deine sehr ausführliche und erklärende Antwort! Ich habe vermutet, dass ich mindestens einen grundsätzlichen Fehler gemacht habe (je eine GA für auf und ab der Rolladen).

      Ich werde heute Abend deine Ratschläge befolgen und in der ETS die GA´s richtig vergeben.

      Heute Morgen habe ich deine zwei Ratschläge befolgt und die Änderung getestet - für type="TUNNEL" leider ohne Erfolg. Bei type="ROUTER" zeigt es wieder grün an, aber der Rolladen bewegt sich nicht.

      image.pngimage.png​​

      Den KNX IP-Router habe ich mir nach einer kurzen Internetrecherche gekauft und eher aus Unwissen, dass es kompliziert werden kann. Die GA´s werden aktuell ungefiltert weitergeleitet, das hatte ich bereits hier im Forum gelesen. Aber ich nehme mir erstmal mit, in der ETS die GA´s richtig einzustellen und nach Multicast in der Topologie zu schauen.

      Ich melde mich gegen Abend wieder - Danke auf jeden Fall vorab!!
      Angehängte Dateien

      Kommentar


        #4
        Einen Anfängerfehler muss ich noch beheben - Ich habe den Port 3671 noch nicht im Container freigegeben. Ich gebe Rückmeldung heute Abend, sobald ich alles umgesetzt habe.

        Kommentar


          #5
          Ach, siehste mal... Docker habe ich zwar gelesen, aber schon wieder vergessen gehabt...
          Ganz wichtig: Der Container muss für Multicast zwingend über die Netzwerk-Betriebsart host angeschlossen sein, bridge ist nicht erlaubt. Das liegt daran, dass Multicast grundsätzlich nicht geroutet wird. (Merke: grundsätzlich -> Im Grundsatz, d.h. es gibt Ausnahmen).
          Mit Docker habe ich bisher noch keinen Weg gefunden, das Routing entsprechend zu beeinflussen - im bridged mode hängt openHAB ja in einem anderen Subnetz und entsprechend müsste der Netzwerkverkehr über die Bridge geroutet werden...

          Kommentar


            #6
            Ja genau, das habe ich selbst völlig verschwitzt. Ich habe heute Abend die ganzen Gruppenadressen neu vergeben und erstmal wieder eingespielt - das hat schon mal wunderbar funktioniert. Vielen Dank nochmal für den Hinweis.

            Ich debuggen setze ich OpenHAB nochmal isoliert auf einem Pi auf, um mich langsam ran zu tasten. Das werde ich allerdings erst am Wochenende schaffen. 😊
            Was dabei rauskommt, kommentiere ich hier - eventuell klappt es ja und die Community kann profitieren.

            Kommentar


              #7
              Ich war Euch noch eine Antwort schuldig und habe es leider eher nicht geschafft. Kurzum, ich habe es zum laufen bekommen 🙂
              Mein Setup ist OpenHab als Kubernetes Deployment, mit PVC und Service (LoadBalancer), sowie der KNX GIRA IP Router (216700).

              Mein Fehler war, dass ich den KNX IP Router im Secure-Modus in betrieb genommen habe und demnach musste natürlich auch die TUNNEL Verbbindung im Secure-Modus passieren - das kleine Detail habe ich übersehen. Ich habe in der ETS6 jetzt den Secure-TUNNEL deaktiviert. Somit klappt die Verbindung von OpenHab zum Gira IP Router (216700) mit type=TUNNEL wunderbar.

              KNX.things
              Code:
              // IP Router in TUNNEL mode
              Bridge knx:ip:bridge "KNX Gira IP Router" [
                  type="TUNNEL",
                  ipAddress="xxx.xxx.xxx.xxx",
                  portNumber=3671,
                  localIp="",
                  useNAT=true,
                  readingPause=50,
                  responseTimeout=10,
                  readRetriesLimit=3,
                  autoReconnectPeriod=60,
                  localSourceAddr="0.0.0"
              ]
              {
                  Thing device rollaktoren "KNX Rollaktoren" @ "knx_group" [] {
                    // Items configurations
                    Type rollershutter : buero                  "Büro Jalousie"                          [ upDown="1/1/1", stopMove="1/1/2" ]
                    Type rollershutter : wohnzimmer       "Wohnzimmer Jalousie"            [ upDown="1/1/3", stopMove="1/1/4" ]​


              OpenHab Deployment:
              Code:
              apiVersion: apps/v1
              kind: Deployment
              metadata:
                namespace: openhab
                name: openhab
                labels:
                  app: openhab
              spec:
                replicas: 1
                selector:
                  matchLabels:
                    app: openhab
                template:
                  metadata:
                    labels:
                      app: openhab
                  spec:
                    containers:
                    - name: openhab
                      image: openhab/openhab:4.0.1
                      securityContext:
                        privileged: true
                      resources:
                        limits:
                          memory: 2.0Gi
                          cpu: "2000m"
                        requests:
                          memory: 1.0Gi
                      env:
                        - name: USER_ID
                          value: '1000'
                        - name: GROUP_ID
                          value: '1000'
                        - name: LANG
                          value: 'de_DE.UTF-8'
                        - name: LANGUAGE
                          value: 'de_DE.UTF-8'
                        - name: "TZ"
                          value: "Europe/Berlin"
                      ports:
                      - containerPort: 8080
                        name: webinterface
                        protocol: TCP
                      - containerPort: 3671
                        name: knx
                        protocol: TCP
                      - containerPort: 3671
                        name: knx-udp
                        protocol: UDP
                      volumeMounts:
                      - name: openhab-data
                        mountPath: /openhab/userdata
                        subPath: openhab-k8s/openhab-data
                      - name: openhab-data
                        mountPath: /openhab/conf
                        subPath: openhab-k8s/openhab-conf
                      - name: openhab-data
                        mountPath: /openhab/addons
                        subPath: openhab-k8s/openhab-addons
                      livenessProbe:
                        initialDelaySeconds: 420
                        periodSeconds: 20
                        tcpSocket:
                          port: 8080
                    volumes:
                    - name: openhab-data
                      persistentVolumeClaim:
                        claimName: openhab-pvc-data​
              OpenHab-PVC:
              Code:
              apiVersion: v1
              kind: PersistentVolumeClaim
              metadata:
                namespace: openhab
                name: openhab-pvc-data
              spec:
                accessModes:
                  - ReadWriteMany
                storageClassName: ssd-hostpath
                resources:
                  requests:
                    storage: 10Gi​

              OpenHab-LoadBalancer:
              Code:
              apiVersion: v1
              kind: Service
              metadata:
                namespace: openhab
                name: openhab-web
                annotations:
                  metallb.universe.tf/loadBalancerIPs: 192.168.178.19
              spec:
                type: LoadBalancer
                selector:
                  app: openhab
                ports:
                  - port: 80
                    targetPort: 8080
                    protocol: TCP
                    name: webinterface
                  - port: 3671
                    targetPort: 3671
                    protocol: TCP
                    name: knx
                  - port: 3671
                    targetPort: 3671
                    protocol: UDP
                    name: knx-udp​

              An der Stelle nochmal danke für den Hinweis mit den Gruppenadressen 🙂

              Kommentar

              Lädt...
              X