Pogoda w kwietniu okazała się dość zmienna, niskie temperatury i śnieg spowodowały, że przydałby się termometr wskazujący aktualną temperaturę zewnętrzną. Można kupić taki termometr za około 25zł jednak chcę termometr oddalony od okna i nie miałem ochoty na wiercenie otworu na przewód. Sąsiad ma zacięcie meteorologiczne, zauważyłem u niego dwa termometry po obu stronach domu, jeden w osłonie radiacyjnej oraz bezprzewodowy czujnik temperatury. Przed tegorocznymi wichurami miał nawet wiatromierz. Gdy powiedziałem mu, że chciałbym odebrać sygnał z jego czujnika temperatury i wykorzystać we wskaźniku temperatury zewnętrznej wzbudziło to jego sporą ciekawość.
Do pierwszej próby wykorzystałem Universal Radio Hacker i odbiornik RTL-SDR.
Pierwsza próba wykazała, że czujnik wysyła w pakiecie sześciokrotnie te same dane w paśmie ISM 433MHz.
Wygląda to na kodowanie wartości bitów przez czas odstępu między transmisjami o stałej długości. Do tego dochodzi rodzaj preambuły.
Ten rodzaj kodowania jest dość efektywny mimo to nie lubię go i pomyślałem, że termometr za 25zł może być niezłym rozwiązaniem a przewód do czujnika mogę zawsze przedłużyć
W tym momencie przypomniałem sobie, że kiedyś testowałem ciekawy projekt RFlink potrafiący dekodować bardzo wiele rodzajów transmisji, było to przy okazji materiału o Arduino Mega.
Próba odebrania sygnału z czujnika przyniosła bardzo szybki efekt i konsolą szeregową z prędkością 57600 z RFlink przybyły takie informacje:
Auriol V3;ID=DE01;TEMP=010e;HUM=21;
Mamy informację o protokole, jest to Auriol V3, oraz dane o temperaturze i wilgotności.
RFlink jest doskonałym narzędziem, które pozwala na odbiór i nadawanie w wielu standardach bezprzewodowych czujników i układów sterowania. Jednak w termometrze nie chcę stosować Arduino Mega...
Po chwili okazało się, że w pobliżu dostępne jest znacznie więcej czujników temperatury i nie tylko:
Baldr;ID=2401;TEMP=00b5;HUM=20;BAT=OK;
Mebus;ID=7801;TEMP=0053;
Doorbell;ID=4c40;SWITCH=1;CMD=ON;CHIME=01;
Xiron;ID=3501;TEMP=0035;BAT=OK;
Alecto V4;ID=372a;TEMP=0040;HUM=21;
Skupiłem się na odbiorze danych z czujnika, którego lokalizacja jest mi znana, znalazłem opis protokołu Auriol v2 zależności czasowe bit synchronizujący 9ms, "1" - 4ms, "0" - 2ms, nośne trwające 500us. Zgadzało się kodowanie wilgotności (każda cyfra osobno jako BCD) jednak w wersji v3 zmieniła się ilość bitów oraz kolejność pól z danymi.
Ostatecznie znalazłem przykładowy kod dla Auriol V3 dla Z32171A.
Okazało się, że 40 bitów danych koduje dane zgodnie z opisem w znalezionym przykładzie.
Następnym krokiem było podłączenie wyjścia odbiornika RFM210DL do wejścia 2 Arduino UNO:
Następnie napisanie prymitywnego kodu dekodującego dane odbierane z bezprzewodowego czujnika temperatury i wilgotności:
Już po chwili w konsoli szeregowej pojawiły się informacje:
ID: DE
Temp: 32C
HUM: 50%
CH: 1
32C to oczywiście 3.2°C.
Dane ułożone są zgodnie z opisem w znalezionym kodzie:
Format Auriol v3
AAAA AAAA BBBB CCDD EEEE EEEE EEEE FFFF FFFF GGHH
A = 8b ID czujnika zmieniany przy każdej zmianie baterii
B = prawdopodobnie CRC
C = 00 = bat OK
D = trend temperatury 00 - stała, 01 - wzrost, 10 - spadek
E = Temperatura ((EEEE EEEE EEEE - 0x4c4) *5) / 9
F = wilgotność 2 cyfry BCD
G = ?
H = ustawiony numer kanału nadajnika
CRC pewnie dałoby się dopasować jednak lepszym rozwiązaniem wydaje się porównanie kilku transmisji gdyż dane powtarzane są sześciokrotnie.
Być może format Auriol v3 przyda Wam się do wykorzystania pojedynczego czujnika bezprzewodowego jako źródła danych dla kilku termometrów. Obserwując transmisje wysyłane przez czujniki w okolicy doszedłem do wniosku, że nie będę dodatkowo zaśmiecał pasma ISM i wykorzystam dane z czujnika, który widzę przez okno. "Wykorzystam" jest tu czasem przyszłym, gdyż po zaspokojeniu ciekawości oraz po wzroście temperatury w ostatnim tygodniu potrzeba posiadania wyświetlacza temperatury zewnętrznej przestała być już tak pilna
Chociaż teraz sprawa jest prosta, dołożenie wyświetlacza, kilka dodatkowych linijek kodu sprawdzającego poprawność transmisji oraz procedura "parowania" czujnika i tyle powinno wystarczyć.
Sposób przedstawiony w materiale można wykorzystać do dekodowania danych z czujników pogodowych innego typu. Gdy próbowałem zdekodować dane nie planowałem umieszczać opisu na elektroda.pl i w tym materiale zabrakło mi zdjęć... Poniżej wygląd czujnika TX205D-TH, z którego udało mi się odebrać dane pogodowe.
Do pierwszej próby wykorzystałem Universal Radio Hacker i odbiornik RTL-SDR.
Pierwsza próba wykazała, że czujnik wysyła w pakiecie sześciokrotnie te same dane w paśmie ISM 433MHz.
Wygląda to na kodowanie wartości bitów przez czas odstępu między transmisjami o stałej długości. Do tego dochodzi rodzaj preambuły.
Ten rodzaj kodowania jest dość efektywny mimo to nie lubię go i pomyślałem, że termometr za 25zł może być niezłym rozwiązaniem a przewód do czujnika mogę zawsze przedłużyć

