witam wszystkich, próbuję zrobić odbiornik wmbus na esp32-s3-wroom-1 P2N8 próbowałem też esp32-s3-N16R8 obie 44 pinowe + cc11010 próbowałem różnych konfiguracji pinów niestety po kompilacji płytka wpada w bootloop na watchdogu wywala się nawet gdy cc11010 jest fizycznie odłączony. Płytka sprawna bo jak zakomentuję wmbus to startuje bez jąknięcia. Miał ktoś podobne problemy? Esphome w wersji 2025.12.5
Udało mi się uruchomić na tej płytce z esphome 2025.12.7.
Problem leży w bibliotece SmartRC-CC1101-Driver-Lib a mianowicie w zahardkodowanyh wartościach, jest nawet na to zgłoszenie.
Najprostszy sposób to obejść, ręcznie zainicjalizować SPI dla CC1101 w pliku rf_cc1101.cpp.
Musisz sklonować repozytorium wmbus
git clone --single-branch --branch version_4 git@github.com:SzczepanLeon/esphome-components.git
I nałożyć mój patch rf_cc1101.zip (800 Bytes)
patch -p1 < rf_cc1101.cpp.patch
zmienić
external_components:
- source: github://SzczepanLeon/esphome-components@version_4
na
external_components:
- source:
type: local
path: esphome-components/components
mój yaml plik wygląda tak:
esphome:
name: wmbusgw
esp32:
board: esp32-s3-devkitc1-n16r8
framework:
type: arduino
flash_size: 16MB
logger:
level: DEBUG
api:
password: ""
ota:
- platform: esphome
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
fast_connect: True
external_components:
- source:
type: local
path: esphome-components/components
time:
- platform: sntp
id: time_sntp
wmbus:
mosi_pin: GPIO13
miso_pin: GPIO11
clk_pin: GPIO12
cs_pin: GPIO09
gdo0_pin: GPIO15
gdo2_pin: GPIO16
frequency: 868.950
all_drivers: False
sync_mode: False
log_all: True
Cześć, czy możesz rozwinąć :
Może wykażę się kompletną niewiedzą ale jak to zrobić ?
"
Najprostszy sposób to obejść, ręcznie zainicjalizować SPI dla CC1101 w pliku rf_cc1101.cpp"
Zrobiłem osobne repo ze wszystkimi zmianami.
Teraz wystarczy zmienić ścieżkę do repo na:
external_components:
- source: github://vitkuv/esphome-wmbus@version_4
Niestety nadal mam problem z kompilacją :
dołączam zrzut z błedem:
INFO ESPHome 2025.5.2
INFO Reading configuration /config/esphome/licnik.yaml...
INFO Detected timezone 'Europe/Warsaw'
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Generating C++ source...
INFO Compiling app...
Processing licnik (board: esp32dev; framework: arduino; platform: platformio/espressif32@5.4.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.4
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.3.0
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- noise-c @ 0.1.6
|-- SPI @ 2.0.0
|-- SmartRC-CC1101-Driver-Lib @ 2.5.7
Compiling .pioenvs/licnik/src/esphome/components/wmbus/driver_abbb23.cpp.o
Compiling .pioenvs/licnik/src/esphome/components/wmbus/driver_apatoreitn.cpp.o
Compiling .pioenvs/licnik/src/esphome/components/wmbus/driver_apatorna1.cpp.o
Compiling .pioenvs/licnik/src/esphome/components/wmbus/driver_auto.cpp.o
xtensa-esp32-elf-g++: fatal error: Killed signal terminated program as
compilation terminated.
*** [.pioenvs/licnik/src/esphome/components/wmbus/driver_abbb23.cpp.o] Error 1
========================= [FAILED] Took 11.12 seconds =========================
oraz yaml
esphome:
name: licnik
friendly_name: Licnik
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "/gE9nDw4tqboKmK3dB464oAVxo/YPXrGdDRnQnZubb4="
ota:
- platform: esphome
password: "56f801d3f3398d8fdfed913cc9d037cd"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Licnik Fallback Hotspot"
password: "0JpwXT5eT8QI"
captive_portal:
time:
- platform: sntp
id: time_sntp
external_components:
- source: github://vitkuv/esphome-wmbus@version_4
components: [ wmbus ]
wmbus:
mosi_pin: GPIO23
miso_pin: GPIO19
clk_pin: GPIO18
cs_pin: GPIO15
gdo0_pin: GPIO4
gdo2_pin: GPIO27
frequency: 868.950
all_drivers: True
sync_mode: True
log_all: True
dodam, że próbowałem również wersji 2025.6.3 i wystąpił podobny problem
Popraw swój post, będzie czytelniej i można wyłapywać potencjalne błędy.
Pcem zrobić na początek Clean Build.
No tak wstawiam poprany yaml
esphome:
name: licnik
friendly_name: Licnik
esp32:
board: esp32dev
framework:
type: arduino
# Enable logging
logger:
# Enable Home Assistant API
api:
encryption:
key: "/gE9nDw4tqboKmK3dB464oAVxo/YPXrGdDRnQnZubb4="
ota:
- platform: esphome
password: "56f801d3f3398d8fdfed913cc9d037cd"
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Licnik Fallback Hotspot"
password: "0JpwXT5eT8QI"
captive_portal:
time:
- platform: sntp
id: time_sntp
external_components:
- source: github://vitkuv/esphome-wmbus@version_4
components: [ wmbus ]
wmbus:
mosi_pin: GPIO23
miso_pin: GPIO19
clk_pin: GPIO18
cs_pin: GPIO15
gdo0_pin: GPIO4
gdo2_pin: GPIO27
frequency: 868.950
all_drivers: True
sync_mode: True
log_all: True
i jeszcze kod błędu:
INFO ESPHome 2025.5.2
INFO Reading configuration /config/esphome/licnik.yaml...
INFO Detected timezone 'Europe/Warsaw'
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Generating C++ source...
INFO Compiling app...
Processing licnik (board: esp32dev; framework: arduino; platform: platformio/espressif32@5.4.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.4
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.3.0
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- noise-c @ 0.1.6
|-- SPI @ 2.0.0
|-- SmartRC-CC1101-Driver-Lib @ 2.5.7
Compiling .pioenvs/licnik/src/esphome/components/wmbus/driver_abbb23.cpp.o
Compiling .pioenvs/licnik/src/esphome/components/wmbus/driver_c5isf.cpp.o
Compiling .pioenvs/licnik/src/esphome/components/wmbus/driver_cma12w.cpp.o
xtensa-esp32-elf-g++: fatal error: Killed signal terminated program as
compilation terminated.
*** [.pioenvs/licnik/src/esphome/components/wmbus/driver_abbb23.cpp.o] Error 1
========================= [FAILED] Took 10.44 seconds =========================
W jaki sposób masz uruchomiony ESPHome Device Builder? Może brakuje pamięci RAM podczas kompilacji, bo ten log by to sugerował:
xtensa-esp32-elf-g++: fatal error: Killed signal terminated program as
compilation terminated
Proces został ubity…
ESPHome zainstalowany wewnątrz HA, próbowałem również kompilacji przez narzędzie " ESPHome Online Compiler" niestety z takim samym rezultatem.
Zwiększyłem obszar przydzielonej pamięci , kompilacja ruszyła dalej jednak otrzymuję nowe błędy:
INFO Reading configuration /config/esphome/licnik.yaml...
INFO Detected timezone 'Europe/Warsaw'
WARNING GPIO15 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Generating C++ source...
INFO Compiling app...
Processing licnik (board: esp32dev; framework: arduino; platform: platformio/espressif32@5.4.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.4
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.3.0
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- noise-c @ 0.1.6
|-- SPI @ 2.0.0
|-- SmartRC-CC1101-Driver-Lib @ 2.5.7
Compiling .pioenvs/licnik/src/esphome/components/wmbus/wmbus.cpp.o
Compiling .pioenvs/licnik/src/esphome/core/helpers.cpp.o
In file included from src/esphome/components/web_server_base/web_server_base.h:11,
from src/esphome/components/captive_portal/captive_portal.h:11,
from src/esphome/components/wmbus/wmbus.cpp:13:
.piolibdeps/licnik/ESPAsyncWebServer-esphome/src/ESPAsyncWebServer.h:280:68: warning: 'warning_x' attribute directive ignored [-Wattributes]
const String& ASYNCWEBSERVER_REGEX_ATTRIBUTE pathArg(size_t i) const;
^~~~~
src/esphome/components/wmbus/wmbus.cpp:18:48: note: #pragma message: Loop task stack increased.
#pragma message ( "Loop task stack increased." )
^
Compiling .pioenvs/licnik/src/esphome/core/log.cpp.o
src/esphome/components/wmbus/wmbus.cpp: In member function 'virtual void esphome::wmbus::WMBusComponent::loop()':
src/esphome/components/wmbus/wmbus.cpp:145:42: error: 'class esphome::sensor::Sensor' has no member named 'get_unit_of_measurement_ref'; did you mean 'get_unit_of_measurement'?
else if (field.second->get_unit_of_measurement_ref().empty()) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_unit_of_measurement
src/esphome/components/wmbus/wmbus.cpp:149:60: error: 'class esphome::sensor::Sensor' has no member named 'get_unit_of_measurement_ref'; did you mean 'get_unit_of_measurement'?
Unit field_unit = toUnit(field.second->get_unit_of_measurement_ref());
^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_unit_of_measurement
*** [.pioenvs/licnik/src/esphome/components/wmbus/wmbus.cpp.o] Error 1
========================== [FAILED] Took 7.24 seconds ==========================
W Twoim logu widzę: Processing licnik (board: esp32dev; framework: arduino; platform: platformio/espressif32@5.4.0)
Używasz starej wersji platform. Przy nowych komponentach (wmbus z 2025 roku) i nowszych wersjach ESPhome, biblioteki takie jak ESPAsyncWebServer mogą sypać ostrzezeniami lub błędami jeśli framework arduino jest zbyt stary.
Spróbuj w kodzie podbić wersję:
esp32:
board: esp32dev
framework:
type: arduino
platform: platformio/espressif32@^6.0.0
Masz ustawione all_drivers: True. Komponent wmbus dla ESPHome zawiera dziesiątki sterowników dla różnych liczników (Apator, Izar, Itron itd.). Każdy z nich to osobny plik który musi zostać skompilowany.
Jeśli wiesz, jaki masz licznik, wyłącz all_drivers i dodaj tylko konkretny sterownik. Jeśli nie wiesz, spróbuj chociaż ograniczyć listę zamiast ładować wszystko:
wmbus:
# ... piny ...
all_drivers: False
# Zamiast all_drivers, dodaj tylko te, których potrzebujesz, np.:
# drivers:
# - name: apator08
# - name: izar
Ostrzeżenie o Strapping Pin (GPIO15)
To nie błąd kompilacj ale błąd sprzętowy . GPIO15 na ESP32 decyduje o trybie bootowania. Jeśli masz tam podłączony CS od CC1101 a moduł w momencie startu wymusi tam stan niski/wysoki, ESP32 może nie wystartować (wejść w bootloop).
Jeśli masz wolne inne piny, przenieś cs_pin z GPIO15 na np. GPIO5 lub inny nie-strapping pin.
Jak to zrobisz powinno zaddziałać.
ale korzystasz z forka dla S3 (inny procesor) i nie rozumiem dlaczego, bo ta definicja płytki nie pasuje do S3
Postąpiłem zgodnie z wskazówkami kompilacja rusza dalej jednak tym razem zatrzymuje się na wbus
INFO Reading configuration /config/esphome/licnik.yaml...
INFO Detected timezone 'Europe/Warsaw'
WARNING GPIO5 is a strapping PIN and should only be used for I/O with care.
Attaching external pullup/down resistors to strapping pins can cause unexpected failures.
See https://esphome.io/guides/faq.html#why-am-i-getting-a-warning-about-strapping-pins
INFO Generating C++ source...
INFO Compiling app...
Processing licnik (board: esp32dev; framework: arduino; platform: platformio/espressif32@6.0.0)
--------------------------------------------------------------------------------
HARDWARE: ESP32 240MHz, 320KB RAM, 4MB Flash
- toolchain-xtensa-esp32 @ 8.4.0+2021r2-patch5
Dependency Graph
|-- AsyncTCP-esphome @ 2.1.4
|-- WiFi @ 2.0.0
|-- FS @ 2.0.0
|-- Update @ 2.0.0
|-- ESPAsyncWebServer-esphome @ 3.3.0
|-- DNSServer @ 2.0.0
|-- ESPmDNS @ 2.0.0
|-- noise-c @ 0.1.6
|-- SPI @ 2.0.0
|-- SmartRC-CC1101-Driver-Lib @ 2.5.7
Compiling .pioenvs/licnik/src/esphome/components/wmbus/wmbus.cpp.o
Compiling .pioenvs/licnik/src/esphome/core/component.cpp.o
In file included from src/esphome/components/web_server_base/web_server_base.h:11,
from src/esphome/components/captive_portal/captive_portal.h:11,
from src/esphome/components/wmbus/wmbus.cpp:13:
.piolibdeps/licnik/ESPAsyncWebServer-esphome/src/ESPAsyncWebServer.h:280:68: warning: 'warning_x' attribute directive ignored [-Wattributes]
const String& ASYNCWEBSERVER_REGEX_ATTRIBUTE pathArg(size_t i) const;
^~~~~
Compiling .pioenvs/licnik/src/esphome/core/component_iterator.cpp.o
src/esphome/components/wmbus/wmbus.cpp:18:48: note: #pragma message: Loop task stack increased.
#pragma message ( "Loop task stack increased." )
^
src/esphome/components/wmbus/wmbus.cpp: In member function 'virtual void esphome::wmbus::WMBusComponent::loop()':
src/esphome/components/wmbus/wmbus.cpp:145:42: error: 'class esphome::sensor::Sensor' has no member named 'get_unit_of_measurement_ref'; did you mean 'get_unit_of_measurement'?
else if (field.second->get_unit_of_measurement_ref().empty()) {
^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_unit_of_measurement
src/esphome/components/wmbus/wmbus.cpp:149:60: error: 'class esphome::sensor::Sensor' has no member named 'get_unit_of_measurement_ref'; did you mean 'get_unit_of_measurement'?
Unit field_unit = toUnit(field.second->get_unit_of_measurement_ref());
^~~~~~~~~~~~~~~~~~~~~~~~~~~
get_unit_of_measurement
*** [.pioenvs/licnik/src/esphome/components/wmbus/wmbus.cpp.o] Error 1
========================== [FAILED] Took 6.79 seconds ==========================
To już konkretny błąd programistyczny, a nie problem z brakiem pamięci. Dobra wiadomość jest taka, że wiemy dokładnie, co się dzieje.
Błąd error: 'class esphome::sensor::Sensor' has no member named 'get_unit_of_measurement_ref' wynika z niedopasowania wersji (API mismatch). W repozytorium, którego używasz (vitkuv/esphome-wmbus@version_4), autor użył nowszych funkcji rdzenia ESPHome (wprowadzonych w wersjach dev/beta), których nie ma w Twojej wersji ESPHome 2025.5.2.
W starszych wersjach ESPHome funkcja ta nazywała się get_unit_of_measurement(), a w nowszych dodano _ref dla optymalizacji.
Jak to naprawić?
Masz dwie drogi, ale polecam opcję 1, bo jest najszybsza:
Opcja 1: Aktualizacja ESPHome (Zalecane)
Błąd sugeruje, że Twój komponent oczekuje standardów z okolic wersji ESPHome 2025.10+. Skoro masz wersję 2025.5.2, jesteś “do tyłu” o kilka miesięcy zmian w API.
- Zaktualizuj dodatek (Add-on) ESPHome w Home Assistant do najnowszej dostępnej wersji (obecnie powinna to być 2025.12.x lub nowsza).
- Po aktualizacji spróbuj skompilować ponownie.
Opcja 2: Zmiana wersji komponentu (Jeśli nie chcesz aktualizować ESPHome)
Jeśli z jakiegoś powodu musisz zostać na ESPHome 2025.5.2, spróbuj użyć stabilniejszej, nieco starszej gałęzi komponentu od oryginalnego autora, która nie miała jeszcze tych zmian w kodzie:
external_components:
- source: github://SzczepanLeon/esphome-components@main
components: [ wmbus ]
Uwaga: Pamiętaj, że wracając do main u SzczepanLeona, możesz znów trafić na problem z SPI na ESP32-S3, o którym pisał @Witek Witek w swoim poście.
W logu widzę: WARNING GPIO5 is a strapping PIN... Teraz używasz GPIO5 jako cs_pin. Na klasycznym ESP32 (nie S3) GPIO5 to pin decydujący o napięciu flasha lub trybie bootowania. Jeśli kompilacja przejdzie, a płytka nadal nie będzie chciała wstać (bootloop), zmień ten pin na inny, np. GPIO2 (jeśli wolny) lub dowolny powyżej GPIO16 (np. 21, 22). [Tak w tamtym poprzednim poście jednak się pomyliłem sorry]
To jest OK,
CS jest w tu wyjściem MCU, więc w tym wypadku ostrzeżenie można zignorować (MCU w trakcie inicjalizacji nie wystawi sobie tam poziomu, który będzie kolidował z bootstrapem).
akurat GPIO2 w wielu modelach płytek jest na sztywno wyjściem kontrolki LED (i to może wywoływać konflikty, bo dioda jest zwykle wpięta w układzie OD = odciągą pin do zasilania)
Jeśli chodzi akurat o CS to sugeruję użyć domyślny pin CS danej magistrali SPI (to zależy od modelu MCU, w zwykłym ESP32 = dwurdzeniowy Xtensa6 te piny to akurat GPIO5 i GPIO15 oba biorące udział w bootstrapie, mimo to można je używać w tym akurat zastosowaniu).
Ostrzeżenie jest automatycznie generowane niezależnie od tego w jakiej roli użyjemy te piny (zakłócenia bootstrapu są możliwe jedynie jeśli podciągniemy je do zasilania lub masy niezgodnie z intencją producenta lub będą pinami wejściowymi).
Świetne bryki z dokumentacji są na randomnerdtutorials - tu jest dla S3
Powróciłem do wersji 2025.12 tak jak zasugerowałeś ,korzystając dalej z repo które utworzył Witek, kompilacja została wykonana
Poprawiłem jeszcze kilka drobiazgów związanych z podłączeniem ( pozostałem na GPIO5) wszystko zainstalowało się bez błędu esp32 wykrywa i komunikuje się z radiem. Działam dalej wielkie dzięki za wsparcie
