Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

    Danke für die schnelle Antwort

    Kommentar


      Hallo,

      ich fange jetzt mit der RS232 Kommunkation unter Linux an.

      Die Konfiguration des Gerätes wird aus dem Speicher gelesen. Gibt es eine Möglichkeit Kommunikationsobjekte und Gruppenadressen ohne die ETS anzulegen, da noch keine Verbindung zum KNX Bus besteht. So würde ich mir gerne ein Gerät mit folgenden Daten erzeugen:
      • Physikalische Adresse 1.1.150
      • Gruppe 2/0/10 Schalten Ein/Aus
      • Gruppe 2/0/11 Status Schalten
      Es gab nur eine Funktion zum Lesen der pysikalischen Adresse, also habe ich mit eine zum Schreiben dazugefügt. Gescheitert bin ich aber beim Erzeugen der Gruppen- und Kommunikationsobjekte.

      Jetzt könnte ich mir 2 Möglichkeiten vorstellen:
      1. Beim Starten werden die entsprechenden Daten im Speicher des Gerätes erzeugt
      2. Die Konfiguration des Gerätes wird gelesen und geschrieben (readMemory/WriteMemory). Kann ich eine gültige Konfiguration erzeugen und im entsprechenden Format erzeugen?
      Das ganze brauche ich nur um die Kommunikation zu entwickeln oder bin ich vielleicht auf dem Holzweg?

      Vielen Dank

      Werner

      Kommentar


        Hallo Werner,

        Machbar ist das ganze zwar, aber ich glaube nicht das es notwendig ist. Du willst ja nur in der Linuxplatform die Methoden zum Lesen und schreiben über uart implementieren. Dazu würde ich einfach eine Instanz der Linuxplatform erzeugen und dann direkt als uint8_t* ein festes Telegramm senden. Wenn du dass in Monitor von ETS siehst ist das Senden erledigt. In einer Schleife würde ich Telegramme lesen. Wenn du dort die gleichen liest die du auch im Monitor siehst bist du damit auch fertig.
        Dann kannst du einfach testen ob das Beispiel auch mit der Bau07B0 funktioniert.

        Wenn du den Stack unbedingt per Code konfigurieren willst: Du müsstest für AdressTable, AssociationTable, ApplicationProgramm und GroupObjectTable Speicher über das TableObject holen und dann den dann richtig füllen. Das Format dazu steht in der Knx-Spezifikation, sollte sich aber auch aus dem Code ableiten lassen.
        Im Wesentlichen (aus dem Kopf):
        ApplicationProgramm: Die konfigurierten Parameter.
        AddressTable: uint16_t[]; {Länge des Arrays, GA0, GA1, ....} (AT)
        GroupObjectTable: uint16_t[] {Länge des Arrays; KO0, KO1, ...} (GOT)
        AssociationTable: uint16_t[] {Länge des Arrays( der Paare); Paar1(Index von AT, Index von GOT), Paar2(Index von AT, Index von GOT)

        Das wäre also schon relativ viel Aufwand das per Code zu konfigurieren.

        VG
        Thomas

        Kommentar


          Zitat von thesing Beitrag anzeigen
          Dazu würde ich einfach eine Instanz der Linuxplatform erzeugen und dann direkt als uint8_t* ein festes Telegramm senden.
          Danke, dann hab es doch richtig verstanden. So werde ich es machen. Wenn die Kommunikation läuft kann ich ja die ETS zur Konfiguration verwenden.

          Kommentar


            hab jetzt mal den letzten Stand ausgecheckt, bekomme da aber folgende Meldung: "saved memory doesn't match manufacturerId, version or hardwaretype"
            Ich hab da scheinbar was übersehen, du prüfst da neuerdings irgendwelche Dinge ab die bei einem "blanken" Controller noch fehlen, wie und wo definiere ich diese Dinge?

            Kommentar


              Noch etwas ist mir aufgefallen, in den Beispiel xml files beginnt das erste KO bei
              Code:
              Number="1"
              in kommerziellen knxprod files beginnt es mit
              Code:
              Number="0"
              Wenn ich ein knxprod file mit 0er KO erstelle, hängt der MC sobald er auf diesem KO was empfängt...
              getGroupObject(x) macht auch irgendwann ein (x-1) also geht dein Stack aktuell davon aus das die KOs mit 1 beginnen?

              Kommentar


                Hi Bernhard,

                irgendwo in den Thread stand das schon mal: Erstes KO ist die 1. Den Grund weiß ich nicht mehr. Ich mach es einfach...

                Gruß, Waldemar

                Kommentar


                  Danke, läuft bei dir der aktuelle git Stand?

                  Kommentar


                    Die erste KO ist bei System B die 1. Bei System 7 ist es die 0. Die ManufacturerId, Version und Hardwaretype kann man am DeviceObject einstellen. Es kann sein, dass die entsprechenden Properties an der KnxFacade noch fehlen. Diese Zahlen ersetzen die Magic Numbers am Start des Flashs. Dadurch kann man sicher stellen, dass nur Daten aus dem Flash gelesen werden, wenn der Sketch auch dazu passt. Der aktuelle Stand im git funktioniert zumindest unter Linux. Auf den MCUs teste ich nicht all zu oft. Was ist denn das Problem?

                    VG
                    Thomas

                    Kommentar


                      Hi Bernhard,

                      neee, ich hab schon lange nicht mehr aktualisiert. Ich will erstmal das, was ich hier mache, halbwegs produktiv bekommen, mit Deiner Flash-Optimierung und meiner RAM-Optimierung (kleinere KO). Ich bekomme irgendwann meine 20 Sensormodule und will dann die Firmware dafür fertig haben.

                      Ich versuch mich zur Zeit mit ner sauberen BME680 implementierung, die aber mein Logikmodul nicht blockieren darf, dann will ich noch den SAVE-Interrupt vom NCN5130 nutzen (beim Stromausfall alle Werte ins EEPROM sichern) und dann noch einige sporadische Hänger vom I2C-Bus ausbügeln, das dauert alles viel länger als ich gedacht hatte und die Testintervalle sind auch recht lang - es sind eben sporadische Fehler zu entdecken und auszubügeln.

                      Deswegen bin ich auch nicht auf die aktuellste Version gegangen, dann müsste ich auch nochmal all die Sachen testen, die ich bei Deiner Flash-Optimierung getestet habe - dazu hab ich derzeit keinen Nerv...

                      Das heißt nicht, dass ich das nicht machen werde - ich will vorher nur all die anderen Bugs und Unschönheiten weg haben, bevor ich den Stack austausche. Sonst frage ich mich immer wieder, ob der Fehler jetzt durch den neuen Stack oder durch mein Coding passiert ist.

                      Da ich jetzt wieder fulltime arbeite, hab ich auch nicht mehr so viel Zeit, hieran zu arbeiten, insofern wird es noch 2-3 Monate dauern, bis ich mich wieder dem Stack widmen kann. So ist zumindest der Plan...

                      Gruß, Waldemar

                      Kommentar


                        Alles klar Zeit hab ich auch immer zu wenig
                        Problem ist die Meldung wie oben erwähnt und das er dort nicht weiter macht wenn es nicht zusammen passt, aber ich hab die Dinge im DeviceObject jetzt gefunden, werde das dann nochmal testen. Vielleicht kommst du mal dazu das im Demo Projekt zu ergänzen, aktuell fehlt das dort ja auch noch und somit muss eine ETS Programmierung auch dort scheitern.

                        Kommentar


                          Hallo zusammen und gesundes Neues!

                          Keine Platform lässt sich mit dem aktuellen Stand per ETS programmieren, der Controller Antwortet nicht auf "DeviceDescriptorRead".

                          Der letzte Funktionierende Stand ist für mich Commit 4ef513410a7122d6892c3aa963e82d2abbbdeaf3

                          Da ihr gerade beim Thema seid dachte ich ich erwähne das Mal, eventuell hat ja jemand eine Idee was ich tun muss damit der aktuelle Stand läuft.


                          Edit: getestet habe ich auf mit ESP8266 (Wemos D1) sowie SAMD21 (generisches Breakout)
                          Zuletzt geändert von demacus; 09.01.2020, 21:27.

                          Kommentar


                            Hi,

                            wer (welche Stelle) macht eigentlich im Stack das ACK für die Gruppenkommunikation?

                            Folgende Situation: Ich habe eine GA an einem Eingangs-KO (also S-Flag gesetzt), wenn ich auf diese GA eine 1 schicke (per ETS oder von einem anderen KNX-Device ist egal), wird mein Callback für dieses KO 4 mal aufgerufen und im Busmonitor sehe ich 4 Wiederholungen. Wenn ich diese GA auch noch mit einem anderen Eingang eines gekauften KNX-Devices verbinde, gibt es ein ACK (im Busmonitor steht da LL_ACK) und es gibt keine Wiederholungen.

                            Für mich sieht das so aus, als ob das Modul kein ACK sendet und ich wollte wissen, wo ich reindebuggen muss, um das zu prüfen...
                            • Passiert das generisch im Stack?
                            • Oder in der tpuart-Implementierung?
                            • Oder gar durch die tpuart-Hardware? Dann würde bei mir irgendeine Einstellung fehlen...
                            Ist übrigens ein Problem bei einem Bekannten, bei mir zu Hause ist es bisher nicht aufgefallen, weil ich (wegen meiner Visu) den Linienkoppler auf "Alle Telegramme auf der Hauptlinie bestätigen" stehen habe. Ich werde - sobald ich wieder zu Hause bin - versuchen, das Problem zu reproduzieren, wollte mir vorher aber das Coding anschauen... Ich habe auch schon im Coding gesucht, aber es sind so viele Methoden mit "ack" in der Signatur, dass ich den Wald vor lauter Bäumen nicht sehe...

                            Bin für jeden Tipp dankbar,
                            Gruß, Waldemar

                            Kommentar


                              Das Ack sendet der tpuart selbstständig zum richtigen Zeitpunkt, dazu muss aber vom Host (der SamD) ein Ack_Req im richtigen Zeitfenster kommen, das passiert hier nachdem geprüft wurde ob die GA überhaupt vorhanden ist im Device.
                              Was der tpuart mach wenn der Ack_Req zu spät oder gar nicht kommt weiß ich grad nicht, vermutlich macht er nix und das Telegramm bekommt somit kein Ack.

                              Ich könnte mir vorstellen das es ein timing Problem gibt und der Stack nicht schnell genug aufgerufen wird und somit das Zeitfenster für den Ack_Req verpasst...

                              Kommentar


                                Zitat von wkaa Beitrag anzeigen
                                ich fange jetzt mit der RS232 Kommunkation unter Linux an
                                Hallo,

                                arbeitest Du an der seriellen Kommunikation für Linux? Wird es da bald eine Lösung geben? Ich wäre sehr daran interessiert.

                                Gruß
                                THomas

                                Kommentar

                                Lädt...
                                X