Próba odebrania sygnału z czujnika przyniosła bardzo szybki efekt i konsolą szeregową z prędkością 57600 z RFlink przybyły takie informacje:
Auriol V3;ID=DE01;TEMP=010e;HUM=21;
Mamy informację o protokole, jest to Auriol V3, oraz dane o temperaturze i wilgotności.
RFlink jest doskonałym narzędziem, które pozwala na odbiór i nadawanie w wielu standardach bezprzewodowych czujników i układów sterowania. Jednak w termometrze nie chcę stosować Arduino Mega...
Po chwili okazało się, że w pobliżu dostępne jest znacznie więcej czujników temperatury i nie tylko:
Baldr;ID=2401;TEMP=00b5;HUM=20;BAT=OK;
Mebus;ID=7801;TEMP=0053;
Doorbell;ID=4c40;SWITCH=1;CMD=ON;CHIME=01;
Xiron;ID=3501;TEMP=0035;BAT=OK;
Alecto V4;ID=372a;TEMP=0040;HUM=21;
Skupiłem się na odbiorze danych z czujnika, którego lokalizacja jest mi znana, znalazłem opis protokołu Auriol v2 zależności czasowe bit synchronizujący 9ms, "1" - 4ms, "0" - 2ms, nośne trwające 500us. Zgadzało się kodowanie wilgotności (każda cyfra osobno jako BCD) jednak w wersji v3 zmieniła się ilość bitów oraz kolejność pól z danymi.
Ostatecznie znalazłem przykładowy kod dla Auriol V3 dla Z32171A.
Okazało się, że 40 bitów danych koduje dane zgodnie z opisem w znalezionym przykładzie.
Następnym krokiem było podłączenie wyjścia odbiornika RFM210DL do wejścia 2 Arduino UNO:
Następnie napisanie prymitywnego kodu dekodującego dane odbierane z bezprzewodowego czujnika temperatury i wilgotności:
Code: c
Już po chwili w konsoli szeregowej pojawiły się informacje:
ID: DE
Temp: 32C
HUM: 50%
CH: 1
32C to oczywiście 3.2°C.
Dane ułożone są zgodnie z opisem w znalezionym kodzie:
Format Auriol v3
AAAA AAAA BBBB CCDD EEEE EEEE EEEE FFFF FFFF GGHH
A = 8b ID czujnika zmieniany przy każdej zmianie baterii
B = prawdopodobnie CRC
C = 00 = bat OK
D = trend temperatury 00 - stała, 01 - wzrost, 10 - spadek
E = Temperatura ((EEEE EEEE EEEE - 0x4c4) *5) / 9
F = wilgotność 2 cyfry BCD
G = ?
H = ustawiony numer kanału nadajnika
CRC pewnie dałoby się dopasować jednak lepszym rozwiązaniem wydaje się porównanie kilku transmisji gdyż dane powtarzane są sześciokrotnie.
Być może format Auriol v3 przyda Wam się do wykorzystania pojedynczego czujnika bezprzewodowego jako źródła danych dla kilku termometrów. Obserwując transmisje wysyłane przez czujniki w okolicy doszedłem do wniosku, że nie będę dodatkowo zaśmiecał pasma ISM i wykorzystam dane z czujnika, który widzę przez okno. "Wykorzystam" jest tu czasem przyszłym, gdyż po zaspokojeniu ciekawości oraz po wzroście temperatury w ostatnim tygodniu potrzeba posiadania wyświetlacza temperatury zewnętrznej przestała być już tak pilna

Sposób przedstawiony w materiale można wykorzystać do dekodowania danych z czujników pogodowych innego typu. Gdy próbowałem zdekodować dane nie planowałem umieszczać opisu na elektroda.pl i w tym materiale zabrakło mi zdjęć... Poniżej wygląd czujnika TX205D-TH, z którego udało mi się odebrać dane pogodowe.
Cool? Ranking DIY