Ankündigung

Einklappen
Keine Ankündigung bisher.

ESP8266 KNX mit ETS

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

  • IOException
    antwortet
    Zitat von mumpf Beitrag anzeigen
    freut mich, dass es auch jemanden gibt, der den ESP32 mit KNX-TP angeht. Bleib mal ruhig dabei, ich hab hier auch noch 3xESP32 rumliegen, vielleicht kann ich Deine Erfahrung nochmal gebrauchen...
    Ja sehr gerne, das werde ich hier zu Hause sicherlich jetzt verstärkt einsetzen und nutzen...

    Zitat von mumpf Beitrag anzeigen
    Ich nutze derzeit das Sensormodul von Masifi,
    [...]
    Am Anfang hatte ich noch ein einfaches Devel-Board aus China, da steht "Wemos SAMD21 MINI" drauf
    Cool dann werde ich das auch mal testen danke nochmal!
    Patrick

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Patrick ( IOException ),

    freut mich, dass es auch jemanden gibt, der den ESP32 mit KNX-TP angeht. Bleib mal ruhig dabei, ich hab hier auch noch 3xESP32 rumliegen, vielleicht kann ich Deine Erfahrung nochmal gebrauchen...

    Aber um Deine Frage zu beantworten:
    Ich nutze derzeit das Sensormodul von Masifi, das er in dem Thread https://knx-user-forum.de/forum/proj...-sensoreinsatz vorstellt. Das ist eben fertig mit KNX Transceiver und hat auch noch ein externes EEPROM mit drauf. Außerdem passen da Standardsensoren mit I2C bus drauf, da muss ich nicht noch löten .

    Am Anfang hatte ich noch ein einfaches Devel-Board aus China, da steht "Wemos SAMD21 MINI" drauf, das geht auch, aber es gibt sehr wenig Doku zu dem Board.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    Zitat von thesing Beitrag anzeigen
    Super dass du hier so aktiv Fragen beantwortest.
    danke für die Blumen, aber wenn ich schon nichts beim Coding beitragen kann, kann ich wenigstens bei den einfachen Fragen helfen. Nachdem ich die Änderungen von Bernator gesehen habe, ist mir klar geworden, dass mein "löblicher" Ansatz für die Speicherverwaltung nicht mehr war als eine Idee, die ich nicht hätte realisieren können.

    @Bernator: Könnte man für die MemoryId nicht ne Kombi machen? 2 Byte programmierter Präfix und das 3. Byte den Index? So was wie 0xAE5Ann, wobei nn der Index ist?

    Und zum Thema Save: Ich würde davon ausgehen, dass hier jeder bereit ist, noch was an seiner Firmware zu ändern (falls man es schon genutzt hat, ich mach es z.B. im externen EEPROM), wenn man dadurch nennenswert mehr RAM zur Verfügung hat. Ich will nur sagen, ich fände es schade, falls diese Erweiterung nicht in den Stack kommt, nur weil man ein api stabil halten will. Ist nur meine Meinung, ich kann nicht behaupten, dass ich das Ganze schon durchblicke.

    Gruß, Waldemar



    Einen Kommentar schreiben:


  • Bernator
    antwortet
    Hallo Thomas,

    ich bin nicht sicher ob ich dich richtig verstehe, aber wenn Save() weiter so funktionieren soll wie bisher ist eine Flash only Variante nicht möglich da vom Interface immer Speicher im Ram alloziert werden muss welcher dann erst später über Save() in den von der Memory Klasse allozierten Speicher kopiert wird. Restore() funktioniert eigentlich wie vorher nur das eben kein Speicher alloziert wird sonder nur ein Pointer auf die bereits vorhandenen Daten übergeben wird.

    Ja das mit den Platformspezifischen Speichermodi wollte ich anfangs so machen, bin dann aber irgendwo auf auf ein Problem gestoßen (hatte auch was mit der direkten Flash Nutzung zu tun) und habs dann dem Stack bekannt gegeben. Das war aber zu einem Zeitpunkt wo ich noch nicht alles so ganz durchschaut hatte, hier könnte man tatsächlich nochmal drüber nachdenken, wär auf jeden Falls eleganter.....

    MemoryId könnte man auch den Index des SaveRestores nehmen aber 1,2,3.... als eindeutige ID ist nicht sonderlich originell und wenn die App selbst auch noch Flash Speicher anfordert bekommt man evtl.schnell Probleme?



    Einen Kommentar schreiben:


  • IOException
    antwortet
    Hi Bernator,
    Zitat von Bernator Beitrag anzeigen
    versuch die entsprechende Stelle mal so umzubauen:
    Code:
    //check if echo
    _isEcho = false;
    if(_sendBuffer != NULL)
    {
    if (!((buffer[0] ^ _sendBuffer[0]) & ~0x20) && !memcmp(buffer + _convert + 1, _sendBuffer + 1, 5)) //ignore repeated bit of control byte
    {
    _isEcho = true;
    }
    }
    Ja cool ich hatte parallel auch mit folgendem den Absturz beheben können:
    Code:
    //check if echo
    if (_sendBuffer && !((buffer[0] ^ _sendBuffer[0]) & ~0x20) && !memcmp(buffer + _convert + 1, _sendBuffer + 1, 5))
    { //ignore repeated bit of control byte
        _isEcho = true;
    }
    else
    {
        _isEcho = false;
    }
    Damit konnte ich jetzt auch die physikalische Addresse programmieren und parametrieren.

    SEHR gut! Ich freue mich dass das nun funktioniert :-D
    Einfach genial!!

    Ich kann gerne meine Änderungen teilen, damit der ESP32 auch mit dem KNX-TP funktioniert.

    Greets und vielen Dank für die Hilfe!
    Patrick

    Einen Kommentar schreiben:


  • thesing
    antwortet
    Bernator :
    Schön, dass du schon so weit bist. Ich habe mal kurz drüber geschaut. Hier ein paar Hinweise:
    - Die SaveRestores sollen weiter so funktionierien wie bisher: Beim Save speichern sie ihren Inhalt in einen von der Memory Klasse bereit gestellten Speicher und beim Restore umgekehrt. Einziger Unterschied zu vorher sollte sein, dass die Memoryklasse beim Save alloziert (und dafür vorher die nötige Größe abfrage) und dann beim Restore der Bereitgestellte Speicher ehrhalten bleibt, d.h. die Objekte brauchen den Inhalt nicht kopieren.
    - Die Verschiedenen Speichermodi sollten Platformspezifisch sein. Der normale Stack nutzt einfach die Platform um zu Lesen oder zu Speicher. Wenn es unterschiedliche Möglichkeiten für eine Platform gibt, soll das alles dort verarbeitet werden.
    - Kann man für die MemoryId der SaveRestores nicht einfach den Index des SaveRestores im _saveRestores-Array in der Memory-Klasse nehmen?

    Die geänderte Memory-Klasse und die Platform*-Klassen habe ich mir bisher noch nicht angeschaut.

    mumpf :
    Super dass du hier so aktiv Fragen beantwortest.

    VG Thomas

    Einen Kommentar schreiben:


  • Bernator
    antwortet
    versuch die entsprechende Stelle mal so umzubauen:
    Code:
                    //check if echo
                    _isEcho = false;
                    if(_sendBuffer != NULL)
                    {
                        if (!((buffer[0] ^ _sendBuffer[0]) & ~0x20) && !memcmp(buffer + _convert + 1, _sendBuffer + 1, 5))     //ignore repeated bit of control byte
                        {
                            _isEcho = true;
                        }
                    }

    Einen Kommentar schreiben:


  • IOException
    antwortet
    Hi Waldemar,
    leichte Themen sind ja auch nicht herausfordernd

    Die KNX_Test.ino ist exakt die knx-demo.ino nur dass ich unten noch den knx.ledPin(22) und den knx.buttonPin(21) einkommentiert und damit gesetzt habe.
    Dann musste ich in der esp32_platform.cpp noch im Konstruktor con Serial1 auf Serial2 (pin 16 und 17) umstellen und in der knx_facade von Bau57B0 auf Bau07B0 ändern.

    Es ist so, dass der _sendBuffer noch keine 6 Elemente beinhaltet und damit abschmiert.
    Ich suche mal ob man den code auf dem esp32 debuggen kann.

    Nachdem du den SAMD erfolgreich mit KNX-TP einsetzt, welches board empfiehlst du?

    Vielen Dank dir und schöne Grüße
    Patrick

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi Patrick,

    willkommen im Forum... Du hast Dir für den Anfang nicht unbedingt ein leichtes Thema ausgesucht .

    Du solltest am Anfang versuchen, das knx-demo example zum laufen zu bringen. Die Kombi ESP32 und bau07B0 (also ESP-Plattform mit KNX-TP) hat hier im Thread noch keiner benutzt - oder es ist mir entgangen. Da könnten noch Fehler drin sein... Aber mit einem eigenen KNX_Test.ino weiß dann auch keiner, was Du da machst.

    Die meisten hier nutzen entweder ESP mit WLAN (und damit KNX-IP) oder SAMD mit KNX-TP. Vielleicht gibt es jemanden, der ne Idee hat, was da schief sein könnte. Ich bin auch auf SAMD unterwegs und kann Dir hier konkret nicht helfen.

    Gruß, Waldemar


    Einen Kommentar schreiben:


  • IOException
    antwortet
    Hi,
    hier ein Update meinerseits:
    Ich bin schon einen Schritt weiter und konnte den ESP32 DevKit v4 verwenden.
    Dafür habe ich (neben den Änderungen vom vorigen Post) das _knxSerial auf Serial2 (pin16 und pin17) gelegt.
    Jetzt sehe ich auch, dass er beim booten die Siemens BCU initialisiert (TX=0x01 => RX=0x03).

    Jetzt gibts aber einen crash wenn über KNX Daten empfangen werden:

    Code:
    0x400d7cf9: TpUartDataLinkLayer::loop() at C:\Users\patrick\Documents\Arduino\libraries\knx\src\knx\tpuart_data_link_layer.cpp line 238
    0x400d3a50: BauSystemB::loop() at C:\Users\patrick\Documents\Arduino\libraries\knx\src\knx\bau_systemB.cpp line 21
    0x400d1b05: KnxFacade::loop() at C:\Users\patrick\Documents\Arduino\libraries\knx\src/knx_facade.h line 177
    0x400d1b15: loop() at C:\Users\patrick\Documents\Entwicklung\KNX_Test/KNX_Test.ino line 109
    Also in dieser Zeile:
    Code:
    if (!((buffer[0] ^ _sendBuffer[0]) & ~0x20) && !memcmp(buffer + _convert + 1, _sendBuffer + 1, 5))
    Möglicherweise ist im _sendBuffer noch nicht genügend?
    Ich hab das Gerät auch noch nicht parametriert.
    Wie kann ich das lösen?

    Schöne Grüße
    Patrick

    Einen Kommentar schreiben:


  • IOException
    antwortet
    Hi,
    ersteinmal: sau cooles Projekt!!
    Ich bin auch gerade dabei in DIY-KNX einzusteigen, nachdem ich schon mehrere offizielle Geräte hier am Laufen habe.
    KONNEKTING habe ich auch schon erfolgreich mit der Siemens BCU und einem Arduino NANO zum Laufen bekommen.
    Nun möchte ich aber die ETS zum Parametrieren nutzen und bin über euer Projekt hier gefallen

    Jetzt habe ich hier aber zur benötigten Hardware eine Frage:
    Welches Board kann ich benutzen, um mit dieser Lib und der Siemens BCU (also kein WLAN) ein funktionsfähiges Gerät zu erstellen?

    Getestet habe ich ganz kurz den Arduino NANO: Hier hatte ich aber das Problem, dass der Compiler hier bei verschiedenen includes (z.B. cstddef) meckert.
    Beim ESP32 DevKit v4 kompiliert alles (ich musste statt dem "bau57B0" include das "bau07B0" nehmen, doch wegen der DEBUG-Ausgabe auf dem Seriellen Interface funktioniert das nicht. Hier könnte ich ein SoftwareSerial suchen um mit der BCU zu kommunizieren und das DEBUG über das USB-Kabel an den PC.

    d.h. Welches Board unterstützt das mit der BCU (also ohne WLAN) schon?

    Schöne Grüße und vielen Dank schon mal
    Patrick

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    ich habe endlich eine erste Version von meinem commandline tool veröffentlicht. Damit dieser Thread nicht mit Rückfragen und Fehlermeldungen verwässert wird, finden ihr alle Infos hier: https://knx-user-forum.de/forum/%C3%...it-ets-projekt.

    Gruß, Waldemar

    Einen Kommentar schreiben:


  • Bernator
    antwortet
    Ich persönlich und für den SAMD werde vermutlich mit der Flash only Variante locker zurecht kommen, aber das Framework ist ja prinzipiell Platform unabhängig und da könnte es schon Fälle geben wo man evtl. lieber einen externen Speicher anflanscht. Ich bin einfach ein Freund effizienter Resourcen Nutzung, so dringend sehe ich das jetzt aber auch nicht deshalb hab ich es ja noch nicht implementiert

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    Hi,

    Zitat von Bernator Beitrag anzeigen
    Nur für den Luxus in der Entwicklungsphase (den man noch anders erreichen kann)
    wollte nur zurückmelden, dass ich jetzt auch in PlatformIO es hinbekomme, mit oder ohne EraseFlash eine neue Firmware aufzuspielen.

    Zitat von Bernator Beitrag anzeigen
    Wie schon vorher kurz erwähnt wäre hier eher Potential in die Richtung vorhanden, dass man nicht alle Daten aus dem externen Speicher im Ram puffern müsste (zb. die Parameter).
    Siehst Du denn noch Fälle, in denen der Flash eher knapp werden könnte als das RAM? Also irgendwas für die external-Variante? Ich habe mir eingebildet, dass ich bisher hier die größten Parameterblöcke habe (knapp 6k), man könnte noch viele KO benötigen, aber die tangieren eher das RAM. Der Stack braucht ja grob 80k Flash, ich hab ein paar Libs drin und komme auch knapp 100k Flash, da sind immer noch 150k frei...

    Ich denke, man könnte sich den Aufwand der Implementierung sparen, wenn es keinen Bedarf dafür gibt, oder?

    Gruß, Waldemar

    P.S.: Dein Stack lief jetzt 3 Tage ohne Unterbrechung und komplett problemlos. Heute werde ich mal ausprobieren, ob ich an irgendwelche Grenzen komme...

    Einen Kommentar schreiben:


  • mumpf
    antwortet
    HI Manuel,

    jetzt wird es schwierig...

    Tunneling im eibd habe ich auch, es darf nur kein Routing aktiv sein (zum programmieren, für den normalen Betrieb kann man Routing wieder nutzen).
    Im Augenblick würde ich darauf tippen, dass Dein ESP nicht korrekt über WLAN verbunden ist. Wie gesagt, ich habe keine Erfahrung mit dem ESP, ich wollte unbedingt was mit KNX-TP haben, um eben solche Probleme zu vermeiden. Die einzige KNX-IP Erfahrung für diesen Stack habe ich dadurch, dass ich meine Sachen auch unter Linux laufen lassen kann (hauptsächlich zum debuggen).

    Gruß, Waldemar

    Einen Kommentar schreiben:

Lädt...
X