ESPHome 2026.10.1 ukazało się 27 października o 19:33 czasu polskiego, sześć dni po wersji 2026.10.0. To wydanie poprawkowe z 14 zmianami. Większość jest drobna, ale trzy mogą komuś mocno dokuczyć: oprogramowanie, które po przyrostowej kompilacji pada przy starcie, wentylator, którego stan nie dociera do pośrednika MQTT, i aktualizacja koprocesora, która nigdy się nie kończy.
Nagłówek prekompilowany wyłączony przy ccache starszym niż 4.7
Od wersji 2026.10 ESPHome korzysta z prekompilowanego nagłówka, żeby przyspieszyć kompilację. J. Nick Koston odkrył, że przy ccache starszym niż 4.7 kompilacja przyrostowa potrafi dołączyć pliki obiektowe zbudowane ze starszą wersją tego nagłówka, a gotowe oprogramowanie wywraca się przy starcie urządzenia. Zbudował kilka wersji ccache i na każdej powtórzył ten sam scenariusz na ESP-IDF: kompilacja konfiguracji, dodanie czujnika, druga kompilacja, dodanie kolejnych elementów i trzecia kompilacja. Przy ccache 4.5.1 i 4.6.3 aż 28 z 34 plików obiektowych w ostatniej kompilacji było nieaktualnych. Przy każdym wydaniu 4.7 nie było ani jednego.
Od wersji 2026.10.1 ESPHome wyłącza prekompilowany nagłówek, gdy wykryje ccache starszy niż 4.7, i zapisuje w dzienniku jedną linię z wyjaśnieniem. Kompilacja działa wtedy tak jak w 2026.9. Jeśli mimo to chcesz z niego korzystać, nadal możesz go wymusić zmienną ESPHOME_PCH_ENABLE=1. Lepiej jednak po prostu zaktualizować ccache.
Stan wentylatora w MQTT
Komponent wentylatora dla MQTT nie sprawdzał, czy publikacja stanu się udała. Jeśli pierwsza próba po połączeniu nie wyszła, temat stanu zostawał pusty aż do następnej zmiany na wentylatorze. Według opisu zgłoszenia ta luka istniała od 2019 roku, odkąd scalono kod w C++. Wyszła na jaw na ESP8266 z 20 encjami: w serii wiadomości tuż po połączeniu stan wentylatora nie trafił do pośrednika i nic go nie wysłało ponownie aż do kolejnego uruchomienia. Teraz nieudana publikacja jest powtarzana, tak jak przy wszystkich innych encjach.
Aktualizacje koprocesora przy ESP32-P4
Na płytkach, na których ESP32-P4 komunikuje się z ESP32-C6 przez esp32_hosted, aktualizacja C6 przez HTTP pobierała i weryfikowała obraz, a potem przerywał ją 5-sekundowy licznik nadzorujący zadań (watchdog). Ostatni krok odczytuje bowiem cały obraz i sprawdza go jeszcze raz. Na M5Stack Tab5 licznik zadziałał równo 5 sekund po sprawdzeniu sumy SHA256, a po ponownym uruchomieniu C6 nadal miał starą wersję. Teraz końcowe wywołanie dostaje ten sam 60-sekundowy limit co początek aktualizacji.
Pozostałe poprawki
- Wyrażenia lambda generowane przez ESPHome trafiają do kodu po twoich własnych plikach z
esphome: includes:, co usuwa błędy „was not declared in this scope”. - Zależności bibliotek podane bez wersji są rozwiązywane tak, jak robiło to kiedyś PlatformIO. Kompilacja nie kończy się już błędem o brakującym
Adafruit_I2CDevice.h. - Pośredniki Bluetooth przestają zapisywać w dzienniku ostrzeżenie „Ignoring unexpected GAP event type: 9”. Jeden z użytkowników naliczył ich 1413 w ciągu około 13 godzin.
- Na układach takich jak ESP32-P4, na których ESP-IDF od wersji 5.3 zostawia starą funkcję resetu jako pustą zaślepkę,
ledcpo restarcie z powodu awarii po cichu pomijał reset. Teraz resetuje peryferium przez warstwę HAL. - Nieskończone wartości zmiennoprzecinkowe dają poprawny kod C++, a
Color::random_color()nie dzieli już przez zero.