Ustatnia modyfikacja 1 lipca 2026 przez Olek
Funkcjonalność pod kątem użytkownika
Odczyty i prezentacja
- urządzenie automatycznie odbiera ramki wM-Bus z wodomierzy i pokazuje wynik bez potrzeby ręcznej obsługi,
- na wyświetlaczu TFT prezentowane są bieżące odczyty, statystyki ramek oraz szczegóły dla każdego licznika,
- dla każdego wodomierza dostępne są dane takie jak identyfikator, ostatni odczyt m3, liczba odczytów, średni interwał i ostatni RSSI,
- system zapisuje i pokazuje informacje diagnostyczne, co ułatwia sprawdzanie jakości odbioru i działania RF,
Interfejs WWW
- dostępny jest interfejs WWW z widokiem odczytów, logów, statystyk i informacji o projekcie,
- w WWW dostępny jest także endpoint JSON
/stats.jsondo odczytu danych przez inne narzędzia lub integracje, - przez WWW można też wykonać podstawowe akcje administracyjne, takie jak restart urządzenia lub aktualizacja OTA,
Obsługa i łączność
- interfejs obsługiwany jest enkoderem i przyciskiem KO, dzięki czemu można szybko przełączać widoki i otwierać menu,
- urządzenie może łączyć się z dowolną siecią Wi-Fi po wybraniu SSID i podaniu hasła, wykonywać OTA i synchronizować czas przez NTP,
- RTC pozwala zachować poprawny czas także po zaniku zasilania,
- czas można też ustawić ręcznie, jeśli użytkownik chce skorygować wskazanie bez korzystania z NTP,
Zasilanie i pamięć
- urządzenie może być zasilane bateryjnie z dwóch ogniw 18650, co pozwala na długą pracę bez zasilania sieciowego,
- w trybie bateryjnym można wyłączyć wyświetlacz TFT oraz Wi-Fi, aby wydłużyć czas pracy na akumulatorach,
- większość ustawień i danych roboczych jest pamiętana w nieulotnej pamięci flash, więc po restarcie urządzenie zachowuje swoją konfigurację,
- ekran może wygaszać się automatycznie po czasie nieaktywności, a wybudzenie następuje po ruchu enkodera lub użyciu przycisku.
Opis techiczny
Firmware dla ESP32 do odbioru i dekodowania ramek wM-Bus z transceivera CC1101 (868.95 MHz), z obsługą:
- odbioru RF przez CC1101,
- dekodowania ramek mBus,
- logowania UART z timestampami,
- OTA po Wi-Fi,
Projekt działa na PlatformIO i Arduino framework.
Protokół radiowy (liczniki Apator)
Projekt nasłuchuje ramek radiowych zgodnych z Wireless M-Bus (wM-Bus, EN 13757-4), czyli protokołu powszechnie używanego przez wodomierze Apator.
Najważniejsze parametry pracy w tym firmware:
- pasmo: 868.95 MHz (CC1101),
- podstawowy tryb dekodowania: wM-Bus T1, blok A (T/A),
- kodowanie dla trybu T: 3-of-6,
- dekodowanie ramek mBus z walidacją CRC bloków,
- filtrowanie i zliczanie ramek producenta Apator (M-field =
0x0601, kod producenta „APA”).
Obsługiwane są również scenariusze ramek szyfrowanych:
- ELL z deszyfrowaniem AES-CTR,
- TPL (enc_mode=5) z deszyfrowaniem AES-CBC,
- klucz konfigurowany przez
WMBUS_AES_KEY_HEX.
Uwaga: domyślnie firmware jest zoptymalizowany pod odbiór liczników Apator i ich ramek wM-Bus.

Aktualny status
- płyta: NodeMCU-32S (ESP-32S)
- framework: Arduino
- radio: CC1101
- aktywny backend RF: SmartRC (flaga
USE_RADIOLIB=0) - odbiór: 868.95 MHz, wM-Bus Mode T/A
- dekodowanie: ramki Apator, RSSI per licznik
- sieć: Wi-Fi + OTA
- wyświetlacz: ST7789 240×320 — statystyki odświeżane co 60 s, pasek statusu z licznikami ramek R/A/F
- wejścia: enkoder EC11 (GPIO34/35/21), przycisk KO (GPIO22)
- menu GEM: sterowane enkoderem, pozycje: Pokaz odczyty / Info / Wygaszanie TFT / WiFi
- Ekran ODCZYTY: ramki (R/A/F) oraz szczegółowe statystyki per licznik z linią na arkuszu
- Ekran INFO: projekt, wygaszanie TFT, dane autora + czasy RTC/NTP (jeśli dostępne)
- Przełączanie ODCZYTY↔INFO: klik enkodera; KO otwiera menu
- auto-wygaszanie TFT: konfigurowalne 0/10/30/60/120/300 s (0 = wyłączone), wybudzenie pierwszym ruchem
- RTC: warstwa abstrakcji
rtc_manager.h— domyślnie DS1302 (bitbang), opcjonalnie PCF8563 (I2C) przez flagęUSE_RTC_PCF8563; synchronizacja z NTP przez dialog TFT; poprawna obsługa stref/DST (mktime) - Serwer HTTP (port 80): endpointy
/(odczyty),/log,/about,/stats.json,/reboot,/update(OTA + Basic Auth)