Forum: Mikrocontroller und Digitale Elektronik Kodierungsproblem


von Marcel D. (Gast)


Lesenswert?

Hallo Leute,

Ich glaube zwar nicht das dass hier das passende Forum ist aber ich 
frage trotzdem mal.

Ich habe mir unlängst einige günstige Wettersensoren gekauft die auf 
433mhz senden. Wie ihr wisst ist das band ja ziemlich überfüllt. Ich 
möchte diese nun möglichst zuverlässig auslesen.

Was ich bereits entschlüsseln konnte waren alle "wetterparameter", was 
ich nicht hinbekommen habe ist die prüfsumme die gesandt wird.

hat einer von euch hierzu eine idee?

eine liste von beispiel-readings findet ihr hier:
https://gist.github.com/mdorenka/b62185767a4d0071b243

viele grüße und vielen dank,
marcel

von Karl H. (kbuchegg)


Lesenswert?

Ich kopier das mal hier ins Forum. Dann braucht man nicht dauernd 
externe Links verfolgen
1
READINGS 
2
========      
3
       Temp = Temperature displayed on Sensor
4
         Hu = Humidity displayed on Sensor
5
 
6
SENT BY SENSOR
7
==============
8
Rnd1 + Rnd2 = Random assigned device id
9
         CH = Channel set by switch on Sensor
10
          B = Battery state ( 1 = critical )
11
          S = Trigger ( 1 = manually)
12
       TEMP = Temperature sent by Sensor multiplied by 10, as 2 complement in reverse order
13
        HUM = Humidity sent by Sensor added with 156 and sent in reverse order
14
         CS = Unknown Checksum algorithm
15
 
16
Temp  Hu Rnd1 CH Rnd2 B S TEMP         HUM      CS
17
         0123 45 6789 0 1 234567890123 45678901 2345
18
-06,7 82 1110 01 1101 0 0 101111011111 01110111 0101
19
-06,4 81 1110 01 1101 0 0 000000111111 10110111 1011
20
-05,9 80 1110 01 1101 0 0 101000111111 00110111 1000
21
-05,9 40 0000 01 0001 0 0 101000111111 00100011 0010
22
-05,5 80 1110 01 1101 0 0 100100111111 00110111 1010
23
-04,4 79 1110 01 1101 0 0 001010111111 11010111 0000
24
-04,3 40 0000 01 0001 0 0 101010111111 00100011 1010
25
-03,6 78 1110 01 1101 0 0 001110111111 01010111 1110
26
-02,6 37 0000 01 0001 0 0 011001111111 10000011 0010
27
-01,8 78 1110 01 1101 0 0 011101111111 01010111 0101
28
-00,8 80 1110 01 1101 0 0 000111111111 00110111 1110
29
+00,4 84 1110 01 1101 0 0 001000000000 00001111 0101
30
+01,0 34 0000 01 0001 0 0 011011111111 01111101 1000
31
+02,0 90 1110 01 1101 0 0 001010000000 01101111 1000
32
+02,6 90 1110 01 1101 0 0 010110000000 11101111 0001
33
+03,8 79 1110 01 1101 0 1 011001000000 11010111 0000
34
+04,9 62 1110 01 1101 0 0 100011000000 01011011 0100
35
+05,4 60 1110 01 1101 0 0 011011000000 00011011 1010
36
+06,7 52 1110 01 1101 0 0 110000100000 00001011 1101
37
+08,5 50 1110 01 1101 0 0 101010100000 01110011 1101
38
+09,2 48 1110 01 1101 0 0 001110100000 00110011 0000
39
+10,1 49 1110 01 1101 0 0 101001100000 10110011 1101
40
+11,2 49 1110 01 1101 0 0 000011100000 10110011 1110
41
+11,4 51 1110 01 1101 0 1 010011100000 11110011 1100
42
+15,1 51 1110 01 1101 0 0 111010010000 11110011 0100
43
+15,6 54 1110 01 1101 0 1 001110010000 10001011 0100
44
+21,2 65 1111 01 0010 0 1 110010110000 00111011 1100
45
+21,8 67 1111 01 0010 0 1 010110110000 11111011 1011
46
+22,1 54 1110 01 1101 0 0 101110110000 01001011 0000
47
+22,1 54 1110 01 1101 0 1 101110110000 01001011 0001
48
+22,1 65 1111 01 0010 1 1 101110110000 10111011 0100
49
+22,1 66 1111 01 0010 1 0 101110110000 01111011 1101
50
+22,2 54 1110 01 1101 0 1 011110110000 01001011 1001
51
+22,2 55 1110 01 1101 0 1 011110110000 11001011 0101
52
+22,2 55 1110 01 1101 0 1 011110110000 11001011 0101
53
+22,2 56 1110 01 1101 0 1 011110110000 00101011 1101
54
+22,3 54 1110 01 1101 0 0 111110110000 01001011 0100
55
+22,3 55 1110 01 1101 0 0 111110110000 11001011 1100
56
+22,4 54 1110 01 1101 0 0 000001110000 01001011 0010
57
+22,4 54 1110 01 1101 0 0 000001110000 01001011 0010
58
+22,4 56 1110 01 1101 0 0 000001110000 00101011 0110
59
+22,4 56 1110 01 1101 0 1 000001110000 00101011 0111
60
+22,5 55 1110 01 1101 0 1 100001110000 11001011 0111
61
+22,7 56 1110 01 1101 0 0 110001110000 00101011 1001
62
+22,7 56 1110 01 1101 0 1 110001110000 00101011 1000
63
+22,9 70 1110 01 1101 0 1 101001110000 01010111 0101
64
+23,0 70 1110 01 1101 0 0 011001110000 01000111 1101
65
+23,2 53 1110 01 1100 0 0 000101110000 10001011 1001
66
+23,2 53 1110 01 1100 0 1 000101110000 10001011 1000
67
+24,2 54 1110 01 1101 0 0 010011110000 01001011 1110
68
+24,2 54 1110 01 1101 0 1 010011110000 01001011 1111
69
+25,5 48 1110 01 1101 0 0 111111110000 00110011 1011
70
+25,7 48 1110 01 1101 0 0 100000001000 00110011 1000
71
+25,8 48 1110 01 1101 0 0 010000001000 00110011 0100
72
+25,9 49 1110 01 1101 0 0 110000001000 10110011 0010
73
+26,3 50 1110 01 1101 0 0 111000001000 01110011 1001
74
+26,6 51 1110 01 1101 0 0 010100001000 11110011 1011
75
+26,7 52 1110 01 1101 0 0 110100001000 00001011 0000
76
+26,8 52 1110 01 1101 0 0 001100001000 00001011 1000

