Ankündigung

Einklappen
Keine Ankündigung bisher.

ARDUINO am KNX

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

    Zitat von wintermute Beitrag anzeigen
    Hmm... ich meine nicht die tatsaehlichen Nutzdaten, sondern eher den Sketch welcher das interpretiert. KNX und 1wire alleine schaffen es schon beinahe den Speicher eines kleineren Arduinos komplett zuzukleistern. Ich hatte seinerzeit die Lib von debug-Ausgaben befreien muessen weil es sonst nicht mehr gepasst haette. Ein anderes KNX-Geraet komplett abzubilden koennte da mitunter schwierig werden.
    Haengt aber natuerlich vom verwendeten Arduino ab...
    Ach so. So meinst du das. Gut. Das wird sich zeigen.
    Allerdings finde ich die Idee mit dem "Programmier-Arduino" der am PC hängt und von dort aus die Parameter auf den Bus und die Geräte schiebt (per 14byte Texte z.B.) auch nicht schlecht.

    Ich mache das mittlerweile etwas anders, weil ich (dank Sternkabeln) meine Arduinos groesstensteils via RS485 verbinden kann und nur noch eine zentrale Instanz an den Bus haenge - dadurch wirds etwas preiswerter. Die "zentrale Instanz" ist dann ein ARM-basierter Arduino, oder mirwegen auch mal ein Raspi - da hat man dann etwas mehr Spielraum...
    Auch ne Möglichkeit... Damit hat man aber ein weiteres System im Haus. Wäre jetzt nicht so mein Ding.

    Kommentar


      Hi,
      mal kurz zu "was ist der Unterschied zwischen BCU und anderen Busankopplern".
      => ich denke ein "normaler" Busankoppler hat seine Intelligenz mit auf der Platine - inkl. Programmierknopf.
      Der BCU NICHT - das ist nur RS232<=>KNX. Fertig.

      Und zur Programmierung der KNX-Adresse:
      diese wird ja im Source-Code definiert: KnxTpUart knx(&Serial1, "1.1.3");

      Wenn du nun diese initialisierung aus dem EEPROM ließt (statt statisch) - und auf ein bestimmtes Telegramm hörst (14 byte text an...) und damit das EEPROM aktualisierst - hast du schon deine KNX-Addressänderung per KNX-Telegramm.

      Danach noch ein Reset (z.B. Three ways to reset an Arduino Board by code ) - oder vielleicht einfach ein neu-initialisieren desn KNX-Stacks (siehe oben)...

      Gruß
      Thorsten

      Kommentar


        Danke für die weiteren Details. Meine Hardware ist mittlerweile unterwegs. Irgendwo in Guangzhou ...

        Mal noch ne Frage:

        Wenn ihr Parameter/Adressen mittels 14 byte Text in den Arduinos setzt: Mit was macht ihr das praktischerweise?
        Und hat jemand einen IDE Tipp für Linux-User? Die Arduino-IDE ist ja nicht so der knüller. Hab schon gegoogelt, und es gibt auch so einiges. Aber bevor ich da jetzt ein halbes Dutzend durchprobiere ....
        Zur not geht auch Windows. Da gibt's wohl den Visual-Studio abklatsch... Aber Visual Studio hat mich noch nie vom Hocker gerissen.

        Kommentar


          Auf die Gefahr hin dass ich mit meinem theoretischen Fragen (warte noch auf meine Hardware) nerve:

          PA via ETS setzen funktioniert ja euren Angaben zu folge.

          "Parametrisieren" des Arduinos kann man über 14byte Text Telegram erledigen. Aber dafür brauch ich doch eine GA an die das Telegram geht, oder? Oder kann ich so ein Telegramm auch an eine PA senden? Wenn ja: Wie?
          Wenn nein: Wie bekommt der Arduino seine initielle GA zum entgegen nehmen der Parametrisierung? Wenn das nur wieder über hard-codieren geht, dann wäre das setzen der PA via ETS unnötig, weil ich ja doch wieder Dinge fest im Code verankern muss.

          Kommentar


            Zitat von tuxedo Beitrag anzeigen
            PA via ETS setzen funktioniert ja euren Angaben zu folge.
            Ja - wenn auch nicht mein favorit.

            Zitat von tuxedo Beitrag anzeigen
            "Parametrisieren" des Arduinos kann man über 14byte Text Telegram erledigen. Aber dafür brauch ich doch eine GA an die das Telegram geht, oder? Oder kann ich so ein Telegramm auch an eine PA senden? Wenn ja: Wie?
            Schon richtig - du brauchst eine GA - und du musst im source-code erstmal eine default PA und eine GA um umzuprogrammieren definieren.

            Alternativ - wenn man es "richtig" machen will - kann man natürlich deinen Programmierknopf einbauen - diesen per Software auswerten - und dann ein GA-Telegram richtig auswerten.... ich glaube ein bisschen Democode dafür ist vorhanden.

            Was auch geht müsste umprogrammieren sein - also ein Telegramm an die Adresse X lesen in dem steht das sich die Adresse von X auf Y ändert. Dazu musst du den empfangenen Telegramtyp auswerten... ist glaube ich noch NICHT im code - und die "listen"-Routine hört nicht standardmäßig auf diese Telegramme...

            Gruß
            Thorsten

            Kommentar


              Zitat von ThorstenGehrig Beitrag anzeigen
              Schon richtig - du brauchst eine GA - und du musst im source-code erstmal eine default PA und eine GA um umzuprogrammieren definieren.
              Okay, das wäre also das schnellste und einfachste.

              Aber ich würde das doch nach Möglichkeit gerne per SW bzw. Telegram erschlagen.

              Alternativ - wenn man es "richtig" machen will - kann man natürlich deinen Programmierknopf einbauen - diesen per Software auswerten - und dann ein GA-Telegram richtig auswerten.... ich glaube ein bisschen Democode dafür ist vorhanden.
              Kann dir nicht ganz folgen. Das mit dem Programmierknopf wurde hier ja erwähnt. Damit krieg ich das PA setzen per ETS hin. Soweit so gut. Glaub das passende Codefragment hab ich schon gefunden.

              Was auch geht müsste umprogrammieren sein - also ein Telegramm an die Adresse X lesen in dem steht das sich die Adresse von X auf Y ändert. Dazu musst du den empfangenen Telegramtyp auswerten... ist glaube ich noch NICHT im code - und die "listen"-Routine hört nicht standardmäßig auf diese Telegramme...
              Hier haper's gleich an mehreren Stellen:

              1) "Was auch geht müsste umprogrammieren sein - also ein Telegramm an die Adresse X lesen" --> Hä? HIer haben sich irgendwie seltsame Worte eingeschlichen. Ich kann nur erahnen was du meinst. Ich vermute mal:

              Ein Telegram (z.B. 14 byte Text) an eine vorderfinierte (dem Arduino bekannte) GA schicken, entsprechenden Auslese-Code im Arduino hinterlegen und die neue GA, die im Telegram steht setzen.

              Richtig? Aber dann hab ich ja wieder eine vordefinierte GA im Source. Gibt's keine Möglichkeit KEINE GA im Arduino zu hinterlegen und ein Telegram an eine PA zu schicken?
              Was hab ich überhaupt von der PA im Arduino-Fall? Letzendlich geht's ja doch immer nur um GAs auf die ich hören muss, oder?

              2) Die "listen"-Routine:

              In Beispiel-Code hier im Thread hab ich z.B. sowas gefunden:

              Code:
              void serialEvent1() {
                KnxTpUartSerialEventType eType = knx.serialEvent();
                if (eType == KNX_TELEGRAM) {
                  // ein Paket das wir "erwarten"
                  KnxTelegram* telegram = knx.getReceivedTelegram();
                  String target = String(0 + telegram->getTargetMainGroup()) + "/" +
                                  String(0 + telegram->getTargetMiddleGroup()) + "/" +
                                  String(0 + telegram->getTargetSubGroup());
                  if (telegram->getCommand() == KNX_COMMAND_WRITE) {
                    // Schreibendes Paket
                    if (target == ir_led1_addr) {
              ........
              Dann gibt's aber noch eine "KnxTpUartSerialEventType KnxTpUart::serialEvent()" in KnxTpUart.cpp" ... Wann greift denn die? Greift die nur wenn ich selbst keine "serialEvent()" Methode definiere? Oder greifen beide (wenn ich selbst auch eine definiere)?

              btw: Hab angefangen meinen Arduino/KNX 7-Kanal LED Controller zu dokumentieren: https://docs.google.com/document/d/1...it?usp=sharing

              Ist bei weitem noch nicht fertig, aber ich arbeite dran. Hab auch schon ein kleines Code-Grundgerüst angefangen. Hoffe die Hardware kommt bald.




              [update]

              ""Was auch geht müsste umprogrammieren sein - also ein Telegramm an die Adresse X lesen"" ...Nach dem x-ten mal lesen hab ich's geschnallt. Stand wohl auf dem Schlauch. Okay, damit ist in der Tat das umprogrammieren der/einer GA gemeint. Interessant wäre dennochm, wie oben beschrieben, ob es auch anfangs nicht komplett ohne GA geht. Hab im Code gesehen dass es auch ein "setListenToBroadcasts()" gibt. Kann aber nur erahnen was das macht. Die Frage ist auch: Wie sende ich einen Broadcast und was kann ich da alles rein stecken?

              [update2]
              Was hab ich überhaupt von der PA im Arduino-Fall?
              Die Frage kann ich mittlerweile selbst beantworten. Die PA wird als "Absender" beim Senden von Telegrammen an GAs genutzt, sowie zum "programmieren" des Geräts. Letzteres ist mit der KNX Lib noch nicht wirklich umgesetzt.

              Zur Frage:
              Wie sende ich einen Broadcast und was kann ich da alles rein stecken?
              hab ich auch schon eine anfängliche Antwort:
              https://knx-user-forum.de/382193-post10.html
              Mit dem eibd über xpropwrite ... Wäre jetzt noch interessant wie so ein Telegram dann auf Empfangsseite aussieht und ob man das mit der KNX Lib auf dem Arduino ohne weiteres lesen/parsen kann. Und wenn das geht wäre interessant wie man so ein xpropwrite mit dem Arduino macht. Dann könnte man mit einem weiteren Arduino ein "Programmiergerät" basteln der das einer "benutzerfreundlichen Software am PC" gefüttert wird. Der "komplizierte" Einsatz von eibd wäre dann nicht mehr nötig (für mich ist der eibd jedenfalls noch ein Buch mit 7 Siegeln....)

              [update3]

              Die Frage hier ist nun auch geklärt:

              Dann gibt's aber noch eine "KnxTpUartSerialEventType KnxTpUart::serialEvent()" in KnxTpUart.cpp" ... Wann greift denn die? Greift die nur wenn ich selbst keine "serialEvent()" Methode definiere? Oder greifen beide (wenn ich selbst auch eine definiere)?
              Das geht aus den Beispielen hervor. Z.b. das LearnKNXAddress-Beispiel. Hier sieht man dass im eigentlichen Sketch eine eigene serialEvent() Methode vorhanden ist. Und die erste Zeile darin lautet:

              Code:
              KnxTpUartSerialEventType eType = knx.serialEvent();
              Damit wird der Aufruf erstmal weitergeleitet. Sprich: Das lesen von der Schnittstelle wird zu bestehendem Code delegiert. Tut man das nicht, muss man selbst lesen. Aber damit wäre die KNX Lib ja unnötig ;-)

              Kommentar


                Bevor ich jetzt das 4. mal editiere, gibt's gleich eine neue Antwort ;-)

                Bzgl. dem PropertyRead / PropertyWrite:

                Hab das hier gefunden: http://www.mikrocontroller.net/attac...schreibung.pdf

                Mit dessen Hilfe bin ich am basteln von PropertyRead/-Write Unterstützung für die KNX Lib...

                Damit wäre dann das setzen der GAs ohne dass vorher überhaupt eine vergeben wurde möglich. *Yeaha*

                Testen kann ich's noch nicht. Muss mir auch erstmal eine Entwicklungsumgebung einrichten mit der ich direkt an das BitBucket Repo ran komme.

                Kommentar


                  Also ich hab irgendwo nen Code-Skeleton fertig gemacht der das alles kann. Per default wird einfach die 15.15.255 im Code hinterlegt. Dann das normale Prozedere mit Taster drücken,LED leuchtet und die ETS findet den Arduino.
                  Fertig. Die PA wird dann im Speicher des Arduinos abgelegt und übersteht auch Neustarts.
                  Ich such den die Tage mal raus.
                  Umgezogen? Ja! ... Fertig? Nein!
                  Baustelle 2.0 !

                  Kommentar


                    Und der kann auch property read/write? Setzen der PA war ja kein Thema. Konnte es praktisch mangels Hardware noch nicht testen.

                    Kommentar


                      Ich hatte das hier bei mir lokal eingebaut: https://knx-user-forum.de/376348-post122.html

                      Bin der Meinung dass damit auch xpropwrite/read funktionierte. Ist aber schon 6Monate her dass ich mich damit akut beschäftigte. Dazwischen hatte ich nur Augen, Ohr, Hirn und Hände für den Garten.
                      Umgezogen? Ja! ... Fertig? Nein!
                      Baustelle 2.0 !

                      Kommentar


                        Danke. Das wird weiter helfen. Hatte bisher nur den Rahmen für das Property read/write geschaffen. Wusste aber noch nix über den Inhalt des Telegrams sowie des Antwort-Telegrams.

                        Wenn ich meine Hardware irgendwann noch bekomme (12-34 Tage können ja soooo lang sein), dann bau ich das ein uns teste es. Gibt dann auch einen Push ins Haupt-Repo von Thorsten ;-)

                        Kommentar


                          Zitat von l0wside Beitrag anzeigen
                          Done, ohne Garantie. Das Auslesen der Werte und Abspeichern überlasse ich Kundigen
                          Code ist nicht getestet und auch nicht debuggt. Viel Spaß damit.

                          Gruß,

                          Max

                          ....
                          Hast du zufällig ne Info/Doku was in einem property-read/write(/response) Telegram drin steht, bzw. wie es aufgebaut ist? Link würde reichen.

                          Gruß
                          Alex

                          Kommentar


                            Zitat von tuxedo Beitrag anzeigen
                            Mit dessen Hilfe bin ich am basteln von PropertyRead/-Write Unterstützung für die KNX Lib...
                            So sehr ich mich auch drüber freue, dass auch andere an der Lib mitmachen: Ich persoenlich taete es begruessen, Sonderfunktionen (wie zB das property r/w) irgendwie aus der Basis-Lib rauszuhalten. Ich habs schon ein paarmal geschrieben: die Basis-Lib, 1wire und ein ziemlich kurzer Sketch haben mich seinerzeit dazu "gezwungen" die Basis-Lib von saemtlichen Debug-Ausgaben zu "befreien" weil es sonst nicht mehr in den Speicher eines Minis gepasst haette.
                            Sobald das ganze dann anspruchsvoller werden sollte und zB noch jemand IR oder sowas machen moechte, wird das alles den Speicher platzen lassen. Ich wuerde es besser finden wenn solche Funktionen (ausserhalb der grundlegenden KNX-Kommunikation) in einem gesonderten Projekt Platz finden taeten.


                            Also lieber eine darauf aufbauende Klasse etablieren, anstatt alles solange aufzupusten bis niemand mehr was machen kann, ausser Telegramme zu debuggen


                            my 2 cents :: Michael

                            Kommentar


                              Keine schlechte Idee. Entwickle schon seit Jahren Software. Aber jetzt erst für uC... Da muss man sich bzgl. Speicherplatz erstmal umgewöhnen. Mal schauen wie ich das schön sauber vom Rest trenne und dennoch einfach nutzbar mache.

                              Gruß
                              Alex

                              Kommentar


                                Ist zwar etwas Arduino-Offtopic, aber da es hier ja zuletzt um das Thema Speicherplatz ging:

                                Gerade drüber gestolpert:

                                Arietta G25 - Low cost Linux embedded module

                                Das Ding ist winzig und hat einige Features die ein Arduino auch hat. Preis ist auch ganz okay.

                                Kommentar

                                Lädt...
                                X