Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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


    Hallo Waldemar,

    ja, ich war kurz geschockt . Habe es aber nach der KNX Support Anleitung hier schon repariert. Nach dem umbennen des Odners ProductStore startete die ETS wieder.
    Danke für deine Anleitung! Was müsste den richtiger weise hochgezählt werden? Applicationsnummer oder die Applikationsversion oder beides?

    Danke und Gruß, Kay

    Kommentar


      Zitat von jaykay Beitrag anzeigen
      Was müsste den richtiger weise hochgezählt werden? Applicationsnummer oder die Applikationsversion

      Kommentar


        Vielen Dank.
        Habe noch ein anderes "Problem" ich versuche (12) WS2812 LEDs per NeoPixelBus anzusprechen.
        Die LED Lib brauchen spezielle GPIOs: Link
        HTML-Code:
        ⚠️ IMPORTANT ⚠️
        The esp8266 requires hardware support to be able to reliably send the data stream. Due to this and the restrictions on which pins are used by each hardware peripheral, only io pins GPIO1, GPIO2, and GPIO3 can be used. The Pin argument is ignored and can be omitted.
        The DMA methods will use GPIO3.
        The UART1 methods will use GPIO2.
        The UART0 methods will use GPIO1.
        Ohne die KNX Lib alles kein Problem. DMA und UART1 fuktionieren.
        - Wenn ich die DMA Variante GPIO 3 (Serial RX auf dem Wemos D1 mini) funktioniert mein Sketch aber ich kann nicht mehr per ETS programmieren.
        - Per Uart1 kann ich per ETS programmieren, aber die LEDs funktionieren nicht.
        Wie komme ich hier weiter? Da ich keine Fehlermeldung/Exception bekomme weiß ich nicht was sich da beißt
        Habe schon versucht auf einen ESP32 zuwechseln, da scheitere ich schon an der knx-demo...

        Gruß, Kay

        Kommentar


          Die Hardwarezugriffe sind eigentlich alle hier: https://github.com/thelsing/knx/blob...o_platform.cpp bzw. in der Hardwarespezifischen Platform. Du kannst da die SerialDebug oder SerialKnx Zugriffe auskommentieren, wenn du den Uart schon anderweitig nutzt.

          Kommentar


            Danke für die Info. Das Probiere ich mal aus. Mittlerweile läut alles auf dem ESP32 .
            Ich habe hier irgendwo auf den 50 Seitten was von einem Wiki gelesen, konnte es aber nicht finden. Ist das umgezogen oder abgeschaltet?

            Kommentar


              Nein. Es hat nur noch niemand etwas hinzugefügt. https://github.com/thelsing/knx/wiki

              Kommentar


                Hallo Thomas,

                wie Du schon in meinem Thread gelesen hast, will/muss ich mir ein KO-Schema für meine Applikation überlegen, damit ich in Zukunft möglichst keine KO-Verschiebungen mehr brauche. Dazu muss ich aber Lücken in den KO-Nummern lassen für zukünftige Erweiterungen. Nach meinen ersten Hochrechnungen komme ich auf 436 KO, mit Erweiterungen sagen wir mal auf 500 KO. Da ich dabei signifikant RAM verbrauche, muss ich abschätzen, ob das mit 500 KO klappen kann.
                Im Folgenden wollte ich nur mal Nachfragen, ob ich irgenwas übersehen habe:
                1. Ich hatte schon mal nachgefragt und inzwischen auch im Coding gesehen, dass auch für nicht vorhandene KO (also Lücken) ein KO mit _datalen = 1 angelegt wird. Mit meinen "verkleinerten" KO wären das 8 Byte für das KO + _data (1 Byte) also 9 Byte. Bei 500 KO macht das 4500 Byte Minimum. Hab ich das richtig gesehen, dass für ein Leeres KO nur ein Byte genutzt wird? https://github.com/thelsing/knx/blob...bject.cpp#L103
                2. Mir ist in dem Zusammenhang die Bedeutung von KNXValue nicht ganz klar (da zeigt sich wieder, dass ich C++ nicht wirklich kann): Das Ding besteht aus einem   union , in dem auch die   struct tm  drin ist. So wie ich das verstehe, wird dadurch KNXValue auf 44 Byte "aufgeblasen". Wenn ich das richtig verstehe, dann wird ein KNXValue nur für den Zugriff auf den KO-Wert erzeugt, oder? Und nicht mit jedem (auch unnötigen) KO? Sonst müsste ich ja mit 500 * (16 Byte KO + 44 Byte Value) = 500 * 60 = 30 kByte -> das wäre bei 32k Speicher etwas viel . Wie gesagt, hier bin ich mir nur nicht sicher, ob ich das KNXValue-Handling richtig interpretiere.
                3. Die KO-Tabelle (group_object_table_object) besteht doch im Großen und Ganzen aus Zeigern auf die KO, also bei 500 KO rund 2 kByte, oder?
                Es wäre nett, wenn Du sagen könntest, ob meine Annahmen richtig sind oder ob ich irgendwo komplett falsch liege. Ich will vermeiden, eine Infrastruktur für 500 KO zu legen, nur um dann bei den Tests rauszufinden, dass es nicht geht und dann beim Nachfragen hier im Forum zu hören, dass es schon vorher klar war, dass es nicht klappen kann.

                Gruß, Waldemar

                Kommentar


                  Hallo Waldemar,

                  so langsam merkst du warum bei vielen kommerziellen Geräten bei 255 KOs Schluß ist . (Hängt auch von der Maskenversion ab.)

                  zu 1) und 3)
                  Ich weiß nicht genau was ETS and Daten schickt, wenn ein GroupObject nicht benutzt wird. Wenn man an den Daten erkennen kann, as man es nicht braucht, könnte man auch einfach kein GroupObject anlegen.
                  Schau dazu mal in GroupObjectTable:initGroupObjects (oder so.) Dazu müsste man GroupObjectTable::_groupObjects zum Typ GroupObject*[] machen, und in der Schleife danach nur dann das GroupObject im Array ablegen, wenn man es braucht. Falls man das am GroupObject nicht erkenn, und die AssociationTable davor programmiert wird, könnte man auch dort schauen, ob das GroupObject benötigt wird.

                  Du musst dann natürlich schauen GroupObject::get dann auch auf GroupObject* umgestellt werden muss, und die Nutzer der Methode gegen nullptr prüfen müssen.

                  zu 2)
                  Das KnxValue braucht dich nicht interessieren, das es nicht gespeichert/gelesen wird. Beim Aufruf der Methode wird es ggf. (auf dem Stack) erzeugt, und danach wieder frei gegeben. Die eigentlichen Daten liegen in GroupObject::_data. Zur Union: Die ist so groß wie die größte Komponente, das sollte in dem Fall struct tm sein.

                  Nicht vergessen, mal einen Pull-Request für deine Änderungen zu machen.

                  VG
                  Thomas
                  Zuletzt geändert von thesing; 06.05.2020, 20:19.

                  Kommentar


                    HI Thomas,

                    danke für die ausführliche Antwort.
                    Zitat von thesing Beitrag anzeigen
                    so langsam merkst du warum bei vielen kommerziellen Geräten bei 255 KOs Schluß ist
                    Deswegen verwende ich ja Deinen Stack - weil er mir wesentlich mehr Möglichkeiten bietet .

                    Zitat von thesing Beitrag anzeigen
                    Dazu müsste man GroupObjectTable::_groupObjects zum Typ GroupObject*[] machen,
                    Das traue ich mir nicht wirklich zu, würde da erst dran gehen, wenn ich wirklich in Speicherprobleme laufe.

                    Zitat von thesing Beitrag anzeigen
                    Du musst dann natürlich schauen GroupObject::get dann auch auf GroupObject* umgestellt werden muss, und die Nutzer der Methode gegen nullptr prüfen müssen.
                    Ich würde allerdings dann vom GroupObject::get ein statisches "leeres" KO liefern lassen, anstatt alle Nutzer der Methode umzustellen (was ja auch mein Coding und alle anderen User massiv betreffen würde...)

                    Zitat von thesing Beitrag anzeigen
                    Das KnxValue braucht dich nicht interessieren,
                    Dann hab ich das richtig verstanden... vielleicht kann ich doch langsam C++ lesen UND verstehen .

                    Zitat von thesing Beitrag anzeigen
                    Nicht vergessen, mal einen Pull-Request für deine Änderungen zu machen.
                    Ja, das steht noch aus - auf für die aktuellen Änderungen (kleineres KO). Ich muss nur meine Baustellen mal auf die Reihe bekommen, bevor ich neue aufmache...

                    Gruß, Waldemar

                    Kommentar


                      Hi,

                      erstmal vielen Dank an Thomas für dieses Projekt, finde das super was hier so entwickelt wird!

                      Nanosonde und hotze oder gerne auch jeder andere: Hat schon jemand aktiv ein KNX-RF-Gerät mit dem Stack in Betrieb? Funktioniert das ohne Probleme mit dem aktuellen Code aus dem Git? Welche HW habt ihr dazu verwendet?

                      Im Git finde ich kein Beispiel der die RF-Implementierung nutzt und die Textdatei im docu-Ordner ist da auch etwas knapp gehalten An sich will ich auch sowieso letztlich ein KNX-TP-Gerät bauen, aber da wir aktuell nur einen Testaufbau im Arbeitszimmer haben (richtige Installation erst in gut zwei Jahren in der neuen Wohnung) wäre es natürlich super praktisch, wenn ich erstmal einfach den Aufbau mit RF machen könnte und wenn dann alles wie gewünscht läuft die RF-HW durch eine BCU ersetzen. In der Software sollte dazu ja eigentlich lediglich von RF auf TP umgestellt werden müssen?

                      Grüße,
                      ​​​​​​​Chris
                      Chris

                      Kommentar


                        Das Medium kann man einfach über ein #define in der config.h wechseln. Allerdings gibt es aktuell einen Fehler bei samd im master-branch. Siehe https://github.com/thelsing/knx/issues/58.
                        Die Hardware sollte recht einfach wie in der Dokumentation beschrieben verbunden werden. Als Beispiel kannst du normal das knx-demo Projekt nehmen. Es kommt nur darauf an welche knxprod-Datei in ETS importiert wird, und welches Medium gesetzt wurde. Dem "Anwendungscode" ist es total egal welches Medium genutzt wird.

                        Kommentar


                          Danke Thomas. Werd das dann einfach mal probieren, wenn ich die Bestellliste zusammen habe
                          Chris

                          Kommentar


                            Ich habe übrigens gerade einen Pull-Request von Nanosonde gemergt. Durch diesen kann der Stack knx data secure. Ausprobiert habe ich selbe leider noch nicht. Aber schon mal vielen Dank an Nanosonde .

                            VG
                            Thomas

                            Kommentar


                              Hm, also irgendwas mach ich falsch ... Dieses Arduino-Zeug ist für mich aber auch komisch, bin klassische Entwicklung mit make + gcc etc gewohnt

                              Also ich habe bisher folgendes gemacht:
                              • Vom Hauptrepo ( https://github.com/thelsing/knx ) den Master-Branch geklont
                              • Dazu dein FlashStorage-Repo ( https://github.com/thelsing/FlashStorage ), da ich ja einen SAMD21 nutze
                              • Dann mal in der Arduino-IDE die examples/knx-demo/knx-demo.ino geöffnet, unter Sketch -> Include Library -> Add .ZIP Library den src-Ordner vom Hauptrepo hinzugefügt damit das gefunden wird (gibt sicher noch einen besseren Weg, konnte aber in der Arduino-IDE nichts finden, um den Include-Path anzupassen)
                              • Unter Tools -> Board das "SparkFun SAMD21 Mini Breakout" gewählt
                              • Klick auf Verify bringt eine Menge Fehler, los gehts schon mit:
                                Code:
                                sketch\knx-demo.ino.cpp.o: In function `resetCallback(GroupObject&)':
                                	C:\Users\ci\Documents\Arduino\Sketches\knx-demo/knx-demo.ino:48: undefined reference to `GroupObject::value()'
                                	C:\Users\ci\Documents\Arduino\Sketches\knx-demo/knx-demo.ino:48: undefined reference to `KNXValue::operator bool() const'

                              Und halt noch ne Menge mehr in der Richtung. Die Header findet er aber scheinbar, sonst wird ja gemeckert, dass die eben nicht gefunden werden (hatte ich bevor ich die Library in der IDE hinzugefügt hatte).

                              Muss ich sonst noch etwas ändern/machen, damit das richtig baut?

                              Grüße,
                              Chris
                              Chris

                              Kommentar


                                Ok, heute nochmal mit frischem Hirn draufgeschaut. Es ist natürlich der Linker der meckert, die Header-Files während des Kompilierens werden ja alle gefunden.

                                Nochmal etwas recherchiert um festzustellen, dass man einfach das ganze KNX-Repo als Library in der Arduino IDE hinzufügen muss, nicht nur den src-Unterordner. Dann klappt das auch

                                Mal schaun wann ich dann den ersten KNX-Test laufen hab
                                Chris

                                Kommentar

                                Lädt...
                                X