Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    Danke allen hier im Forum für diesen super hilfreichen Thread insbesondere Thorsten und Wintermute für die geniale Arbeit!
    Ich habe mich relativ weit durchgelesen und konnte am Schluss ein einfaches "Blink Script" schnell zum laufen bringen auf einem Arduino Nano. Man darf einfach nicht auf der ersten Seite, den ersten Script ausprobieren da ist der String von "GroupWrite" noch eigenartig definiert.

    Ausserdem kann man mit dem Arduino Nano nur senden, ausser man "kappt" FTDI auf dem Print. Wenn man gute Augen hat...

    Für alle die wie ich Anfänger sind und versuchen KNX mit dem Siemens Buskoppler BCU 5WG1 117-2AB12 auf einem Arduino Nano zum laufen zu bringen, hier ein Script mit Beschreibung zum PinOut, der läuft. Ich habe mit 1.6.12 compiliert.

    Damit kann man zb. mit dem Ultraschalldistanzsensor ziemlich einfach eine Füllstandsanzeige für einen Tank machen.

    Code:
    // File: GroupWriteBlinkTest.ino
    
    // Author: Raphael Huber (2020)
    
    //
    // Test constellation = ARDUINO NANO 5V <-> 5WG1 117-2AB12
    //  Arduino BusCoupler
    //  Nano
    //  GND     GND (PIN 1)
    //  5V       VCC (PIN 5)
    //  RX  30  TX  (PIN 4)
    //  TX  31  RX  (PIN 2)
    
    #include <KnxTpUart.h>
    
    // Set Groupadress of this arduino
    KnxTpUart knx(&Serial, "5.0.30");
    
    void setup() {
    
      // LED
      pinMode(13, OUTPUT);
      digitalWrite(13, LOW);
    
      // KNX
      Serial.begin(19200, SERIAL_8E1);
      knx.uartReset();
    }
    
    void loop() {
      knx.groupWriteBool("1/1/28", true);
      digitalWrite(13, HIGH);
      delay (1000);
    
      knx.groupWriteBool("1/1/28", false);
      digitalWrite(13, LOW);
      delay (1000);  
      
    }
    Zuletzt geändert von raphaelhuber; 11.01.2020, 16:07.

    Kommentar


      Das Konzept Arduino mit KNX Buskoppler scheint ja gut zu funktionieren.
      Mich würde interessieren, wie hoch der Energieverbrauch ist.
      Der Buskoppler ist ja immer aktiv und liefert seine Spannungen.
      Zwischen dem Buskoppler und dem Arduino gibt es ja auch keine Interrupts/Trigger, mit dem mein den Arduino aus dem Schlafmodus holen könnte.
      D.h. der Arduino läuft auch permanent.

      Ich habe heute erfolglos versucht, aus den Datenblätter von Siemens den Stromverbrauch des Buskopplers (ohne Arduino) herauszulesen.
      Auch dessen Chiphersteller liefert hierzu keine Daten.

      Der Stromverbrauch des Arduino ist ja einigermassen bekannt.
      Hat einer von Euch mal nachgemessen, wie hoch der Stromverbrauch des Buskopplers ist?

      Ich hoffe meine Frage erzürnt Euch nicht. Ich weiß ja auch, dass KNX Komponenten teurer als der Stromverbrauch ist. Aber wir sind ja jetzt in 2020 mit Friday for Future...

      Kommentar


        Schau mal in meine Signatur, beim Smelly hatte ich die Stromaufnahme gemessen (edit: im dritten Post steht was dazu).
        Zuletzt geändert von dreamy1; 13.01.2020, 08:12.
        Viele Grüße,
        Stefan

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

        Kommentar


          raphaelhuber
          die "delay"s machen sich da nicht so gut.
          Vor allem wenn du mehr möchtest außer ständig den high/low Zustand zu ändern.
          Irgendwann möchtest du auch auf eingehende Telegramme reagieren und so kann der Arduino diese unter Umständen nicht auswerten da ehr einfach wärend "delay" nichts tut.

          Zeppelin
          Der Stromverbrauch wird ca. im Rahmen von "normalen" KNX Busteilnehmern liegen, da die BCU ja auch bei "normalen" Siemens KNX Tastern zum Einsatz kommt.

          Kommentar


            Zitat von LostWolf Beitrag anzeigen
            raphaelhuber
            die "delay"s machen sich da nicht so gut.
            Vor allem wenn du mehr möchtest außer ständig den high/low Zustand zu ändern.
            Irgendwann möchtest du auch auf eingehende Telegramme reagieren und so kann der Arduino diese unter Umständen nicht auswerten da ehr einfach wärend "delay" nichts tut.

            Zeppelin
            Der Stromverbrauch wird ca. im Rahmen von "normalen" KNX Busteilnehmern liegen, da die BCU ja auch bei "normalen" Siemens KNX Tastern zum Einsatz kommt.
            Das ist ein sehr guter Hinweis für alle die mit Arduino anfangen. Obenstehender Code ist zwar mehr auch nur ein Proof of Concept, als etwas sinnvolles, aber ehrlich gesagt wusste ich zum Zeitpunkt als ich das gemacht habe nicht, dass delays besser ersetzt werden mit "Zeitangaben".

            Dazu allen die am gleichen Punkt sind wie ich der Tip folgenden Code bis ins letzte Detail zu verstehen, das bildet eine wichtige konzeptionelle Grundlage: https://www.arduino.cc/en/tutorial/BlinkWithoutDelay

            Kommentar


              Vielen Dank für die Info zum Stromverbrauch des Buskopplers.
              0.083W sind OK für mich. Ich hatte mit höheren Werten gerechnet.
              Bei 12 Geräten mit 12 Koppler sind es dann 1W in Summe.
              Stromkosten pro Jahr sind dann ~2.20€.

              Kommentar


                Zitat von tooooooobi Beitrag anzeigen
                Hier mal ein kurzer Zwischenstand, Lesen und Schreiben auf den Bus:

                Klappt am UNO (mit dem Jumper)
                Klappt am (original-) NANO (Ohne Jumper)
                Klappt nicht am Nachbau-Nano (ch340g) - egal ob mit oder ohne Jumper

                Hat jemand eine Idee wie sich die beiden Nanos unterscheiden? Liegt das am ch340g-Chip? Den Trick mit Pin 19 habe ich nicht probiert...
                LG
                Tobias
                Kannst Du mal Deinen Sketch posten? Ich kriege lesen einfach nicht hin, weder mit UNO, noch mit Pro Mini noch mit Nano. Das Jumpern etc. habe ich alles probiert.

                Kommentar


                  Hier mal Quick and dirty, das ganze LED-Geblinke kostet unnötige Zeit und sollte nach dem Debuggen entfernt werden...

                  Leider gehen die Einrückungen offenbar kaputt...


                  Code:
                  // Geht auf NANO Original
                  // Geht nicht auf Nano Nachbau
                  // Geht auf Uno
                  // Geht auf Pro Mini
                  
                  #include <KnxTpUart.h>
                  KnxTpUart knx(&Serial, "1.1.199"); //Adresse des Geraetes
                  
                  int LED = 13;
                  int target_6_6_1;
                  int target_6_6_2;
                  int target_6_6_3;
                  int target_6_6_4;
                  int target_2_2_5;
                  
                  void setup() {
                  pinMode(LED, OUTPUT); // PIN 13 as output
                  
                  digitalWrite(LED, HIGH);delay(800);digitalWrite(LED, LOW);delay(800);digitalWrite(LED, HIGH);delay(800);digitalWrite(LED, LOW);delay(800);
                  digitalWrite(LED, HIGH);delay(800);digitalWrite(LED, LOW);delay(800);digitalWrite(LED, HIGH);delay(800);digitalWrite(LED, LOW);delay(800);
                  
                  Serial.begin(19200, SERIAL_8E1);
                  knx.uartReset();
                  knx.addListenGroupAddress("6/6/1");
                  knx.addListenGroupAddress("6/6/2");
                  knx.addListenGroupAddress("6/6/3");
                  knx.addListenGroupAddress("6/6/4");
                  knx.addListenGroupAddress("2/2/5");
                  
                  // Optional: Abfragen der Werte bei Start
                  delay(1000);
                  knx.groupRead("6/6/1");
                  knx.groupRead("6/6/2");
                  knx.groupRead("6/6/3");
                  knx.groupRead("6/6/4");
                  }
                  
                  void loop() {
                  }
                  
                  void serialEvent() {
                  //Aufruf knx.serialEvent()
                  KnxTpUartSerialEventType eType = knx.serialEvent();
                  
                  //Evaluation of the received telegram -> only KNX telegrams are accepted
                  if (eType == KNX_TELEGRAM) {
                  KnxTelegram* telegram = knx.getReceivedTelegram();
                  
                  digitalWrite(LED, HIGH);
                  delay(100);
                  digitalWrite(LED, LOW);
                  delay(100);
                  
                  // Telegram evaluation on KNX (at reception always necessary)
                  String target =
                  String(0 + telegram->getTargetMainGroup()) + "/" +
                  String(0 + telegram->getTargetMiddleGroup()) + "/" +
                  String(0 + telegram->getTargetSubGroup());
                  
                  
                  // --------------------------------------------------------------- LESEANFRAGE BEANTWORTEN ---------------------------------------------------------------------------
                  if (telegram->getCommand() == KNX_COMMAND_READ) { // Eine Leseanfrage mit der Bitte um Beantwortung
                  if (target == "6/6/1") {
                  target_6_6_1 = telegram->getBool(); // Wert in Variable speichern
                  knx.groupAnswer1ByteInt("6/6/1", 126); // Anfrage beantworten
                  }
                  else if (target == "6/6/2") {
                  target_6_6_2 = telegram->getBool(); // Wert in Variable speichern (ist das wirklich erforderlich?)
                  knx.groupAnswer1ByteInt("6/6/1", 177); // Anfrage beantworten
                  knx.groupRead("2/2/5"); // selbst eine Anfrage stellen
                  }
                  else if (target == "6/6/3") {
                  target_6_6_3 = telegram->get1ByteIntValue();
                  }
                  }
                  
                  // ---------------------------------------------------------- Selbst auf eine Antwort warten -----------------------------------------------------------------------
                  if (telegram->getCommand() == KNX_COMMAND_ANSWER) {
                  if (target == "2/2/5") {
                  target_2_2_5 = telegram->getBool();
                  if(target_2_2_5 == true) {
                  knx.groupWriteBool("6/6/20", true);
                  }
                  else {
                  knx.groupWriteBool("6/6/20", false);
                  }
                  }
                  }
                  
                  // ----------------------------------------------------------- Nur mithören und reagieren --------------------------------------------------------------------------
                  
                  if (telegram->getCommand() == KNX_COMMAND_WRITE) {
                  if (target == "6/6/4") {
                  target_6_6_4 = telegram->getBool();
                  if(target_6_6_4 == true) {
                  digitalWrite(LED, HIGH);
                  }
                  else {
                  digitalWrite(LED, LOW);
                  }
                  }
                  }
                  
                  
                  
                  
                  }
                  }

                  Kommentar


                    Guten Morgen,
                    ich experinemtiere jatzt auch schon längere zeit mit KNX am Arduino.
                    Ich habe den Artikel denke ich komplett gelesen.
                    Trotzdem habe ich eine Frage: muss der Busankoppler in ETS eine Adresse bekommen?
                    Wenn ja, dann diese aus dem Sketch:
                    KnxTpUart knx(&Serial, "5.0.30");

                    Mit den nano nachbau komme ich auch nicht weiter, ich werde das ganze heute mit dem Mega testen.

                    Gruß
                    Bernhard

                    Kommentar


                      Zitat von boots Beitrag anzeigen
                      muss der Busankoppler in ETS eine Adresse bekommen?
                      muss nicht . Es ist jedoch imho sehr sinnvoll, alle Geräte in der ETS anzulegen. Dazu nehme ich i.d.R. ein Dummy-Gerät. Darin kannst Du auch die verwendeten GAs einpflegen. So bleibt "alles" in der ETS sauber dokumentiert.

                      Gruß Marco

                      Kommentar


                        Hi Marco, Danke.

                        nimmst du dann die Grp-Adresse aus dem Sketch oder eine andere?
                        Ich werde heute den Mega anschliessen, da der Nano Clone nicht funktioniert. Da kommt im Bus-Monitor immer nur "Schrei-Meldung". Sonst sehe ich nichts.
                        gruß
                        Bernhard

                        Kommentar


                          Zitat von dreamy1 Beitrag anzeigen
                          Das auf der ersten Seite ist kein lauffähiger Code, u.a. muss dem UART noch even parity beigebracht werden. Schau mal in die Beispiele auf der verlinkten Seite im ersten Post, wo die Lib abliegt.
                          Danke Dreamy1 , sehr wichtiger Hinweis. Glatt überlesen.
                          VG
                          Bernhard

                          Kommentar


                            Zitat von boots Beitrag anzeigen
                            nimmst du dann die Grp-Adresse aus dem Sketch oder eine andere?
                            ja, alles was im Sketch programmiert ist (PA, GA(s), DPT) sollte auch in der ETS dokumentiert sein. Da geht (soweit mir bekannt) nichts zu automatisieren, ist also "zusätzliche Handarbeit", lohnt sich aber auf jeden Fall. Und wenn Du Deinen Sketch im Gruppenmonitor verfolgen willst, hilft es auch sehr gut weiter.

                            Gruß Marco

                            Kommentar


                              5WG1117-2AB12 ist das Zauberwort. So wie es im ersten Post geschrieben steht.
                              Viele Grüße,
                              Stefan

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

                              Kommentar

                              Lädt...
                              X