Co w eterze piszczy...

Słowem wstępu

Przepraszam, jak zwykle, że dawno tutaj nic nie pisałem. Cóż - takie życie, człowiek wielu zainteresowań tak ma. Mam nadzieję, że treść artykułu ładnie tutaj odrobi i będzie podstawa do kolejnego przebaczenia.

Radia słuchał każdy ale radio to nie tylko słyszalne sygnały...

Wpadł mi w ręce kolejny model gniazd elektrycznych, więc postanowiłem dodać ich obsługę do mojej bramki WiFi -> 433 MHz. Do zabawy potrzebny jest RTL-SDR oraz antena. Zda się nawet prosty kawałek drutu, zysku wielkiego nie potrzeba, by złapać sygnały z pilota, który mamy kilka centymetrów dalej.

No więc do dzieła...

Do analizy sygnałów istnieje świetne narzędzie o nazwie Universal Radio Hacker. Dzięki niemu możemy analizować sygnały. Musimy znać jednak częstotliwość, w tym przypadku będzie to 433.92, co z resztą jest oznaczone na urządzeniu odbiorczym.


Teraz musimy nagrać sygnał. W tym celu klikamy przycisk Start w oknie Record Signal. Następnie nadajemy sygnał radiowy wciskając odpowiednie przyciski na pilocie. Najlepiej jest nagrać wszystkie możliwe sekwencje na pilocie, co pozwala łatwiej domyśleć się, co jest przesyłane. Na potrzeby artykułu skrócę jednak ten proces.

Po nagraniu sygnałów musimy zapisać przebieg i zamknąć okno nagrywania. W kolejnym oknie możemy analizować transmisję - w tym przypadku jest to OOK/ASK, więc takie ustawienie należy wybrać. Chcemy też widzieć od razu zdemodulowany sygnał.


W tym samym oknie możemy analizować długość trwania poszczególnych stanów logicznych. Zaznaczyłem wam w kółku, by było dobrze widoczne.


Tego typu protokoły radiowe mają to do siebie, że początkowo nadają krótki impuls wysoki (w tym przypadku ~280us), następnie długi niski (10ms) a dalej poszczególne bity reprezentowane odpowiednimi sygnaturami. Oznaczyłem specjalnie bity o wartości 1, jak i o wartości 0. Z analizy różnych sygnałów wynika, że mamy nadawane kolejno bity "1 0 0 0 A1 A2 A3 A4 A5 A6 A7", gdzie jako A umownie przypisałem adres urządzenia. Nie wiem, czy producent nie zamieszcza tam innych danych, gdyż nie mam całej rodziny urządzeń do dyspozycji a jedynie jednego pilota z trzema wartościami (1-3) i pewien jestem, że w miejsce A1 i A2 trafia binarna reprezentacja numeru gniazda.


Problematyczne są jednak końcówki sygnału, które nie pasują do powyższego schematu. Jednak widać precyzyjnie, że zmieniają się w zależności od tego czy włączamy, czy wyłączamy dane zdalnie sterowane gniazdko.


W implementacji protokołu oznaczyłem te wartości umownie jako L i H, odpowiadające wyłączeniu lub włączeniu danego gniazda. Przykładowo nadanie kodu 10001000000H spowoduje włączenie gniazda o numerze 1 a nadanie kodu 10001000000L jego wyłączenie.


Na koniec procedura najwyższego poziomu, która przyjmuje już tylko numer gniazda i informację, czy ma być włączone czy wyłączone.


Pozostała nam już tylko krótka prezentacja działania algorytmu. Sygnał z telefonu przesyłany jest do stacji BTS, następnie do VPSa w Czechach, gdzie jest przetwarzany i przesyłany do brokera MQTT a następnie do urządzenia zamontowanego w pokoju, które rozgłasza na częstotliwości 433.92 MHz opisany w artykule sygnał.


Cieszy mnie treść artykułu podobnie jak was dobre piwo. Mam nadzieję, że tematyka smakowała, zwłaszcza dość ciekawie rozpisana. Zmykam już - do następnego!


Komentarze

  1. Odpowiedzi
    1. Z innej beczki. Mam Estymę Control M. Nie wiesz może w jakim języku jest programowana ATMEGA? Chciałem dodać obsługę czujnika temp. spalin. Mam oprogramowanie, które tego nie wyświetla, moduł ma wejście na czujnik spalin. Mam diodę jakieś KTY, raczej pasuje. Atmega w Farnellu kosztuje ok. 30zł. Moduł jest podobny do tych stosowanych w Kostrzewa czy Fuwi. Nie wiesz może czym to oprogramowanie zgrać, aby podejrzeć ten kod? Kostrzewa może zaprogramować co chcesz tylko nie wiem jak w kwestii sprzętowej było. Nie wiem czy to jet zamienne. https://kostrzewakoszalin.pl/procesor-z-oprogramowaniem-do-modulu-sterownika-kotla-p-418.html

      Usuń
    2. Wsad jeśli zgrasz, to będzie w formie języka maszynowego. Te KTY to są typowe termistory. Jeśli ten kocioł ma CAN, to będzie wypluwać dane z modułu CAN IO BIG i wśród tych wartości będzie też temperatura spalin.

      Rzuć okiem na metodę calculateExhaustTemperature. Wartość wchodząca to zakres 0 - 4096, czyli to co kocioł odbierał z ADC.

      https://github.com/cziter15/pelletmon/commit/28a995dc86cbd7344385397c87902fe54238eaa8#diff-4074abe394f518065ab81b62ae877240551ef4d86f414cf9e871f22751246cd2

      Usuń

Prześlij komentarz