Obserwując co dzieje się w paśmie ISM 868MHz zauważyłem wzmożoną aktywność w okolicach 868.95MHz. Do nasłuchu wykorzystałem tuner USB DVB-T i oprogramowanie RTL-SDR. Na spektrogramie pojawiły się bardzo krótkie transmisje powtarzające się z różnymi mocami. Charakterystyczne dwa symetrycznie skupione punkty sugerują modulację FSK, natomiast krótkie czasy transmisji sugerują wysoki bitrate. Różne moce odbieranych sygnałów sugerowały wiele nadajników znajdujących się w różnej odległości. Podejrzewałem, że źródłem mogą być liczniki energii elektrycznej lub nakładki na liczniki wody, obecnie miniaturowy moduł radiowy może znajdować się wewnątrz wodomierza. Poniżej możecie zobaczyć jeden z silniejszych sygnałów oraz pozostałe z bardziej oddalonych nadajników.
WMBus może pracować w wielu trybach np. T, C, S na częstotliwości 868.95MHz, 868.30MHz z modulacją FSK szybkość transmisji 100kb/s, 32.768kb/s. Patrząc na spektrogram, sposób działania wmbus został dobrze przemyślany, transmisje z dużą przepływnością zajmują mało czasu i mają niewielki zasięg. Wiele urządzeń może pracować równolegle a inkasent może realizować odczyty przemieszczając się w gęstej zabudowie miejskiej. Krótkie czasy transmisji wpływają pozytywnie na czas pracy bateryjnej.
Badając temat dalej z wykorzystaniem odbiornika DVB-T USB i rtl_433 możemy określić w jakim trybie nadają urządzenia wireless M-BUS, rtl_433 obsługuje kilka trybów pracy wmbus.
Okazuje się, że rtl_433 potrafi zdekodować tylko kilka z docierających do anteny sygnałów, pozostałe są prawdopodobnie zbyt słabe.
Zdekodowane sygnały pochodziły od wodomierza i gazomierza pracującego w trybie T. Badając głębiej wmbus zauważyłem, że modulacja FSK może przenosić kodowanie manchester lub 3 out of 6.
Następnie trafiłem na temat Zdalny odczyt licznika wody z nakładką IZAR gdzie został opisany odbiornik nano CUL 868 MBUS wykorzystujący CC1101 i Arduino nano. Na stronie nano CUL 868 MBUS dostępne są pliki wynikowe w formacie hex: firmware. Pobieramy: nanoCUL_r568_mbus_c1t1_bufsize300.hex i wysyłamy do Arduino nano z Atmega328 i rezonatorem 16MHz np. z użyciem XLOADERa.
Sposób połączenia Arduino nano z CC1101 znajdziemy tutaj.
CC1101 zasilamy z 3.3V natomiast Atmega328 zasilana jest z 5V. Dlatego porty wyjściowe CC1101 możemy połączyć bezpośrednio z wejściami Arduino nano, jednak porty wyjściowe nano łączymy z CC1101 poprzez dzielnik napięcia na rezystorach 470Ω i 1kΩ. Możemy także wykorzystać konwertery napięcia 5V<->3.3V jednak dla celów testowych rezystory będą wystarczające.
Arduino<->CC1101
D13/SCK -> (470Ω - 1kΩ) SCK
D12/MISO <- MISO
D11/MOSI -> (470Ω - 1kΩ) MOSI
D10 -> (470Ω - 1kΩ) CSN
D9 -> 330Ω LED GND (opcja)
D3 <- GDO0
D2 <-GDO2
Uruchamiamy połączenie poprzez UART 38400 i na początek możemy sprawdzić czy moduł odpowiada wydając komendę sprawdzającą wersję:
V + Enter
V 1.67 nanoCUL868_r568
Komendy dostępne są tutaj:
http://culfw.de/commandref.html
odbiór wmbus w trybie T:
brt
w trybie C:
brc
Na koniec uruchamiamy wysyłanie treści telegramów w HEX i RSSI:
X21
ew. X01 bez RSSI.
Okazało się, że CC1101 nie odbierał telegramów, które widział rtl_433 na SDR. Początkowo pomyślałem, że trafiłem na uszkodzony moduł CC1101 jednak okazało się, że odbiornik DVB-T ma znacznie lepszą czułość i CC1101 nie reagował prawidłowo na słabe sygnały wmbus.
Aby działać mobilnie pozostało podłączyć nano CUL 868 MBUS do smartfona przez kabel USB OTG. Jako terminal dla UART można wykorzystać np. Serial USB Terminal.
Po krótkim spacerze w logu zapisało się kilkadziesiąt telegramów wmbus. Mimo zastosowanego szyfrowania pole z ID urządzenia, rodzaj licznika i oznaczenie producenta są dostępne tekstem jawnym. Po wyfiltrowaniu pola ID zauważyłem, że większość liczników wysyła informacje co 5 minut. Udało się odebrać telegramy od kilkunastu liczników wody i kilku liczników gazu. Ciąg identyfikujący producenta to głównie APT i APA. Prawdopodobnie w ramach osiedla wodociągi i gazownia ujednoliciła modele liczników Apator. Nie odebrałem żadnego komunikatu z liczników energii elektrycznej, czy wiecie w jakim trybie wireless M-Bus pracują te liczniki?
Możliwości "dongla" USB i rtl-sdr są naprawdę zaskakujące a czułość odbiornika jest lepsza niż CC1101 przy odbiorze wmbus. Warto też uruchomić rtl_433 z innymi ustawieniami np. standardowo rtl_433 nasłuchuje w paśmie ISM 433MHz, zwykle uda się zdekodować informacje z czujników stacji pogodowych a nawet informacje o temperaturze i ciśnieniu w oponach z czujników TPMS samochodów znajdujących się na parkingu
Ponieważ rtl-sdr i rtl_433 radził sobie lepiej, zrobiłem testy terenowe z wykorzystaniem Raspberry Pi 3B+ zasilając układ z powerbanku.
Uruchomienie nasłuchu zajmuje ~27% uwagi CPU
Taki zestaw pobiera ~3.5W czyli znacznie więcej mocy niż Arduino nano i CC1101 pobierającego około 150mW.
Wykorzystałem 32b dystrybucję https://www.raspberrypi.com/software/operating-systems/
Raspberry Pi OS Lite
Kernel version 6.12
Debian version 13 (trixie)
Po połączeniu z internetem dodałem wymagane oprogramowanie w znany i typowy sposób:
sudo su
apt update
apt upgrade -y
apt install rtl-sdr
echo "blacklist dvb_usb_rtl28xxu" | sudo tee /etc/modprobe.d/no-rtl.conf
reboot
sudo apt install rtl-433
rtl_433 -s 1200k -f 868.95M
Po chwili pojawiły się telegramy WMBUS.
Do pracy mobilnej pozostaje przekierowanie wyników do pliku oraz dodanie uruchomienia nasłuchu do autostartu.
Po krótkim spacerze z odbiornikiem DVB-T w pliku pojawiło się ponad 1000 telegramów i ponad 400 unikalnych ID urządzeń!
Ciekawe czy liczniki z WMBUS stosują LBT (listen before talk)?
Poza Apatorem pojawiły się urządzenia BMETERS oraz Kamstrup.
Do liczników wody i gazu dołączyły liczniki ciepła.
Ciekawe jak wypadłoby porównanie czułości odbiornika na CC1101 z SX1262 lub RFM95W?
Natomiast w typowych zastosowaniach gdy odbiornik jest blisko licznika CC1101 powinien być dobrym, tanim i energooszczędnym rozwiązaniem.
Czy w swojej okolicy zauważyliście zwiększenie ilości telegramów wysyłanych przez liczniki z wmbus?
WMBus może pracować w wielu trybach np. T, C, S na częstotliwości 868.95MHz, 868.30MHz z modulacją FSK szybkość transmisji 100kb/s, 32.768kb/s. Patrząc na spektrogram, sposób działania wmbus został dobrze przemyślany, transmisje z dużą przepływnością zajmują mało czasu i mają niewielki zasięg. Wiele urządzeń może pracować równolegle a inkasent może realizować odczyty przemieszczając się w gęstej zabudowie miejskiej. Krótkie czasy transmisji wpływają pozytywnie na czas pracy bateryjnej.
Badając temat dalej z wykorzystaniem odbiornika DVB-T USB i rtl_433 możemy określić w jakim trybie nadają urządzenia wireless M-BUS, rtl_433 obsługuje kilka trybów pracy wmbus.
Okazuje się, że rtl_433 potrafi zdekodować tylko kilka z docierających do anteny sygnałów, pozostałe są prawdopodobnie zbyt słabe.
Zdekodowane sygnały pochodziły od wodomierza i gazomierza pracującego w trybie T. Badając głębiej wmbus zauważyłem, że modulacja FSK może przenosić kodowanie manchester lub 3 out of 6.
Następnie trafiłem na temat Zdalny odczyt licznika wody z nakładką IZAR gdzie został opisany odbiornik nano CUL 868 MBUS wykorzystujący CC1101 i Arduino nano. Na stronie nano CUL 868 MBUS dostępne są pliki wynikowe w formacie hex: firmware. Pobieramy: nanoCUL_r568_mbus_c1t1_bufsize300.hex i wysyłamy do Arduino nano z Atmega328 i rezonatorem 16MHz np. z użyciem XLOADERa.
Sposób połączenia Arduino nano z CC1101 znajdziemy tutaj.
CC1101 zasilamy z 3.3V natomiast Atmega328 zasilana jest z 5V. Dlatego porty wyjściowe CC1101 możemy połączyć bezpośrednio z wejściami Arduino nano, jednak porty wyjściowe nano łączymy z CC1101 poprzez dzielnik napięcia na rezystorach 470Ω i 1kΩ. Możemy także wykorzystać konwertery napięcia 5V<->3.3V jednak dla celów testowych rezystory będą wystarczające.
Arduino<->CC1101
D13/SCK -> (470Ω - 1kΩ) SCK
D12/MISO <- MISO
D11/MOSI -> (470Ω - 1kΩ) MOSI
D10 -> (470Ω - 1kΩ) CSN
D9 -> 330Ω LED GND (opcja)
D3 <- GDO0
D2 <-GDO2
Uruchamiamy połączenie poprzez UART 38400 i na początek możemy sprawdzić czy moduł odpowiada wydając komendę sprawdzającą wersję:
V + Enter
V 1.67 nanoCUL868_r568
Komendy dostępne są tutaj:
http://culfw.de/commandref.html
odbiór wmbus w trybie T:
brt
w trybie C:
brc
Na koniec uruchamiamy wysyłanie treści telegramów w HEX i RSSI:
X21
ew. X01 bez RSSI.
Okazało się, że CC1101 nie odbierał telegramów, które widział rtl_433 na SDR. Początkowo pomyślałem, że trafiłem na uszkodzony moduł CC1101 jednak okazało się, że odbiornik DVB-T ma znacznie lepszą czułość i CC1101 nie reagował prawidłowo na słabe sygnały wmbus.
Aby działać mobilnie pozostało podłączyć nano CUL 868 MBUS do smartfona przez kabel USB OTG. Jako terminal dla UART można wykorzystać np. Serial USB Terminal.
Po krótkim spacerze w logu zapisało się kilkadziesiąt telegramów wmbus. Mimo zastosowanego szyfrowania pole z ID urządzenia, rodzaj licznika i oznaczenie producenta są dostępne tekstem jawnym. Po wyfiltrowaniu pola ID zauważyłem, że większość liczników wysyła informacje co 5 minut. Udało się odebrać telegramy od kilkunastu liczników wody i kilku liczników gazu. Ciąg identyfikujący producenta to głównie APT i APA. Prawdopodobnie w ramach osiedla wodociągi i gazownia ujednoliciła modele liczników Apator. Nie odebrałem żadnego komunikatu z liczników energii elektrycznej, czy wiecie w jakim trybie wireless M-Bus pracują te liczniki?
Możliwości "dongla" USB i rtl-sdr są naprawdę zaskakujące a czułość odbiornika jest lepsza niż CC1101 przy odbiorze wmbus. Warto też uruchomić rtl_433 z innymi ustawieniami np. standardowo rtl_433 nasłuchuje w paśmie ISM 433MHz, zwykle uda się zdekodować informacje z czujników stacji pogodowych a nawet informacje o temperaturze i ciśnieniu w oponach z czujników TPMS samochodów znajdujących się na parkingu
Ponieważ rtl-sdr i rtl_433 radził sobie lepiej, zrobiłem testy terenowe z wykorzystaniem Raspberry Pi 3B+ zasilając układ z powerbanku.
Uruchomienie nasłuchu zajmuje ~27% uwagi CPU
Taki zestaw pobiera ~3.5W czyli znacznie więcej mocy niż Arduino nano i CC1101 pobierającego około 150mW.
Wykorzystałem 32b dystrybucję https://www.raspberrypi.com/software/operating-systems/
Raspberry Pi OS Lite
Kernel version 6.12
Debian version 13 (trixie)
Po połączeniu z internetem dodałem wymagane oprogramowanie w znany i typowy sposób:
sudo su
apt update
apt upgrade -y
apt install rtl-sdr
echo "blacklist dvb_usb_rtl28xxu" | sudo tee /etc/modprobe.d/no-rtl.conf
reboot
sudo apt install rtl-433
rtl_433 -s 1200k -f 868.95M
Po chwili pojawiły się telegramy WMBUS.
Do pracy mobilnej pozostaje przekierowanie wyników do pliku oraz dodanie uruchomienia nasłuchu do autostartu.
Po krótkim spacerze z odbiornikiem DVB-T w pliku pojawiło się ponad 1000 telegramów i ponad 400 unikalnych ID urządzeń!
Ciekawe czy liczniki z WMBUS stosują LBT (listen before talk)?
Poza Apatorem pojawiły się urządzenia BMETERS oraz Kamstrup.
Do liczników wody i gazu dołączyły liczniki ciepła.
Ciekawe jak wypadłoby porównanie czułości odbiornika na CC1101 z SX1262 lub RFM95W?
Natomiast w typowych zastosowaniach gdy odbiornik jest blisko licznika CC1101 powinien być dobrym, tanim i energooszczędnym rozwiązaniem.
Czy w swojej okolicy zauważyliście zwiększenie ilości telegramów wysyłanych przez liczniki z wmbus?
Cool? Ranking DIY