Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

    Zitat von mumpf Beitrag anzeigen
    könntest Du?
    Ja^^

    Ich hab heute einfach mal mit bisschen rumgespielt.
    Mein AddIn kann bisher nur die Seriennummer auslesen und wenn das Gerät nicht antwortet stürzt die ETS ab xD (hab den Fehler gefunden)

    Generell ist es nur eine Klassenbibliothek in C# mit dem .net Framework 4
    Darin sind dann Benutzer Steuerelemente (WPF).


    Gruß Mike

    P.s.: Und ja man hat zugriff auf das ETS Projekt und auch auf das selektierte Gerät.
    Angehängte Dateien
    Zuletzt geändert von thewhobox; 12.04.2021, 15:13.
    OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

    Kommentar


      Warum so kompliziert? Man muss doch nur die neue Firmware in die knxprod packen und dort die LoadProcedure entsprechend anpassen. So machen es die Hersteller doch auch. Ein ETS-Plugin würde ich nicht mehr machen. Wer weiß ob das in der nächsten ETS-Version noch geht. Und von der ETS-Inside ganz zu schweigen.

      Kommentar


        Dann wird die Firmware aber jedes mal beim parametrieren rüber geladen oder?
        Je nach Firmware könnte das schon deutlich länger dauern.

        Statt nem Plugin könnte man auch ne eigenständige Anwendung machen, die einfach nur die Firmware-Updates rüber schiebt.
        OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

        Kommentar


          Also ich würde die Firmware mit in die knxprod packen dann ist sie da wo sie hin gehört.

          Kommentar


            Zitat von proggerKA Beitrag anzeigen
            Dann wird die Firmware aber jedes mal beim parametrieren rüber geladen oder?
            Natürlich nicht. In der Loadprocedure wird die Firmwareversion des Gerätes geprüft und nur bei bedarf die Firmware aktualisiert.

            Es gab einen Thread hier über "Erstes Programmieren über ETS dauert lange" hier im Forum. Ich weiß nur nicht mehr welches Gerät das war.

            Edit: Der hier glaub ich: https://knx-user-forum.de/forum/%C3%...ige-ladezeiten
            Zuletzt geändert von thesing; 12.04.2021, 19:29.

            Kommentar


              Interessanter Thread.
              Ich hab mir mal die Applikation von dem Zennio angeschaut und da ist die Firmware auch drin.
              Code:
              <RelativeSegment Id="M-0071_A-51A1-26-E6AC_RS-04-00000" Name="Parameters+APP" Size="565536" LoadStateMachine="4" Offset="0">
              <Data>VQYHAM0HBwCRCg...</Data>
              <Mask>...</Mask>
              </RelativeSegment>
              Wie genau die LoadProzedure das nochmalige übertragen der APP verstehe ich noch nicht ganz.
              Werde mir das morgen mal weiter anshauen.
              Aber schon mal danke für den Denkanstoß.


              Gruß Mike
              OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

              Kommentar


                Zitat von mumpf Beitrag anzeigen
                Wie machst Du Dein OTA?
                Hallo Waldemar,

                ich wollte es eigentlich noch direkt vom Bus versorgt testen, hänge hier aber noch. Daher erst mal die Antwort zum OTA Update:

                Ich verwende einen Arduino Nano 33 IoT (SAMD21 + NINA W102 per SPI angebunden): Greenshot 2021-04-14 21.18.39.png


                Die Möglichkeit die Du nennst (also unter Nutzung des internen Flash Speichers) funktioniert natürlich, allerdings hat man dann wie auch von Dir erwähnt etwas weniger als die Hälfte des Flashs zum Zwischenspeichern des Binaries zur Verfügung. Das klappt zum Beispiel mit der ArduinoOTA Bibliothek gut: https://github.com/jandrassy/ArduinoOTA

                Für den SAMD gibt es aber noch bessere Wege für ein OTA Update (Quellen und Beispiele sind im Core für den SAMD enthalten, siehe: https://github.com/arduino/ArduinoCo...ster/libraries). Für den Nano 33 IoT kommen folgende Möglichkeiten in Frage
                • SDU: Update von einer SD-Karte (die ist nicht auf dem Board drauf sondern müsste extern angeschlossen werden)
                • SFU: Update über einen externen Flash (z.B. auf dem MKR MEM Shield, also auch noch eine weitere Komponenten nötig)
                • SNU: Update über den Flash-Speicher des NINA W102 (der ist ja eh verbaut -> keine weiteren Komponenten nötig)
                Ich plane die Nutzung der SNU Bibliothek (habe das aber wie gesagt noch nicht direkt mit dem knx-Stack getestet). Ein Beispiel für die Nutzung findest Du hier: https://github.com/arduino/ArduinoCo...sage/Usage.ino

                Erwähnenswerte Features:
                • Den Update-Vorgang kann man direkt vom SAMD21 aus (also z.B. über einen externen Taster) oder aber auch (zumindest theoretisch, getestet habe ich es noch nicht) über KNX starten -> es wird für das Update keine IDE oder ein Rechner, sondern nur die einmalig exportierte Binärdatei benötigt
                • Das WiFi Modul muss nur für das Update eingeschaltet werden und kann danach wieder deaktiviert werden -> spart Strom (die genaue Stromaufnahme muss ich nochmal messen, während des Updates sind es für das ganze Board etwa 100 mA bei 5 V... das könnte knapp werden rein über KNX)
                • Die Binärdatei lädt der SAMD21 über das WiFi Modul in dessen Speicher von einer beliebigen URL via HTTP (das funktioniert mit jedem Server, NAS, Raspberry Pi, o.ä.):
                  Code:
                  WiFiStorage.download("http://192.168.0.123/OTA/Blink.bin", "UPDATE.BIN");
                • Der Update-Vorgang vom WiFi Modul in den SAMD21 wird mit folgender Zeile gestartet:
                  Code:
                  WiFiStorageFile update = WiFiStorage.open("/fs/UPDATE.BIN");
                • Danach ist nur noch ein Reboot nötig, das wars. Das Ganze benötigt zusätzlich etwa 20 kB Flash und 300 Byte RAM
                Falls das mit der Versorgung über den Bus doch irgendwie klappen sollte, könntest Du so ein ESP32 Modul evtl. mit der WiFiNINA Firmware flashen und per SPI an Deine KNX-Hardware dranhängen.


                Viele Grüße,
                Michael
                Zuletzt geändert von keil; 15.04.2021, 07:15.

                Kommentar


                  Hallo,

                  ich würde den Stack bzw. die Firmware für das Raumsensormodul mumpf nutzen mit einer microBCU2 und einem Seeeduino XIAO (mit SAMD21) nutzen.
                  Der SAMD wird aus der BCU2 versorgen, RX und TX sind mit Pin 6 und 7 (Serial1) verbunden. Die Debug-ausgabe auf Serial 1 lautet "ERROR, TPUART not responding"

                  Sowohl der SAMD21 als auch die µBCU2 sind funktionsfähig. Ein einem einfach Sketch mit dem knxtpuart funktioniert die Kommunikation

                  Kennt jemand den Fehler bzw lässt sich der Fehler einkreisen?
                  Bin für jeden Hinweis dankbar.

                  Beste Grüße

                  Kommentar


                    Hallo Waldemar (und alle Interessenten),

                    Zitat von mumpf Beitrag anzeigen
                    Aber interessieren würde es mich schon, wie Du das machst. BT low power kann ich mir noch vom Bus vorstellen, aber WLAN nicht mehr...
                    ich kann es mir nach wie vor über WLAN vorstellen, allerdings werde ich das erst mal nicht weiter verfolgen.

                    Ich will hier nicht zu offtopic werden, aber eventuell interessieren die Messungen ja doch den einen oder anderen.
                    Wie die Softwareseite aussieht habe ich ja zwei Posts drüber beschrieben (https://knx-user-forum.de/forum/öffentlicher-bereich/knx-eib-forum/diy-do-it-yourself/1216828-esp8266-knx-mit-ets?p=1643328#post1643328)

                    Hardwaremäßig hatte das
                    • sowohl über USB vom Laptop aus,
                    • als auch vom Netzteil über 5 V in den Step Down Wandler auf dem Nano 33 IoT,
                    • oder aber direkt vom Netzteil in das 3.3 V Potential eingespeist
                    eigentlich ziemlich gut funktioniert (halbwegs vernünftiger WLAN-Empfang vorausgesetzt).

                    An der MicroBCU 2 (NCN5120) ging dann aber leider nichts mehr. Die Stromaufnahme ist zwar nur kurzzeitig zu hoch, aber das reicht leider aus um die Spannung soweit einbrechen zu lassen, dass es den Controller resettet.


                    Hier ein paar Scope-Aufnahmen mit folgenden Hinweisen:
                    • Zeitbasis: 2 s / Div
                    • gelb = Spannung (meist 2 V / Div, Ausnahme bei 20 V Versorgung, dann 5 V / Div)
                    • blau = Strom (immer 50 mA / Div, 1 mV -> 1 mA)
                    • die einzelnen Funktionen wurden künstlich verlängert, um das im Oszi besser zu sehen
                    • die Dauer für das Herunterladen der Firmware und das Kopieren vom WiFi Chip war immer irgendwo zwischen 0.5 s und 2 s
                    • die Firmware war im Prinzip ein "Blink" Beispiel mit der SNU-Update Funktionalität sowie vielen Debug-Ausgaben, insgesamt 36 kB

                    Hier mal exemplarisch mit einem Netzteil welches direkt in das 3.3 V Potential des Nano 33 IoT einspeist:

                    tekway29_6_commented.gif

                    Der Ablauf ist:
                    1. Anlagen der Spannung (hier 3.3 V) und der SAMD Chip ist in der "setup()"-Funktion, der WiFi Chip wird auch gestartet, nach kurzer Zeit aber wieder in den Reset-Zustand versetzt (Stromaufnahme = 0 mA)
                    2. Der SAMD geht in die "loop()" Funktion über (LED blinkt mit 0.25 Hz -> 2 s an, 2 s aus)
                    3. Das Firmwareupdate wird gestartet (dazu wird der Reset des WiFi Chip aufgehoben und ein Verbindungsversuch zum WLAN unternommen (per DHCP minimal 1.2 Sekunden, mit fester IP geht das schneller), die Stromaufnahme liegt (die Peak ausgenommen) Anfangs bei ca. 135 mA, danach bei ca. 120 mA
                    4. Die Firmware wird per http von einem Raspberry Pi in den Speicher des WiFi Chip heruntergeladen, die Stromaufnahme liegt (ebenfalls Peak ausgenommen) bei ca. 145 mA, geht dann auf ca. 120 mA zurück
                    5. Die WLAN Verbindung wird getrennt -> knapp über 50 mA
                    6. Die "WiFi.end()" Methode wird aufgerufen und das Kopieren der Firmware vom WiFi Chip in den SAMD gestartet
                    7. Das WiFi Modul wird über ein Low am Reset-Eingang in den Reset-Zustand versetzt (-> keine Stromaufnahme mehr)
                    8. Ein automatischer Reset des SAMD führt dazu, dass auch der WiFi Chip resettet wird
                    9. Der WiFi Chip wird wieder in den Reset-Zustand gebracht und die LED blinkt durch die neue Firmware mit 0.5 Hz -> 1 s an, 1 s aus)

                    Hier das ganze nochmal mit 5 V aus dem Netzteil (links) und 21 V (rechts, dazu hätte ich VFILT oder den V20V Ausgang des NCN2150 genommen, aber die Stromaufnahme geht leider nicht weit genug runter):

                    tekway29_7.gif tekway29_8.gif

                    Hier mit aktiviertem "LowPowerMode" des WiFi Chips (die Stromaufnahme während dem Aufbau der Verbindung sowie dem Download des Firmware bleibt gleich, zwischendrin geht sie aber deutlich runter).

                    tekway29_9.gif tekway29_10.gif

                    Und hier das eigentliche Problem: links (wie bei allen bisherigen Aufnahmen auch) aus dem Netzteil versorgt, rechts aus dem 5 V Ausgang des NCN5120:

                    tekway29_13.gif tekway29_15.gif

                    Den Stromanstieg beim Verbindungsversuch mit dem WLAN von ca. 70 mA auf knapp 170 mA macht der DCDC-Wandler des NCN5120 sehr kurz mit, dann aber ist die Spannung soweit eingebrochen, dass es zum Reset kommt.

                    Die Zeit, welche hier die Stromaufnahme zwischen den sicher geltenden 100 mA des NCN5120 und dem Maximalstrom von knapp 170 mA bei 5 V Versorgungsspannung liegt ist nicht sehr lang (der Peak ganz am Anfang auf 170 mA sind weniger als 40 ms), aber es reicht halt ohne zusätzliche Komponenten nicht aus.


                    Wenn man das weiter verfolgen wollte, würde ich mit einem großen Elko und/oder Goldcap (alternativ ganz kleiner Akku) versuchen, für die Zeitdauer des WLAN-Verbindungsversuchs und des Downloads die benötigte Energie bereitzustellen.

                    Allerdings wären das dann immer "gesondert zu behandelnde" Geräte mit extra Hardware, und eigentlich will man sowas nicht unbedingt haben, sondern am besten sollten alle Geräte eine Firmwarupdatemöglichkeit von Haus aus bieten.


                    Viele Grüße,
                    Michael
                    Zuletzt geändert von keil; 25.04.2021, 10:25.

                    Kommentar


                      Hi Michael,

                      danke für den ausführlichen Bericht. Stellt sich (leider) so dar, wie ich es befürchtet habe - als zu energiehungrig. Ich bin eben mit Hardware nicht so erfahren, dass ich das bewerten kann, aber die Hardware soll ja auch nicht beliebig teuer werden.

                      Viel Erfolg noch,
                      Waldemar
                      OpenKNX www.openknx.de

                      Kommentar


                        Ich hab noch eine Frage an die Leute, die sich im Stack auskennen: Kann ich irgendwie die Antwort auf einen ReadRequest eine Zeit lang verhindern?

                        Folgende Situation: Beim Startup meines Sensormoduls ist der KNX-Stack immer das Erste, was "Up" ist, und ich möchte auch, dass beim Startup Sensorwerte initial gesendet werden, sobald sie bekannt sind. Ich möchte natürlich auch, dass Sensorwerte beliebig gelesen werden können, deswegen haben die entsprechenden KO auch immer das L-Flag gesetzt.

                        Jetzt sind bestimmte Teile der Applikation erst nach ca. 2 Sekunden "da" (bei 1-Wire dauert es so lange, bis ich die ersten Sensorwerte habe). Wenn diese Sensorwerte beim Startup per ReadRequest angefragt werden, liefern sie 0, da das KO intern noch gar nicht beschrieben wurde, der KNX-Stack aber den ReadRequest beantwortet.

                        Abstrakt formuliert: Ich möchte, dass das L-Flag an einem KO erst funktioniert, nachdem sicher ist, dass das KO auch korrekt antworten kann, also mit einem nicht-initialen Wert.

                        Beispiel:
                        • Modul startet, KO1 liefert normalerweise Tempeartur, Temperatursensor braucht 2 Sekunden für Startup
                        • nach 1 Sekunde macht die Visu (warum auch immer) einen ReadRequest auf KO1
                        • Modul sendet ein 0°C als Response
                        • nach 2 Sekunden liefert der Temperatursensor einen Wert, KO1 sendet 22.5°C auf den Bus
                        Ich habe dann 1 Sekunde lang einen falschen Wert auf dem Bus, das möchte ich verhindern. Hört sich kurz an, aber in Logs/Diagrammen sieht so was immer "falsch" aus. Und ich möchte eigentlich das Lesen von nicht definierten Werten verhindern.

                        Gruß, Waldemar
                        OpenKNX www.openknx.de

                        Kommentar


                          Hallo Waldemar.

                          Hab mir den Stack nicht angeschaut, aber eine Idee wäre es das Gerät in eine Art Busy-Mode zu stecken.
                          Der NCN sendet dann für alle Ankommenden Requests ein NACK Busy zurück.
                          Sie Datenblatt (Anhang) auf Seite 31.

                          Wenn du dann alle Werte hast, setzt den Busy Mode wieder auf False und Anfragen werden normal beantwortet.

                          Inwieweit das der Stack implementiert hat weiß ich aber wie gesagt nicht.


                          Gruß Mike
                          Angehängte Dateien
                          Zuletzt geändert von thewhobox; 25.04.2021, 15:16.
                          OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                          Kommentar


                            Hi Mike,

                            Zitat von proggerKA Beitrag anzeigen
                            Der NCN sendet dann für alle Ankommenden Requests ein NACK Busy zurück.
                            kenne ich. Ich könnte den auch einschalten... Das Problem hier wäre, dass das nur im Auto-ACK Modus funktioniert und damit für ALLE Telegramme ein Busy senden würde. Ich würde also für diese Zeit den Bus lahmlegen. Und wenn es in der Zeit einen Hänger geben sollte, dann würde der Modus ja nicht aufgehoben werden. Und ich will ja durchaus, dass das Modul seine Werte senden kann, ich will nur nicht, dass es zu früh antwortet.

                            Aber ich stöber mal im Stack. Vielleicht kann ich ja wirklich noch ne Methode ergänzen, die zur Laufzeit mal das L-Flag am KO deaktiviert udn ich aktiviere es wieder, sobald das erste Mal ein Wert reingeschrieben wurde. Oder ich baue in meinen Fork standardmäßig ein, dass ein von der ETS vergebenes L-Flag nur dann beachtet wird, wenn das KO gültige Werte hat. Muss mal ein bisschen debuggen...

                            Gruß, Waldemar

                            OpenKNX www.openknx.de

                            Kommentar


                              Zitat von mumpf Beitrag anzeigen
                              Aber ich stöber mal im Stack.
                              So, ich habe einen Weg gefunden, der ein KO auch nicht größer macht - bin mir nur nicht sicher, wie "Sauber" das ist. Ich habe beim GroupObject ein neues commFlag New eingeführt, das jetzt beim GroupObject::readEnable() abgefragt wird. Solange das commFlag auf New steht, ist readEnable() immer false. Bei GroupObject::valueNoSend() wird dann das commFlag auf Ok gesetzt. Wenn man bei der Initialisierung dafür sorgt, dass alle KO ihren Startwert mit value() oder valueNoSend() gesetzt bekommen, funktioniert das zuverlässig, soweit ich das sehen konnte. Aber ich habe natürlich schon ein paar Stellen gefunden, die ich nicht richtig initialisiere . Aber das ist ja ein lösbares Problem.

                              Die allgemeine Frage ist eher: Sollte ein GroupValueResponse auf ein GroupValueRead überhaupt gesendet werden, wenn noch kein Wert vorliegt, somit der gesendete Wert ganz sicher inkorrekt ist?

                              Gruß, Waldemar
                              OpenKNX www.openknx.de

                              Kommentar


                                Zitat von mumpf Beitrag anzeigen
                                Sollte ein GroupValueResponse auf ein GroupValueRead überhaupt gesendet werden, wenn noch kein Wert vorliegt, somit der gesendete Wert ganz sicher inkorrekt ist?
                                Also ich wäre immer noch für die Rückmeldung Busy.
                                Wenn du ne normale GroupValueResponse schickst wird der Wert ja wieder geloggt, der nicht korrekt ist.
                                Wenn du nicht antwortest, wird das Telegramm nur unnötig wiederholt.
                                Wenn du ein Nack schickst wird es glaub auch erneut probiert.

                                Eine andere Art zu antworten fällt mir gerade nicht ein.
                                Aber mit iwas solltest auf jeden Fall antworten^^

                                Ich beschäftige mich gerade mit einem anderen Thema bei dem ich nicht weiter komme, bzw vll nen Denkfehler habe.
                                Ich bin grad dran den Extended Frame einzubauen...
                                Sind ja theoretisch maximal 252 Bytes circa für das Telegramm (eig 254 Bytes, aber 2 Bytes gehen für APCI und TPCI drauf).
                                Wenn ich jetzt einen MemoryWrite machen möchte verwende ich ja folgendes:
                                Screenshot 2021-04-25 200804.png
                                Hier kann ich ja bei "number" (was die Länge angibt) maximal 63 eintragen.
                                Hat ein MemoryWrite ein Limit von 63 Bytes?
                                Oder übersehe ich da was?


                                Gruß Mike
                                OpenKNX www.openknx.de | Kaenx-Creator | Dali-GW

                                Kommentar

                                Lädt...
                                X