Słuchajcie, po wielu testach i analizie tego co się dzieje pod maską ESP32 udało mi się przygotować finalną poprawkę.
Oryginalny kod przy ramkach Amiplus powodował tzw. Stack Overflow (przepełnienie stosu). Moja pierwsza próba z dynamicznym wektorem naprawiła dane, ale gryzła się z procesami WiFi w esp-idf, co kończyło się restartem przez Watchdoga (system nie wyrabiał z zarządzaniem pamięcią w locie).
Przerobiłem funkcje deszyfrujące tak, aby używały statycznych wektorów z recyklingiem pamięci.
- Bezpieczeństwo: Dane nie lądują na małym stosie (koniec z wywalaniem systemu przy dużych ramkach).
- Wydajność: Pamięć jest rezerwowana raz i używana ponownie. Procesor nie traci czasu na alokację przy każdym odczycie więc WiFi i reszta systemu powinny działać płynnie.
Zapraszam do testów.
Wystarczy zmienić źródło komponentów w YAML na moje repo:
external_components:
- source:
type: git
url: https://github.com/AllonGit/esphome-components
ref: main
components: [wmbus_common, wmbus_radio, wmbus_meter]
refresh: 0s`
Zalecam też dla pewności te wpisy w sekcji esp32:
esp32:
board: Twoja_plytka
framework:
type: esp-idf
sdkconfig_options:
CONFIG_ESP_MAIN_TASK_STACK_SIZE: "16384"
CONFIG_ESP_TASK_WDT_TIMEOUT_S: "60"
