Ankündigung

Einklappen
Keine Ankündigung bisher.

Verbindungsprobleme KNX - Arduino (KnxTpUart) - ReceiveKNXTelegrams

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

    Verbindungsprobleme KNX - Arduino (KnxTpUart) - ReceiveKNXTelegrams

    Hallo zusammen,

    ich hoffe ihr könnt mir weiterhelfen.
    Ich schaffe es nicht KNX Telegramme mit dem Arduino zu empfangen und dort weiterzuverarbeiten.
    Verwendet wird ein Arduino Mega, ein Siemesn 5WG1117 Busankoppler und die Bibliothek von Thorsten Gehrig (https://github.com/thorsten-gehrig/a...knx-user-forum)

    Grundsätzlich funktioniert die Verbindung in eine Richtung. Ich kann aktuell ohne Probleme Daten auf den Bus schreiben/senden. Hierfür nutze ich folgenden Beispiel-Code (ebenfalls von Thorsten seinen Beispiel-Codes, etwas vereinfacht).
    Genutzt wird Serial 1 am Arduino Mega, Gruppenadresse 1/4/8 (ebenfalls in der ETS6 angelegt), und die Physikalische Adresse 1.0.31 - arduino

    Code:
    // Test constellation = ARDUINO MEGA <-> 5WG1 117-2AB12
    
    #include <KnxTpUart.h>
    
    // Initialize the KNX TP-UART library on the Serial1 port of ARDUINO MEGA
    KnxTpUart knx(&Serial1, "1.0.31");
    
    
    void setup() {
      Serial.begin(9600);
      Serial.println("TP-UART Test");
    
      Serial1.begin(19200, SERIAL_8E1);
    
      Serial.print("UCSR1A: ");
      Serial.println(UCSR1A, BIN);
    
      Serial.print("UCSR1B: ");
      Serial.println(UCSR1B, BIN);
    
      Serial.print("UCSR1C: ");
      Serial.println(UCSR1C, BIN);
    
      knx.uartReset();
    }
    
    
    void loop() {
    
          // Send the opposite of what we have sent last
          bool success = knx.groupWriteBool("1/4/8", false);
          delay(6000);
          Serial.print("Successfully sent");
    
    }​
    Was ich jedoch nicht schaffe, ist die Verbindung in die andere Richtung aufzubauen. Ich habe hier - ebenfalls - ein Beispiel von Thorsten auf meine Bedürfnisse umgeschrieben. Reagieren soll der Arduino auf die Gruppenadresse 1/4/8, Datentyp bool (die gruppenadresse habe ich ebenfalls in der ETS6 auf diesen Datentyp eingestellt)
    https://github.com/thorsten-gehrig/a...XTelegrams.ino

    Code:
    #include <KnxTpUart.h>
    
    // Initialize the KNX TP-UART library on the Serial1 port of ARDUINO MEGA
    // and with KNX physical address 1.0.31
    KnxTpUart knx(&Serial1, "1.0.31");
    
    void setup() {
      Serial.begin(9600);
      Serial.println("TP-UART Test");
    
      Serial1.begin(19200, SERIAL_8E1);
    
      Serial.print("UCSR1A: ");
      Serial.println(UCSR1A, BIN);
    
      Serial.print("UCSR1B: ");
      Serial.println(UCSR1B, BIN);
    
      Serial.print("UCSR1C: ");
      Serial.println(UCSR1C, BIN);
    
      knx.uartReset();
    
      knx.addListenGroupAddress("1/4/8");
    }
    
    void loop() {
      // nothing in the loop. This example is only to receive telegrams
    }
    
    void serialEvent1() {
      KnxTpUartSerialEventType eType = knx.serialEvent();
      if (eType == TPUART_RESET_INDICATION) {
        Serial.println("Event TPUART_RESET_INDICATION");
      }
      else if (eType == UNKNOWN) {
        Serial.println("Event UNKNOWN");
      }
      else if (eType == KNX_TELEGRAM) {
        Serial.println("Event KNX_TELEGRAM");
        KnxTelegram* telegram = knx.getReceivedTelegram();
        // Telegrammauswertung auf KNX (bei Empfang immer notwendig)
        String target =
          String(0 + telegram->getTargetMainGroup())   + "/" +
          String(0 + telegram->getTargetMiddleGroup()) + "/" +
          String(0 + telegram->getTargetSubGroup());
    
        // Here you have the telegram and can do whatever you want
        if (telegram->getCommand() == KNX_COMMAND_WRITE) {
          // Auswertung des empfangenen KNX-Telegrammes mit Schreibbefehl (Flag) -> Aktion
          if (target == "1/4/8") {
            int received_1_4_8 = telegram->getBool();
            Serial.print("Empfangener wert");
            Serial.println(received_1_4_8);
          }
        }
      }
    }​
    Ausgabe des Arduino IDE Terminals:
    Code:
    TP-UART Test
    UCSR1A: 100010
    UCSR1B: 10011000
    UCSR1C: 100110
    Event UNKNOWN
    In der Ausgabe wird im Sekundentakt das "Event UNKNOWN" ausgegeben. Auch wenn ich mittels der ETS die Gruppenadresse 1/4/8 nicht schreibe und lese.

    Anbei auch mal Eigenschaften des Telegrams welches ich mittels dem Diagnosetools der ETS auf den BUS schreibe. Ich schreibe hier ein False auf die 1/4/8. Ich gehe docht richtig in der Annahme, dass ich somit eigentlich den arduino "auslösen" müsste und er diesen Befehl erkennt, oder?
    grafik.png​​
    grafik.png

    Wisst ihr warum der Arduino kein KNX_Telegramm erkennt?

    Danke und schönen Samstag,

    Sven
    Angehängte Dateien
    Zuletzt geändert von KNXjackrabbit; 13.01.2024, 17:55.

    #2
    Hallo,

    dir fehlt im loop noch etwas.


    void loop() {
    serialEvent1();
    }​
    Zuletzt geändert von Smart Guido; 13.01.2024, 21:25.
    Mit besten Grüßen,
    Guido

    Meine Projekte hier : KNX Busmonitor​​ / KNX Schalter mit Audio​ / KNX PiRadio

    Kommentar


      #3
      Ich habe das Problem soeben gefunden.
      Aufgrund eines defekts am Adum1201 habe ich diesen durch zwei Jumperkabel ausgetauscht und somit keine galvanische Trennung zwischen dem BCU und dem Arduino gehabt.
      Sobald ich einen funktionierenden Adum1201 eingebaut habe hat die Kommunikation in beide Richtungen funktioniert.

      Kommentar


        #4
        Zitat von Smart Guido Beitrag anzeigen
        Hallo,

        dir fehlt im loop noch etwas.


        void loop() {
        serialEvent1();
        }​

        Danke für deine Antwort Guido.
        Das ist nicht notwendig. Die Funktion wird automatisch aufgerufen sobald ein Signal vom KNX Bus kommt.

        Kommentar


          #5
          Das ist natürlich auch ein Problem, bin aber auch nicht der einzige der das so gelöst hat.

          https://haus-automatisierung.com/har...selbstbau.html
          Mit besten Grüßen,
          Guido

          Meine Projekte hier : KNX Busmonitor​​ / KNX Schalter mit Audio​ / KNX PiRadio

          Kommentar

          Lädt...
          X