von Karl H. (kbuchegg)


Lesenswert?

> Ich habe mir unlängst einige günstige Wettersensoren gekauft

Hast du da irgendeine Typbezeichnung?

9 Bit ... das kommt mir seltsam vor.
Auf der anderen Seite sind deine Datensätze 33 Bits lang. Ebenfalls kein 
Vielfaches von 8.
Die reinen Nutzdaten sind 29 Bit. Auch kein Vielfaches von 8.

Irgendwie seltsam das ganze Protokoll.

von Marcel D. (Gast)


Lesenswert?

ne leider nicht.
der prozessor/oder was auch immer ist auch ein COB


9 bit 29 bit? huh? nene du liest das falsch :)
vorne steht das was auf dem display angezeigt wird (also temperatur und 
feuchtigkeit)

der reist ist die komplette übertragung, d.h. insgesammt 36 bits (32 
daten + 4 prüf)

von Karl H. (kbuchegg)


Lesenswert?

Marcel D. schrieb:

> 9 bit 29 bit? huh? nene du liest das falsch :)
> vorne steht das was auf dem display angezeigt wird (also temperatur und
> feuchtigkeit)

Schon klar.
Aber hier
1
Temp  Hu Rnd1 CH Rnd2 B S TEMP         HUM      CS
2
         0123 45 6789 0 1 234567890123 45678901 2345
3
                    ^            ^          ^

das sind doch ... ähm, mea culpa, das sind 10-er unterteilungen. Ich 
habs als Bitzahlen pro Byte gelesen.

OK. Checksummen sind normalerweise Byte-basiert. Bei deinen 4-Bit 
CHecksummen wäre dann Nibble-basiert naheliegend. Teil das ganze doch 
mal in 8-er Einheiten auf, so wie du die Bytes vom Empfänger rein 
kriegst.

Wenn ich raten müsste, dann ist das entweder irgendwas CRC-basiertes 
oder irgendwas ganz einfaches, wie zb alle Nibbles aller Bytes 
miteinander X-or verknüpft oder aufsummiert

: Bearbeitet durch User
von Marcel D. (Gast)


Lesenswert?

xor habe ich bereits probiert

auch das weglassen der adresse, des kanals und der statusinformationen 
(also nur die 5 nibbles für temperatur und humidity) passen bei xor 
nicht.

von Marcel D. (Gast)


Lesenswert?

für alle die es interessiert

die prüfsumme ergibt sich so

man nimmt alle nibbles bis auf das letzte und invertiert die 
reihenfolge.
man addiert diese
man verUNDet das ganze mit 0xf
der wert muss gleich dem invertierten letzten nibble sein.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.