Ankündigung

Einklappen
Keine Ankündigung bisher.

Arduino-Library und Breakout-Board für KNX – Feedback gesucht

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

    KNX/EIB Arduino-Library und Breakout-Board für KNX – Feedback gesucht

    Hallo zusammen,

    ich bin mir ehrlich gesagt nicht sicher, wo dieser Beitrag hingehört. Es ist weder eine konkrete Frage noch ein fertiges Produkt, und als Werbung ist es auch nicht gemeint. Falls er woanders besser aufgehoben ist, verschiebt ihn gerne oder sagt mir Bescheid.

    Wir (das sind ein Kollege und ich) haben eine Arduino-Library und ein kleines Breakout-Board gebaut, mit denen man eigene Mikrocontroller-Projekte an den KNX-Bus hängen kann. Bevor wir weitermachen, würden wir gern wissen, was ihr davon haltet.

    Angefangen hat das mit unserer Diplomarbeit an einer HTL. Da haben wir einen KNX-Taster gebaut, vom TP-UART2 aufwärts alles selbst. Eigentlich kommen wir aus der Robotik und sind dort von Adafruit und Co. ziemlich verwöhnt: Board anstecken, Library einbinden, nach fünf Minuten läuft es. So etwas haben wir für KNX nicht gefunden, was schade ist. Unserer Meinung nach sollte man als Maker seine Ideen schnell und einfach in sein Smart Home integrieren können, das geht immerhin bei ZigBee, Matter usw. auch. KnxTpUart, KONNEKTING und OpenKNX kennen wir natürlich, aber ein Board mit passender Library, das genauso einfach funktioniert, gibt es unseres Wissens noch nicht.

    Uns ist klar, dass KNX vor allem robust und zuverlässig sein muss. Trotzdem fanden wir, dass man auch im KNX-Smarthome mit einem Arduino schnell mal eine Idee umsetzen können sollte.

    Library
    Der Stack war durch die Diplomarbeit großteils fertig, also haben wir im Sommer eine Open-Source-Library daraus gemacht. Sie läuft mit jedem TP-UART2. Am Bus getestet haben wir sie mit einem TP-UART2 und mit unserem Board. Gruppenadressen und physikalische Adresse stehen direkt im Sketch, für das eigene Gerät braucht man also kein ETS-Projekt. Aktuell werden 17 DPTs unterstützt, alles andere geht über ein generisches Objekt. Getestet haben wir sie bisher auf ESP32, STM32, RP2040, AVR und Renesas.

    Einfach etwas auf den Bus senden:
    Code:
    #include <KonnextraKNX.h>
    
    KonnextraKNX knx("1.1.5");
    
    void setup() {
       knx.begin();
       knx.send("0/1/1", Dpt1(true)); // einschalten
       knx.send("0/4/2", Dpt9(21.5f)); // Temperatur senden
    }
    
    void loop() {
       knx.loop();
    }​
    Oder mit einem Geräteobjekt inklusive Statusrückmeldung:
    Code:
    #include <KonnextraKNX.h>
    
    KonnextraKNX knx("1.1.5");
    KnxLight lamp(knx, "0/1/1", "0/3/0"); // Schalten, Status
    
    void setup() {
       knx.begin();
       lamp.onUpdate(onLampChanged);
       lamp.toggle();
    }
    
    void loop() {
       knx.loop();
    }
    
    void onLampChanged(bool on) {
        // auf Statusänderung reagieren
    }

    Breakout-Board
    Was uns dann noch gefehlt hat, war ein günstiges Breakout-Board. Gefunden haben wir eigentlich nur BCUs, die man umbauen muss, oder Boards, die teuer und schwer zu bekommen sind. Also haben wir selbst eines entwickelt. Es basiert auf dem STKNX, davor sitzt ein ATtiny1616, der nach außen einen TP-UART2 nachbildet. Für die Library macht das keinen Unterschied, das zeitkritische Bus-Timing bleibt auf dem Board, und weil sich der STKNX bei Platinenfertigern bestücken lässt, ist das Ganze deutlich günstiger. Zum Host hin ist das Board galvanisch getrennt und läuft mit 3,3 V wie mit 5 V. Versorgt wird es aus dem Bus, der Mikrocontroller braucht eine eigene Versorgung.

    Bridge_Closeup_Handheld.webp

    Bridge_Breadboard_Wide.webp​

    Im Moment gibt es das Board nur als Entwicklungsmuster. Später wollen wir eine kleine Serie machen, das soll hier aber nicht der Punkt sein. Die Library läuft auch ohne unser Board.

    Mehr Infos gibt es auf www.konnextra.at, der Code ist dort ausführlicher dokumentiert für Interessierte.​

    Wir haben in dieses Projekt sehr viel Herzblut gesteckt, und würden uns über Feedback, Gedanken oder Ideen dazu sehr freuen! Unsere Perspektive auf KNX ist wahrscheinlich nicht die breiteste, weswegen wir sehr gespannt auf eure Meinung dazu sind! Gerne auch kritisch!

    Liebe Grüße,
    Florian und Vincent
    ​

    #2
    Gratulation zu eurem tollen Projekt, bin gespannt wohin die Reise geht.

    Kommentar


      #3
      Danke dir, das freut uns sehr!

      Unser Ziel wäre, ein bisschen von der Adafruit-Erfahrung zu KNX zu bringen: anschließen, Library einbinden und ohne große technische Einstiegshürde erste eigene Ideen umsetzen.
      Wir können momentan aber schwer einschätzen, wie groß der Bedarf dafür in der KNX-Maker-Community tatsächlich ist. Deshalb würde uns interessieren: Könntet ihr euch vorstellen, so etwas für eigene Projekte zu verwenden? Was fehlt euch bei der Library auf den ersten Blick noch?
      Spannend wäre für uns auch, ob ein STKNX-basiertes Breakout-Board, was TP-UART2 spielt, für euch eine echte Alternative zum TP-UART2 wäre. Bei einer kleinen Serie würde es voraussichtlich um die 30 Euro kosten.
      LG
      ​

      Kommentar


        #4
        Wo ich Potenzial sehe, wäre beispielsweise eine Integration eures KNX Stacks in Tasmota oder ESPHome. Wünschenswert wäre die Möglichkeit, euren Stack über eine übliche Compile Option in Tasmota verfügbar zu haben und in Berry auf KNX Group Addresses zu "publishen" und Group Addresses zu subscriben. Dadurch wäre es sehr einfach möglich, all die Sensordaten auf den KNX Bus zu bringen, sei es Temperatur, Luftgüte, Energiedaten usw. Und ähnlich in der Gegenrichtung kann auf Group Addresses reagiert werden, indem am Tasmota Device Schalthandlungen gesetzt werden (on/off oder Jalousien auf/ab/stop) oder diese beispielsweise an Modbus oder Zigbee weitergeleitet werden.
        Beispiel: Steuerung einer Wohnraumlüftung über Modbus RTU <-> KNX, Wetterstation mit Tasmota sendet Wetterdaten auf den Bus, Tasmota Zigbee bridge <-> KNX, ...
        Anderes Beispiel: Integration in amsreader Firmware, um Smartmeter Daten direkt auf den Bus zu bekommen.
        Derzeit wird von Tasmota KNX Multicast unterstützt, mit all den Vor- und Nachteilen. Aber TP wäre echt cool und spannend...

        Kommentar


          #5
          Also ich hätte direkt zwei, drei kleine Projekte, die ich damit auf KNX umrüsten könnte. Diese Platine könnte dann auch als Busankoppler für ESPs mit Tasmota fungieren, oder gibt es da schon was anderes?

          Konnekting hatte ich gar nicht mehr so auf dem Schirm, wo seht ihr da den entscheidenden Unterschied? Eine Arduino Library hat das auch, oder? (https://www.konnekting.de/konnekting...x-mit-arduino/)

          Kommentar


            #6
            Danke für den Vorschlag! Ich hatte mich bisher ehrlich gesagt noch nie mit Tasmota beschäftigt. Nach einer kurzen Recherche finde ich aber, dass das wirklich hervorragend zu unserem Board und unserer Library passen könnte.
            Der KNX-Stack ist bereits stark abstrahiert und in mehrere Schichten aufgeteilt. Für eine Einbindung in Tasmota dürfte daher nur noch eine zusätzliche Integrationsschicht notwendig sein. Wie groß der tatsächliche Aufwand ist, müssen wir natürlich erst genauer checken.
            Tasmota direkt über KNX TP an den Bus anzubinden, statt über KNXnet/IP und einen IP-Router, ist jedenfalls ein spannender Anwendungsfall. Die von dir beschriebenen Beispiele könnte unsere Library auf der KNX-Seite grundsätzlich schon abbilden.
            Wir werden uns das definitiv genauer ansehen!
            ​

            Kommentar


              #7
              Zitat von j4r Beitrag anzeigen
              Konnekting hatte ich gar nicht mehr so auf dem Schirm, wo seht ihr da den entscheidenden Unterschied? Eine Arduino Library hat das auch, oder?
              Auf KONNEKTING sind wir schon während unserer Diplomarbeit gestoßen und haben uns damals näher damit beschäftigt. Für unseren Anwendungsfall war uns der Ansatz aber zu umfangreich.
              Dort braucht man zusätzlich zum Sketch eine Gerätedefinition und konfiguriert Gruppenadressen und Parameter anschließend über die eigene Suite. Das ist für nachträglich parametrierbare Geräte sinnvoll, für ein kleines Arduino-Projekt fanden wir den zusätzlichen Ablauf aber zu umständlich.
              Unser Ziel ist daher eine Library, die sich ähnlich einfach wie eine typische Sensor-Library verwenden lässt: installieren, Beispiel öffnen, Adressen direkt im Sketch eintragen und loslegen. Dazu soll es ein passendes, einfach erhältliches Board geben.
              Kurz gesagt: Wir möchten es möglichst einfach machen, aus einem normalen Arduino-Sketch heraus direkt mit KNX zu kommunizieren. KONNEKTING versucht eher, ein klassisch parametrierbares KNX-Gerät auf Arduino-Basis umzusetzen.

              Kommentar


                #8
                Schönes Projekt! Ich kann es erahnen, was da an Aufwand drinsteckt :-)

                Trotzdem ein ehrlicher Hinweis, bevor Ihr da "weiterdenkt" was die Hardware angeht:
                Mittlerweile gibt es (auch hier im Forum) fertige Busankoppler für ~10€, sogar mit Onlineshop. Die machen nach außen im Prinzip das gleiche, Schnittstelle zwischen UART und KNX (wie der TPUART / TPUART-2). Statt einem selbst programmierten µC als Transceiver steckt da ein fertiger IC von Onsemi drin (NCN51x0) und der kann noch einiges mehr, insbesondere was die bereitgestellte Hilfsenergie angeht.
                Den Siemens 5WG1117-2AB12 (mit TPUART-2) gibt es auch noch für ~26€.

                Ich selbst arbeite schon einige Zeit mit einer eigenen Designvariante, auch basierend auf dem NCN5130.

                Die Library hingegen hat sicher Potential, das sieht mir doch um einiges einfacher aus als die "bekannte" knxtpuart.h...finde ich top, das schaue mich mir mal genauer an :-)
                Viele Grüße,
                Stefan

                DIY-Bastelprojekte: || >> Smelly One << || >> BURLI << ||

                Kommentar


                  #9
                  Danke für den Hinweis und das positive Feedback zur Library!
                  MicroBCU und NanoBCU hatten wir tatsächlich nicht richtig auf dem Schirm. Unsere Produktionskosten liegen zwar in einem ähnlichen Bereich, eine Umstellung auf den NCN5130 schauen wir uns aber definitiv an. Da das Protokoll weitgehend TP-UART-kompatibel ist, sollte sich der Aufwand auf Library-Seite in Grenzen halten.
                  Für unser Board streben wir außerdem eine CE-Konformitätserklärung an. Und die Ideen für eine Integration in Tasmota und ESPHome nehmen wir auf jeden Fall mit. Da könnten sich einige spannende Anwendungen ergeben!

                  Kommentar


                    #10
                    Zitat von dreamy1 Beitrag anzeigen
                    Die Library hingegen hat sicher Potential, das sieht mir doch um einiges einfacher aus als die "bekannte" knxtpuart.h...finde ich top, das schaue mich mir mal genauer an :-)
                    Wenn du dir die Library genauer anschaust:
                    Für die häufigsten Anwendungen gibt es fertige Geräteobjekte wie KnxLight, KnxBlind oder KnxDimmLight. Die bringen die passenden Funktionen direkt mit, man kann also einfach lamp.on(), lamp.toggle(), blind.down() oder light.brighter() verwenden. Mit onUpdate() lässt sich auch recht unkompliziert auf Änderungen vom Bus reagieren.
                    Wenn man nur einmalig einen Wert senden möchte, braucht man dafür gar kein Objekt. Ein Schaltbefehl geht zum Beispiel direkt so:

                    Code:
                    knx.send("0/1/1", Dpt1(true));
                    Falls etwas noch nicht durch die fertigen Geräteobjekte abgedeckt ist, kann man mit KnxObject ein eigenes Objekt anlegen. Den benötigten Datenpunkttyp gibt man dabei selbst an und kann anschließend typisiert senden, empfangen und ebenfalls mit Callbacks arbeiten.
                    Die Library ist bereits im Arduino Library Manager verfügbar und kann natürlich auch unabhängig von unserem Board verwendet werden.

                    Doku und Beispiele gibt es hier:
                    https://konnextra.at/docs/?lang=de
                    Screenshot 2026-10-15 133256.png


                    Wenn dir beim Durchsehen etwas fehlt oder unklar ist, sag gerne Bescheid. Gerade Feedback von jemandem, der schon mit anderen KNX-Libraries gearbeitet hat, wäre für uns sehr interessant.
                    ​

                    Kommentar


                      #11
                      So wie ich das verstanden habe, kann man problemlos auf den Bus schreiben.
                      Aber vom Bus zu hören, ist wohl nicht so einfach, wenn es kein fertiges Objekt dazu gibt, oder?
                      Also wenn ich mir z.B. ein Display bauen möchte und einfach nur Statuswerte (Binär, aber auch Text) empfangen möchte.

                      Kommentar


                        #12
                        Doch, empfangen geht bereits. Aber noch nicht so einfach wie Senden. Aktuell legt man dafür ein KnxObject mit Gruppenadresse und passendem DPT an und registriert über onUpdate() einen Callback. Sobald ein passendes Telegramm kommt, wird dieser automatisch aufgerufen.

                        Für einen Binärstatus sieht das zum Beispiel so aus:

                        Code:
                        KonnextraKNX knx("1.1.5");
                        KnxObject status(knx, "0/3/0", KnxDpt::DPT1);
                        
                        void setup() {
                           knx.begin();
                        
                           status.onUpdate(const KnxValue& value {
                              bool on = value.asBool();
                              // Display aktualisieren
                           });
                        }
                        
                        void loop() {
                           knx.loop();
                        }
                        Für andere Werte funktioniert es genauso, nur mit dem jeweils passenden DPT. KnxObject speichert außerdem den letzten empfangenen Wert, der später auch über value() abgefragt werden kann. In der Dokumentation siehst du, mit welcher Funktion zu dann auf den Wert zugreifen kannst, abhängig vom DPT: https://konnextra.at/docs/?page=datapoints

                        Was gerade noch fehlt, ist das direkte Gegenstück zu knx.send(), also eine einfache Listener-API ohne vorher ein Objekt anzulegen. Daran arbeiten wir gerade. Das soll dann ebenfalls über knx.loop() automatisch und nicht blockierend ausgelöst werden.
                        Über KnxObject und onUpdate() ist dein Anwendungsfall aber jetzt schon möglich.

                        ​

                        Kommentar

                        Lädt...
                        X