=====Codeanalyse eines Pool-Thermometers===== Marke: TFA Dostmann/Wertheim MODEL NO. KW-9043 {{image url="images/poolTempPhoto.jpg" alt=""}} Das Thermometer sendet auf 433 MHz mit OOK. Ich habe einen DVB-T-Stick verwendet um die Signale ins Basisband zu demodulieren und habe mir den Rest dann in Octave angeschaut. ==a==Symbol-Kodierung==a== Wenn man sich eine Zeitreihe anschaut, dann sieht man, dass es 3 Symbole gibt. Ein 0-, ein 1- und ein Sync-Symbol Ein Symbol besteht immer aus einem ca. 207 µs breiten positiven Puls gefolgt von einer variablen Pause. Die Pause entscheidet darüber, um welches Symbol es sich handelt. {{image url="images/poolTempSymbols.png" alt=""}} Gemessene Werte: 0-Symbol HI 0.207 ms LO 2.258 ms 1-Symbol HI 0.207 ms LO 4.825 ms Sync-Symbol HI 0.207 ms LO 9.811 ms ==a==Informations-Kodierung==a== Da die Symbole nun bekannt sind, kann man also eine Sequenz von Symbolen auf einer [[AbstraktionsEbenen Abstraktionsebene]] höher untersuchen. Ich habe die Sequenzen rausgesucht, die zwischen zwei Sync liegen und habe die dazu immer die Temperatur aufgeschrieben, sobald sich diese geändert hat. Sequenz A bei 25,5 °C auf der Anzeige %%(matlab) seqA='1101100100100000111111110101' %% Sequenz B bei 25,8 °C auf der Anzeige %%(matlab) seqB='0010100100100001000000100101' %% Mir ist aufgefallen, dass die 9 Bits 16 bis 24, die Temperatur sein könnten. Man fängt bei Octave bei 1 (nicht bei 0!) an zu zählen. Man muss also die Bits 16 bis 24 in einen Integer-Wert wandeln. Ich mache das mit Octave, weil es schnell geht. Octave-Befehl %%(matlab) >> bin2dec(seqA(16:24)) ans = 255 >> bin2dec(seqB(16:24)) ans = 258 %% Tatsächlich die 9 Bits beinhalten die Temperatur. Man teilt den Wert noch durch 10 und hat dann die Temperatur. Octave-Befehl %%(matlab) >> bin2dec(seqA(16:24)) / 10 ans = 25.5000 >> bin2dec(seqB(16:24)) / 10 ans = 25.8000 %% Die Daten sind also unverschlüsselt und in einem sehr überschaubaren Format. Vielleicht möchte jemand die anderen Bits herausfinden. ---- Siehe auch {{backlinks}}