Na stole pozostał trzeci najbardziej oporny do zdekodowania dzwonek firmy ELHOME.
Zarówno biblioteka RCSwitch autorstwa SUI77 jak i zmodyfikowana przez Martin-Laclaustra są całkowicie ślepe a może raczej głuche na transmisję wysyłaną przez dzwonek. To trochę dziwne bo Analizator Protokołu coś tam jednak pokazać powinien. Ale nie pokazuje. Trudno .
Znalazłem kiedyś na sieci monitor czytający wszytko jak leci co jest widziane przez odbiornik 433 MHz autorstwa bal00. Kod jest uniwersalny i nie korzysta z przerwań dzięki czemu można go zaimplementować na dowolny mikrokontroler.
A to efekt jego działania - zostawiam tylko jedną powtarzającą się sekwencję sygnałów
int intervals[] = {984, 349, 1983, // 351, 10310, 1027, 307, 360, 973, 1024, 310, 357, 976, 1023, 310, 1021, 314, 1019, 314, 1018, 316, 351, 982, 352, 982, 1017, 316, 1018, 315, 351, 982, 1018, 315, 351, 982, 1019, 315, 351, 982, 351, 983, 350, 982, 352, 981, 1019, 314, 353, 980, 353, 980, 352, 1982, // 352, 10310, 1028, 304, 362, 972, 1027, 306, 361, 973, 1026, 307, 1026, 309, 1023, 309, 1023, 311};
Signal captured with 180 edges
Wykres tego przebiegu ma postać
Wielkości wynikające z RAW data:
- długość impulsu synchronizacji ok 10030 us
- dł. podstawowa impulsu danych coś ok 333 us
- dł drugiego impulsu danych ok 1000 us
- stosunek czasów 1 i 0 to 3:1 (lub 1:3 bo nie wiem co jest zerem a co jedynką)
- stosunek impulsu synchronizacji do impulsu podstawowego ok 30
Tak na oko ten kod niczym specjalnym się nie wyróżnia poza jedną nietypową rzeczą - na końcu sygnału pojawia się znak o podwójnej długości dłuższego czasu danych (ok 2000 us). Ale poza tym pełen standard.
- stosunek impulsu synchronizacji do impulsu podstawowego ok 30
Tak na oko ten kod niczym specjalnym się nie wyróżnia poza jedną nietypową rzeczą - na końcu sygnału pojawia się znak o podwójnej długości dłuższego czasu danych (ok 2000 us). Ale poza tym pełen standard.
Jest to raczej przebieg nieodwrócony i kodem dzwonka jest najprawdopodobniej
1010 1111 0011 0101 0000 100D S
gdzie D oznacza długi impuls podobny do 0 ale o czasie 2000 us
a S impuls synchronizacji o czasie 10000 us.
Jak dla mnie jest to na zwykły 24 bitowy kod stały z zepsutym (powiększonym 2x ) ostatnim impulsem zera oznaczającym koniec kodu. No to będzie chyba mały problem.
Zastosuję najpierw metodę brute force - wyślę do dzwonka to co wydaje się być jego kodem. Na końcu monitora wszystkoczytającego jest mały fragment programu wysyłającego odebrane dane. Na tej podstawie stworzyłem swój własny programowy "przycisk dzwonka" wysyłający odczytany wcześniej kod.
int timings[] = { 350, 1982, 353, 10307, 1032, 303, 363, 971,
1024, 312, 356, 977, 1022, 312, 957, 377,
1019, 315, 1018, 314, 354, 980, 353, 979,
1020, 314, 1019, 316, 352, 980, 1019, 314,
353, 979, 1020, 316, 351, 982, 351, 982, 352,
981, 351, 982, 1018, 316, 351, 981, 352, 981
};
int edges = 49;
#define led 13
void setup() {
Serial.begin(115200);
pinMode(led, OUTPUT);
digitalWrite(led, LOW);
}
void loop() {
Serial.print("send data");
int licz = 15;
for (int k = 0; k <= licz; k++) {
boolean high = false;
for (int i = 0; i <= edges; i++)
{
if (high) {
digitalWrite(led, LOW);
high = false;
}
else {
digitalWrite(led, HIGH);
high = true;
}
delayMicroseconds(timings[i]);
}
}
digitalWrite(led, LOW);
Serial.println("...sent");
delay(15000);
}
W tablicy timings[] zawarte jest 50 kolejnych sygnałów powtarzających się cyklicznie w odebranym kodzie. Pomny doświadczeń z poprzednim dzwonkiem dałem na początek bardzo dużą liczbę powtórzeń - 30 razy (zmienna "licz"). Doświadczalnie ustaliłem potem, że liczba 15 powtórzeń gwarantuje pewność zadziałania dzwonka
Kod zadziałał prawie natychmiast - musiałem tylko jedną daną z tabeli sygnałów z początku przesunąć na koniec. Tym sposobem "odwróciłem" fazę nadawanego sygnału bo pierwotna była zła.
Niestety wysyłanie do dzwonka 'standardowych" kodów biblioteką rc-switch.h zakończyło sie niepowodzeniem. Urządzenie nie reaguje na żaden kod o identycznych lub zbliżonych parametrach. A szkoda bo konstrukcyjnie i estetycznie jest to najładniej wykonany dzwonek
Trzeci dzwonek mogę połowicznie uznać za pokonany. Nie ma żadnego problemy by uruchamiać dzwonek powyższym fragmentem programu. Co więcej program ten mogę stosować dla wszystkich nietypowych urządzeń zmieniając jedynie zawartość tablicy kodów. Nie umiem niestety prawidłowo zdekodować kodu nadawanego przez przycisk w taki sposób by dało się to łatwo zaprogramować w programie Routera 433. A więc remis 1:1
Przydatne linki
http://pastebin.com/5YgMbh2u //wszystkoczytający monitor
https://www.reddit.com/r/arduino/comments/2pgznb/capturing_rf_signals_without_sdr_hardware/
jakiś ciąg dalszy pewnie wystąpi ale czy będzie on dotyczył łamania kodów ? sie zobaczy
Kod zadziałał prawie natychmiast - musiałem tylko jedną daną z tabeli sygnałów z początku przesunąć na koniec. Tym sposobem "odwróciłem" fazę nadawanego sygnału bo pierwotna była zła.
Niestety wysyłanie do dzwonka 'standardowych" kodów biblioteką rc-switch.h zakończyło sie niepowodzeniem. Urządzenie nie reaguje na żaden kod o identycznych lub zbliżonych parametrach. A szkoda bo konstrukcyjnie i estetycznie jest to najładniej wykonany dzwonek
Trzeci dzwonek mogę połowicznie uznać za pokonany. Nie ma żadnego problemy by uruchamiać dzwonek powyższym fragmentem programu. Co więcej program ten mogę stosować dla wszystkich nietypowych urządzeń zmieniając jedynie zawartość tablicy kodów. Nie umiem niestety prawidłowo zdekodować kodu nadawanego przez przycisk w taki sposób by dało się to łatwo zaprogramować w programie Routera 433. A więc remis 1:1
Przydatne linki
http://pastebin.com/5YgMbh2u //wszystkoczytający monitor
https://www.reddit.com/r/arduino/comments/2pgznb/capturing_rf_signals_without_sdr_hardware/
jakiś ciąg dalszy pewnie wystąpi ale czy będzie on dotyczył łamania kodów ? sie zobaczy
120
ale który pin do nadajnika? Ledem wysyłasz kody?
OdpowiedzUsuńWitam w szkicu jest polecenie PIND arduino wyrzuca błąd co powinienem zrobić z tym faktem. Szukałem ale brak wyników
OdpowiedzUsuńtu wstawiasz nazwę portu którym odbierasz sygnał na swoim mikrokontrolerze
UsuńJa dla ESP8266 wstawiłem tu digitalRead(12)
tu masz ten kod dla Arduino
Usuńhttps://forum.arduino.cc/t/tchibo-wetterstation-433-mhz-dekodierung-mal-ganz-einfach/133637
W jaki sposób zamienić RAW data na kod binarny?
OdpowiedzUsuńjuż nie pamiętam jak to robiłem - może jest gdzieś w innych wpisach
UsuńNajłatwiej wstawić program czytający RAW znanego kodu i zobaczyć jak zakodowane są "0" i "1"