Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

    Ich habe übrigens mal ein Klassendiagramm der wichtigsten Klassen erstellt. Da kann man sehen welche Klasse welche anderen nutzt: https://knx.readthedocs.io/en/latest...sdiagramm.html

    Kommentar


      "U_FRAMESTATE_IND" kommt nur im 8bit Uart Mode, sollte also passen

      Zitat von thesing Beitrag anzeigen
      Frames die jemand anderes mit der gleichen Geräteadresse wie man selbst hat empfängt, sollen aber weiter gegeben werden.
      Kanns das überhaupt geben? Woher kommt diese Info, hab im Standard auf die schnelle nichts dazu gefunden aber der ist ja ziemlich Umfangreich

      Hab gestern noch mit einem eigenen Datalinklayer angefangen, wird aber noch ne Zeit dauern da ich vermutlich erst übernächste Woche wieder zum programmieren komme

      Kommentar


        Klassendiagramm ist spitze

        Kommentar


          Es sollte in einer normalen Installation nicht vorkommen. Wenn man allerdings zwei Geräten die gleiche PA gibt hat man den Fall. ETS kann das über PID_DEVICE_CONTROL (PID = 14) abfragen (3_5_1) In 2.7 und 3_3_2 würde es auch stehen. Die richtige Information dazu findet sich in der Norm EN 50090-4-2:2004 4.3.6 L_Service_Information service. Ich bin wahrscheinlich der einzige, der sich Urlaub nimmt, um in die Universitätsbibliothek nach den Normen zu schauen.

          Ob das wirklich ausgewertet wird weiß ich nicht.

          Kommentar


            Vermutlich wird es so, dass Du der einzige bist. Meine Hochachtung hast Du jedenfalls. Bringt Dich und das Projekt zwar nicht weiter, aber ich finde es eine super super Leistung. An dieser Stelle einmal Danke für Deine aufgewendete Zeit. Leider fehlt sie mir im Moment, mich aktiv mit diesem/Deinem Projekt hier zu beschäftigen, aber ich lese und verfolge es fleißig mit.

            Kommentar


              Hi Thomas,

              ich wollte mal wieder Feedback geben, auch wenn es länger gedacht hat, als ich dachte. Ich habe ja mein Projekt auf die neuen DPT umgestellt und teste. Unter anderem auch Deinen neuen "Restart"-Befehl.

              Zu den DPT: Ich bin mir wirklich nicht sicher, ob ich das korrekt mache, da mir nicht wirklich klar ist, wann man diese "mehrkomponentigen" DPT braucht. Ich konnte erfolgreich DPT 1, 5, 5.001 schreiben, DPT 2 und 6 aber nicht. DPT 2 schreibt bei einer 3 (Priority On) eine 2 auf den Bus (Priority Off), DPT 6 schreibt für jede negative Zahl eine 0 auf den Bus. Mehr DPTs habe ich noch nicht getestet, das kommt noch. Kann ich irgendwas prüfen bzw. was bräuchtest Du, damit ich Dich bei der Korrektur unterstützen kann?

              Hier noch eine Anmerkung: Ich komme auch mit dem "RAW"-Ansatz
              Code:
                  uint8_t *valueRef = Ko.valueRef();
                  *valueRef = value;
                  Ko.objectWritten();
              klar, das liefert mir die erwarteten Werte, ich wollte nur Feedback geben.


              Zum Restart-Befehl:
              Deine neue Methode sendet wirklich ein Restart auf den Bus, aber eben nur dieses Telegramm:
              Code:
               [TABLE]
               	 		[TR]
               			[TD]#[/TD]
               			[TD]Time[/TD]
               			[TD]Service[/TD]
               			[TD]Flags[/TD]
               			[TD]Prio[/TD]
               			[TD]Source Address[/TD]
               			[TD]Source Name[/TD]
               			[TD]Destination Address[/TD]
               			[TD]Destination Name[/TD]
               			[TD]Rout[/TD]
               			[TD]Type[/TD]
               			[TD]DPT[/TD]
               			[TD]Info[/TD]
               		[/TR]
               		[TR]
               			[TD]435[/TD]
               			[TD]06/07/2019 17:21:42,165[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]Low[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]6[/TD]
               			[TD]Restart[/TD]
               			[TD] [/TD]
               			[TD] [/TD]
               		[/TR]
               	 [/TABLE]
              Wobei ich hier versuht habe, dass sich das Logikmodul selbst neu startet.
              Das funktioniert nicht. Wenn ich das gleiche mit der ETS mache, sieht das bei einem IP-Gerät so aus:

              Code:
               [TABLE]
               	 		[TR]
               			[TD]#[/TD]
               			[TD]Time[/TD]
               			[TD]Service[/TD]
               			[TD]Flags[/TD]
               			[TD]Prio[/TD]
               			[TD]Source Address[/TD]
               			[TD]Source Name[/TD]
               			[TD]Destination Address[/TD]
               			[TD]Destination Name[/TD]
               			[TD]Rout[/TD]
               			[TD]Type[/TD]
               			[TD]DPT[/TD]
               			[TD]Info[/TD]
               		[/TR]
               		[TR]
               			[TD]419[/TD]
               			[TD]06/07/2019 17:20:24,246[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]6[/TD]
               			[TD]T_Connect[/TD]
               			[TD] [/TD]
               			[TD] [/TD]
               		[/TR]
               		[TR]
               			[TD]420[/TD]
               			[TD]06/07/2019 17:20:24,267[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]6[/TD]
               			[TD]DeviceDescriptorRead (S=0)[/TD]
               			[TD] [/TD]
               			[TD]DescriptorType=0[/TD]
               		[/TR]
               		[TR]
               			[TD]421[/TD]
               			[TD]06/07/2019 17:20:24,272[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]6[/TD]
               			[TD]T_ACK (S=0)[/TD]
               			[TD] [/TD]
               			[TD] [/TD]
               		[/TR]
               		[TR]
               			[TD]422[/TD]
               			[TD]06/07/2019 17:20:24,292[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]6[/TD]
               			[TD]DeviceDescriptorResponse (S=0)[/TD]
               			[TD] [/TD]
               			[TD]DescriptorType=0, DescriptorData=57 B0[/TD]
               		[/TR]
               		[TR]
               			[TD]423[/TD]
               			[TD]06/07/2019 17:20:24,292[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]6[/TD]
               			[TD]T_ACK (S=0)[/TD]
               			[TD] [/TD]
               			[TD] [/TD]
               		[/TR]
               		[TR]
               			[TD]424[/TD]
               			[TD]06/07/2019 17:20:24,360[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]6[/TD]
               			[TD]PropertyValueRead (S=1)[/TD]
               			[TD] [/TD]
               			[TD]ObjectIndex=0, PropertyId=56, Count=1, StartIndex=1[/TD]
               		[/TR]
               		[TR]
               			[TD]425[/TD]
               			[TD]06/07/2019 17:20:24,362[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]6[/TD]
               			[TD]T_ACK (S=1)[/TD]
               			[TD] [/TD]
               			[TD] [/TD]
               		[/TR]
               		[TR]
               			[TD]426[/TD]
               			[TD]06/07/2019 17:20:24,383[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]6[/TD]
               			[TD]PropertyValueResponse (S=1)[/TD]
               			[TD] [/TD]
               			[TD]ObjectIndex=0, PropertyId=56, Count=1, StartIndex=1, Data=00 0F[/TD]
               		[/TR]
               		[TR]
               			[TD]427[/TD]
               			[TD]06/07/2019 17:20:24,383[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]6[/TD]
               			[TD]T_ACK (S=1)[/TD]
               			[TD] [/TD]
               			[TD] [/TD]
               		[/TR]
               		[TR]
               			[TD]428[/TD]
               			[TD]06/07/2019 17:20:24,405[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]6[/TD]
               			[TD]Restart (S=2)[/TD]
               			[TD] [/TD]
               			[TD] [/TD]
               		[/TR]
               		[TR]
               			[TD]429[/TD]
               			[TD]06/07/2019 17:20:24,423[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]6[/TD]
               			[TD]T_ACK (S=2)[/TD]
               			[TD] [/TD]
               			[TD] [/TD]
               		[/TR]
               		[TR]
               			[TD]430[/TD]
               			[TD]06/07/2019 17:20:24,426[/TD]
               			[TD]from bus[/TD]
               			[TD] [/TD]
               			[TD]System[/TD]
               			[TD]0.0.1[/TD]
               			[TD]-[/TD]
               			[TD]0.0.3[/TD]
               			[TD]Lokikmodul[/TD]
               			[TD]6[/TD]
               			[TD]T_Disconnect[/TD]
               			[TD] [/TD]
               			[TD] [/TD]
               		[/TR]
               	 [/TABLE]
              Für ein TP-Gerät ist es etwas einfacher:
              Code:
              #    Zeit    Dienst    Flags     Prio    Quelladresse    Quell-Beschreibung    Zieladresse    Zielname    Rout    Typ    DPT    Info
              42974    06.07.2019 17:24:04,225    zum Bus        System    0.0.0    -    1.0.63    Rauchmelder (10mA)    5    T_Connect        
              42975    06.07.2019 17:24:04,262    zum Bus        System    0.0.0    -    1.0.63    Rauchmelder (10mA)    5    DeviceDescriptorRead (S=0)        DescriptorType=0
              42976    06.07.2019 17:24:04,305    vom Bus        System    1.0.63    Rauchmelder EG:    0.0.0    -    5    T_ACK (S=0)        
              42977    06.07.2019 17:24:04,337    vom Bus        System    1.0.63    Rauchmelder EG:    0.0.0    -    5    DeviceDescriptorResponse (S=0)        DescriptorType=0, DescriptorData=00 12
              42978    06.07.2019 17:24:04,346    zum Bus        System    0.0.0    -    1.0.63    Rauchmelder (10mA)    5    T_ACK (S=0)        
              42979    06.07.2019 17:24:04,615    zum Bus        System    0.0.0    -    1.0.63    Rauchmelder (10mA)    5    Neustarten (S=1)        
              42980    06.07.2019 17:24:04,663    zum Bus        System    0.0.0    -    1.0.63    Rauchmelder (10mA)    5    T_Disconnect
              Bekomm ich noch einen Tipp, wie ich die restlichen Telegramme erzeugen kann?

              Vielen Dank und viele Grüße,
              Waldemar
              OpenKNX www.openknx.de

              Kommentar


                bei mir sendet der BME680-Sketch mit dem aktuellen Code vom git immer noch nur Gruppentelegramme mit Wert = 0

                Das sollte doch noch passen oder?

                Code:
                            goRawTemperature.value(iaqSensor.rawTemperature);
                            goPressure.value(iaqSensor.pressure);
                            goRawHumidity.value(iaqSensor.rawHumidity);
                            goGasResistance.value(iaqSensor.gasResistance);
                            goIaqEstimate.value(iaqSensor.iaq);
                            goIaqAccurace.value(iaqSensor.iaqAccuracy);
                            goTemperature.value(iaqSensor.temperature);
                            goHumidity.value(iaqSensor.humidity);
                            goCo2Ppm.value(iaqSensor.co2Equivalent);
                Grüße

                Kommentar


                  Hi Thomas,

                  DPT 7 und 8 klappen, bei DPT 9 gibt es Probleme (hier konkret 9.001). Der Wert 1.23°C wird als 0°C ausgegeben. Ich habe das mal bis zu der Routine debugged:

                  Code:
                  void float16ToPayload(uint8_t* payload, int payload_length, int index, double value, uint16_t mask)
                  {
                      bool wasNegative = false;
                      if (value < 0)
                      {
                          wasNegative = true;
                          value *= -1;
                      }
                  
                      value *= 100.0;
                      unsigned short exponent = ceil(log2(value) - 11.0);
                      short mantissa = roundf(value / (1 << exponent));
                  
                      if (wasNegative)
                          mantissa *= -1;
                  
                      signed16ToPayload(payload, payload_length, index, mantissa, mask);
                      unsigned8ToPayload(payload, payload_length, index, exponent << 3, 0x78 & (mask >> 8));
                  }
                  Log2(123) = 6.94, wenn man davon 11.0 abzieht, ist das -4.06, ceil(-4.06) = -3, das als unsigned short ergibt 65532 = exponent. Und damit ist die Mantisse 0.

                  Ich habe auch mal 12345.67 ausgeben wollen, die kam als 12349.44 raus...

                  Hier komme ich auch nicht wirklich weiter, da ich nicht weiß, wie ich einen Float-Wert direkt ins KO schreiben soll. Ich versuch es aber weiter. Das komische ist, dass mit Deinem alten Ansatz, als Du noch DPT9 als integer transportiert hast (intern multipliziert mit 100), hat das schreiben funktioniert.

                  Gruß, Waldemar

                  OpenKNX www.openknx.de

                  Kommentar


                    Hi Thomas,

                    sorry, bin eben am Testen... DPT 16 geht auch noch nicht, allerdings weißt Du das :

                    Code:
                    int valueToBusValueString(const KNXValue& value, uint8_t* payload, int payload_length, const Dpt& datatype)
                    {
                        //TODO
                        return false;
                    }
                    Gruß, Waldemar

                    P.S.: Zum Abschluss: DPT 17 und 232 funktionieren. Das wären erstmal alle, die ich schreiben will. Morgen kommen dann die, die ich lesen will, dran .
                    Zuletzt geändert von mumpf; 07.07.2019, 00:15. Grund: P.S.: zugefügt
                    OpenKNX www.openknx.de

                    Kommentar


                      jorues Das BME-Beispiel ist derzeit scheinbar kaputt. Ich muss mir das mal anschauen.

                      @mumpf: So viel auf einmal
                      - restart: Das ist nicht soo einfach. Du musst erste eine mit TransportLayer.connectRequest eine Verbindung zum Ziel aufmachen. Die steht sobald das ApplicationLayer::connectConfirm kommt. Danach kannst du den restartRequest schicken. Bisher ist der der Stack noch nicht so ganz darauf vorbereitet. Ich muss mal schauen wie man das ansynchrone Zeug in C++ am besten macht.
                      - DPT9: kannst du mal schauen ob es klappt wenn du die 11 nur abziehst, wenn >= 11 ? Die Auflösung ist halt nur 16 Bit das sind Differenzen normal. Ggf. kannst du schauen wie ETS den Wert beim Senden kodiert. Wenn wir das Telegramm gleich füllen sind wir so gut wie es geht. Gibt es nicht auch einen 4 Byte-Gleitkommazahl DPT? Der ist ggf. besser wenn die Werte genauer sein sollen.
                      - zu den anderen DPT: Ich habe den Code auch nur geklaut und bin da so schlau wie du. Ich bin da für jeglichen Patch dankbar. Vielleicht sollte man wirklich erstmal für alle implementierten DPT und auch deren Komponenten ein enum machen.

                      Kommentar


                        Hi Thomas,

                        bitte mein Feedback nicht als negative Kritik verstehen, ich versuche nur die Sachen, die mir auffallen, gleich zu melden, bevor ich sie vergesse. Und da ich mein Logikmodul mit den DPT 1,2,5,6,7,8,9,16,17 und 232 betreiben möchte, habe ich die jetzt alle mal am laufenden Projekt durchgetestet. Ich finde es auch nicht schlimm, dass da potentiell viel zusammen kommt, denn wie Du es schreibst, Du hast das für Dich gemacht und für Deine Fälle läuft es ja.

                        Ich hab ja auch ein schlechtes Gewissen, dass ich keine Patches liefere, aber mein C/C++ ist nicht wirklich präsentationsfähig, und ich verstehe in großen Teilen nicht wirklich, was bei Dir abgeht. Dagegen sind die Sachen, die ich mache, echt Kindergarten. Aber ich könnte mal für den Anfang versuchen, den DPT 9 komplett zu debuggen, vielleicht bekomme ich das ja hin...

                        Weitere Erkenntnisse zum DPT 9: Die Werte werden korrekt empfangen, aber falsch gesendet. Hab nur mal eine Art Echo gebaut, ein KO, dass einen DPT 9 empfängt, und dann ein KO, das diesen Wert direkt wieder raus sendet. Und dann zur Kontrolle noch ein KO, dass den Wert*100 auch als Integer aussendet, so kann man sehen, was empfangen wurde (natürlich dann nur auf 2 Nachkommastellen genau). Der DPT 9 wird von -400 bis 400 recht genau gesendet, außerhalb dieses Intervalls gibt es immer größere Abweichungen, innerhalb des Intervalls stimmt alles bis auf das Intervall -10.25 bis 10.25. Alle Zahlen von -10.24 bis 10.24 werden als 0 gesendet.

                        Das mit der 4-Byte-Gleitkommazahl ist eine nette Idee, aber wenn ich an mein Logikmodul denke, dann muss ich ja einen passenden DPT anbieten, um das Ergebnis der Logik weiterverarbeiten zu können. Und viele prominente Eingänge sind DPT 9 (Temperatur, Lux, mA, ...)

                        Die anderen DPT schaue ich mal, wie ich zumindest Feedback geben kann, vielleicht auch was korrigieren.

                        Und zum reset: Ich weiß leider nicht genug über die Kommunikation, aber ich könnte schon versuchen, die Befehle nacheinander zu schicken und zwischendurch auf ein Ergebnis prüfen, es muss aus meiner Sicht nicht eine Methode sein. Ich bräuchte nur eine Idee, wie ich da überhaupt dran gehe, gerne auch erstmal low-level, ohne einen Stack-Umbau, wenn Du eine Chance siehst, dass es gehen könnte. Allerdings gebe ich zu, dass ich nicht weiß, wovon ich hier rede... Ich habe nur mein Logikmodul so asynchron wie möglich programmiert, um nichts zu blockieren...

                        Gruß, Waldemar

                        OpenKNX www.openknx.de

                        Kommentar


                          Noch ergänzend:
                          ich denke das Problem mit dem BME Sketch ist letztendlich genau das Problem mit dem
                          DPT 9.0 von Waldemar

                          Kommentar


                            @mumpf: Ich habe das nicht als Kritik aufgefasst. Alles Ok. Und ich selbst habe noch kein Geräte mit dem Stack dauerhaft in Betrieb In dem Sinn ist er aktuelle eher ein Projekt für andere.

                            Die verschiedenen DPTs sind eingentlich IMO ein guter Einstiegspunkt für Patches. Man braucht den gesamten Stack nicht verstehen und muss sich "nur" die KNX_Encode_Value und KNX_Decode_Value in dptconvert.cpp hangeln muss. Der alte Code für Dpt9 ist übirgens noch da:
                            https://github.com/thelsing/knx/blob...oint_types.cpp

                            Kommentar


                              Hallo,

                              ich habe mein Problem mit dem einfrieren/hängen bei Applikationsübertragung auf dem SAMD weiter getestet. Es scheint wohl ein Problem mit der Speicherplatzgröße zu sein.
                              Wie viele Bytes verbrauchen die Parameter? Genausoviel wie die auch groß sind?
                              Wie viel wird je Gruppenadresse benötigt?
                              Verwendet sonnst noch jemand den SAMD21 Mikrocontroller?

                              Ich habe nur mit der Anzahl/Größe der Gruppenadressen Probleme. Parameter konnte ich genug verwenden.
                              Könnte das bitte jemand prüfen/testen?

                              Ich habe im Anhang mal die 2 Test Produktdatenbanken.
                              Angehängte Dateien

                              Kommentar


                                SebastianObi Hast du mal versucht den Wert in Memory::ReadMemory zu erhöhen?

                                Kommentar

                                Lädt...
                                X