Closed arnemauer closed 1 year ago
De gateway loopt erg stabiel wanneer de uitlezen van de CC1101 niet meer in de interrupt gebeurt. Hierdoor is wel een bekende bug in de CC1101 naar boven gekomen. Zie daarvoor: https://www.ti.com/lit/er/swrz020e/swrz020e.pdf onder RXFIFO_OVERFLOW Issue.
De interrupt pin blijft in deze situatie continu hoog en de radio blijft in RX modus maar ontvangt geen pakketjes.
Inmiddels een oplossing gevonden waardoor de RXFIFO_OVERFLOW regelmatig wordt gecheckt en indien nodig de radio opnieuw in RX gezet.
Nu is er wel een nieuwe bug opgetreden bij het opslaan van het network ID in CustomTaskSettings:
0x40285458 in flash_hal_write(unsigned int, unsigned int, unsigned char const) at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/flash_hal.cpp:161
0x40283104 in spiffs_impl::SPIFFSImpl::spiffs_hal_write(unsigned int, unsigned int, unsigned char const) at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs_api.h:339
0x40289968 in spiffs_phys_wr at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_cache.cpp:206
0x40287918 in spiffs_page_delete at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_nucleus.cpp:919
0x402899c4 in spiffs_phys_wr at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_cache.cpp:225
0x40287a99 in spiffs_page_move at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_nucleus.cpp:873
0x40287ea0 in spiffs_object_update_index_hdr at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_nucleus.cpp:1046
0x40287918 in spiffs_page_delete at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_nucleus.cpp:919
0x402899c4 in spiffs_phys_wr at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_cache.cpp:225
0x40288a99 in spiffs_object_modify at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_nucleus.cpp:1666
0x40283120 in spiffs_impl::SPIFFSImpl::spiffs_hal_read(unsigned int, unsigned int, unsigned char) at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs_api.h:345
0x402856bc in spiffs_hydro_write at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_hydrogen.cpp:445
0x402899eb in spiffs_cache_page_allocate_by_fd at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/spiffs/spiffs_cache.cpp:256
0x4010128f in umm_free_core at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/umm_malloc/umm_malloc.cpp:351
0x40101558 in free at /root/.platformio/packages/framework-arduinoespressif8266/cores/esp8266/umm_malloc/umm_malloc.cpp:398
0x4029cda5 in operator delete(void) at /workdir/repo/gcc/libstdc++-v3/libsupc++/del_op.cc:48
0x40283047 in std::_Sp_counted_deleter<spiffs_impl::SPIFFSFileImpl, std::shared_ptr<spiffs_impl::SPIFFSFileImpl, (gnu_cxx::_Lock_policy)0>::_Deleter<std::allocator
Ik ben erachter waarom de ESP8266 nu constant crashed :) Ik gebruik CustomTaskSettings voor het opslaan van het networkId. Het uitlezen en schrijven van de CustomTaskSettings zorgt voor een crash en ik kan er helaas niet achter komen waarom precies gebeurt. Bij andere plugins die CustomTaskSettings gebruiken gebeurt dat namelijk niet. Ik heb de code nu zo aangepast dat het networkId wordt opgeslagen in TaskDevicePluginConfig. Dat werkt nu stabiel.
Ik zal de code opschonen en dan een nieuwe firmware maken.
Ik ben nog dagelijks aan het testen en zoeken naar de bugs. Wanneer de ventilatiemodus veranderd dan stuurt de gateway de ventilatiestand direct door naar de controller met sendData(event). https://github.com/arnemauer/Ducobox-ESPEasy-Plugin/blob/6da449b9cdb0cc5097886c00981ba2d430552e35/_P150_DucoRFGateway.ino#L325
Dit commando zorgt ervoor dat de gateway niet meer reageert en de hardware watchdog de esp reset. Aangezien de hardware watchdog reset is er geen exception met debug informatie, in tegenstelling tot de software watchdog.
Ik ben nu stuk voor de stuk de code eruit aan het halen om te kijken waar het precies mis gaat. Geen idee hoelang dit nog gaat duren maar ik ben er druk mee bezig! :)
Ik ben nog dagelijks aan het testen en zoeken naar de bugs. Wanneer de ventilatiemodus veranderd dan stuurt de gateway de ventilatiestand direct door naar de controller met sendData(event).
Dit commando zorgt ervoor dat de gateway niet meer reageert en de hardware watchdog de esp reset. Aangezien de hardware watchdog reset is er geen exception met debug informatie, in tegenstelling tot de software watchdog.
Ik ben nu stuk voor de stuk de code eruit aan het halen om te kijken waar het precies mis gaat. Geen idee hoelang dit nog gaat duren maar ik ben er druk mee bezig! :)
Klinkt top! Moet zeggen dat het tot nu toe best goed gaat met statische IP instellingen Hij blijft nu ongeveer 5 uur lang stabiel, en dat is acceptabel voor nu Goed te horen dat je er nog aan werkt, en mocht ik iets kunnen testen dan hoor ik het graag :)
Ik heb alle bugs gefixed en de gateway loopt nu weer stabiel :) Ik hoor graag of de nieuwe firmware bij jullie ook goed draait. e0e49de
Ik heb alle bugs gefixed en de gateway loopt nu weer stabiel :) Ik hoor graag of de nieuwe firmware bij jullie ook goed draait. e0e49de
Volgens mij is er nog één issue over.. Hij onthoud de Network ID niet na een reboot, volgens mij.. Misschien dat iemand anders ook een keer kan testen om te zien of het aan mijn setup ligt?
Klopt helemaal, ik had de binary er tijdelijk even afgehaald om het aan te passen. Het is inmiddels gefixt! :) https://github.com/arnemauer/Ducobox-ESPEasy-Plugin/tree/master/Binaries/Binary%20based%20on%20ESPEasy_mega-20220427
Klopt helemaal, ik had de binary er tijdelijk even afgehaald om het aan te passen. Het is inmiddels gefixt! :) https://github.com/arnemauer/Ducobox-ESPEasy-Plugin/tree/master/Binaries/Binary%20based%20on%20ESPEasy_mega-20220427
Deze onthoud de NetworkID weer, top! Wat ik wel zie is dat de fan RPM niet meer wordt uitgelezen Verder heb ik nu het meeste getest en lijkt het allemaal goed te werken, permanente modussen doen het ook goed Zaken die ik nog niet getest heb: DHCP op automatic zetten en NTP op een eigen NTP server zetten Daarnaast moet ik nog kijken hoe lang hij online blijft, maar daarvoor heb ik nog niet voldoende tijd laten draaien
Edit: Al 22 uur draaiend, zonder herstart! Edit 2: ik ga eens testen met DHCP IP
Wanneer de CC1101 een pakket ontvangt zal hij een GDO pin hoog maken. De pin is verbonden met de ESP8266 en zorgt ervoor dat er een interrupt service routine (ISR) wordt uigevoerd. Deze ISR wordt bij voorkeur zo kort mogelijk gehouden, zodat de esp8266 ook aan het hoofdprogramma toekomt en klaar is om nieuwe interrupts af te handelen.
In de ISR wordt op dit moment data uit de CC1101 uitgelezen zodat de buffer in de CC1101 weer zo snel mogelijk leeg is om een nieuwe radiopakket te ontvangen. Dit uitlezen in een interrupt zorgt soms voor een exception waarna de ESP reboot.
Een mogelijke oplossing is om in de interrupt een variabele te markeren en in de hoofdcode te kijken of de variabele is gemarkeerd. Wanneer de variabele gemarkeerd is dan wordt de CC1101 uitgelezen en de data verwerkt. De controle of de variabele gemarkeerd is zal in 'PLUGIN_FIFTY_PER_SECOND' plaatsvinden. Dit komt erop neer dat de functie iedere 20ms wordt aangeroepen. Dit is wel best effort, door achtergrondtaken kan het zijn dat het langer duurt voordat de functie wordt aangeroepen.
De 20ms zou voldoende moeten zijn om snel genoeg te reageren op de berichten van de Ducobox. Bij het testen blijkt echter dat de Ducobox en de gateway na enige tijd geen berichten meer naar elkaar sturen. Hierdoor stuurt de Ducobox niet meer de actuele ventilatiemode naar de gateway.