Wetterstation TCM287717

Hallo liebe Community,

als erstes möchte ich mich ein wenig vorstellen, da ich ja neu bin hier. Ich programmiere seit etwa 5 Jahren so als Hobby vor mich hin, keine schweren Sprachen sondern eher leichte (PureBasic, Java, ...), mache es weder als Beruf noch habs in der Schule gehabt. Seit etwa 2 Monaten darf ich einen Arduino Uno R3 mein Eigen nennen, und hab damit schon so manche Durchbrüche und Niederlagen erlebt, aber wenn man zu Boden geht steht man bekanntlich wieder auf ;-). Leider ist dieses Board mein erster Schritt Richtung Mikroelektronik, was hoffentlich zu Nachsicht eurerseits bei Anfängerfehlern führt :-). Naja des wars vorerst mit dem Vorstellen und ich hoffe dass ich hier viel Hilfe und Tipps mitnehmen kann und mein Wissen euch auch weiterhilft.

So nun zur Sache:

Ich war vor einigen Tagen im Supermarkt wo mir ein Set mit Wetterstation und Aussensensor sofort aufgefallen ist. Genauer hingeschaut lief es auf der Frequenz 433Mhz, was aber im Nachhinein unwichtig war aber dazu gleich mehr. Naja hab dann einfach 2 Stück gekauft was bei 30 Euro pro Set nicht die Welt war. Zuhause angekommen erstmal den 433 Mhz Empfänger gesucht und nicht gefunden. Toll was nun? Bestellen und warten? Niemals! Also eine der Basisstationen zerlegt und gleich von dem modularen Aufbau begeistert gewesen. 433 Mhz Empfänger rausgelötet und gleich ran an die Soundkarte zum analysieren. Und nach einigen Minuten, als ich schon dachte ich hab den Empfänger geschossen weil er ja vll weniger spannung braucht, ein dicker Block in Audacity der fast 1 Sekunde lang war. BINGO!

Und da ich euch nicht vorenthalten will was dabei rauskahm hier das Ergebnis:

Wie man gleich sieht sind LOW Daten und HIGH Seperator. Wie man leider im Bild nicht sieht sind die ganz langen Daten 8ms die mittleren 4ms und die kurzen 2ms. Jetzt hört das Wissen auf und das Rätseln fängt an :D

Am Anfang sind immer 9 mal 8ms Am Ende sind immer 2 mal 8ms Im Paket selbst sind in regelmäßigen Abständen ebenfalls immer 2 mal 8ms

Zwischen den 8ms ist 5 oder 6 mal(weiß es grad nicht genau) die selbe Folge an 2ms und 4ms, was mich vermuten ließ dass die 8ms die eigentlichen Daten trennt. Also einfach mal die Daten zwischen den Trennbits(8ms+8ms) als 4ms HIGH und 2ms LOW Deklariert, und folgende Daten bekommen:

000101110101011110101101000100010100101001

Eins vorneweg ich hatte mit allem zufällig recht.

Was ich rausbekommen habe kann ich ja schonmal offenlegen

| 8 bit | 2 bit | 2 bit | 2 bit | 12 bit | 8 bit | 2 bit | 2 bit | 4 bit | | - | - | - | - | - | - | - | - | - | | 0001 0111 | 01 | 01 | 01 | 1110 1011 0100 | 0100 0101 | 00 | 10 | 1001 | | Rand ID | Batterie | KA | Channel | Temp | Hygro | Sync | KA | Prüfsumme |

Rand ID (8bit): Dies bezeichnet eine Bitfolge die sich nie ändert im laufenden Betrieb. Sie ändert sich nur wenn man den Sensor Resetet oder eben die Batterie wechelst. Da ich sie einfach berechne wie später im Hygro zu sehen sein wird, bekomm ich da auch ein Byte 0001 0111 Hier vertausche ich die beiden 4er Paare 0111 0001 = 113 und schon haben wir ein Byte was uns die ID des Senders verrät.

Batterie (2bit): Über diese 2 Bits kann ich nur vermuten, denn sie bleiben bei allen 3 Sendern gleich. Da aber an der Basisstation noch keiner nach Batterie verlangt kann ich nur spekulieren. Aber ich denke mal 01 bedeuted Batterie voll und 00 dass sie bald leer ist.

KA1 (2bit): Hier hab ich noch keine Ahnung. Sie ändern sich in meinen Augen noch willkürlich.

Channel (2bit): Diese beiden Bits sind der Channel den man im Sender manuell einstellen kann. Es ist ein ganz einfacher Schalter mit 3 Einraststellen: CH1 CH2 und CH3. 01 = 1 Hier muss man nur die beiden Bits umrechnen und 1 addieren. 00 = 0 + 1 = 1 = CH1 01 = 1 + 1 = 2 = CH2 10 = 2 + 1 = 3 = CH3 Schon hat man was man will.

Temp (12bit): Diese 12 Bits sind wohl die schwersten zum verstehen gewesen und ihr werden gleich verstehen warum. Als allererstes unterteilt man die 12 Bits in 4 mal 4 Bits: 1110 1011 0100 Und kehrt ihre Positionen um: 0100 1011 1110 Rechnet diese 12 Bits um: 0100 1011 1110 = 1214 Jetzt kommt wahrscheinlich ein kleiner Fehler aber die Abweichung ist max. 0.1°C und somit tollerierbar. Man rechnet das Ergebnis durch 18 und subtrahiert 67,8. 1214/18 = 67 - 67,8 = -0,8 Somit haben wir die Temperatur

Feuchtigkeit (8 bit): Die Feuchtigkeit errechnet sich relativ einfach und wird mehr oder weniger in Klartext ausgegeben. Man nimmt hier wieder die 8 Bits und macht 2 4er Gruppen. 0100 0101 Und tauscht sie: 0101 0100 und rechnet es in ein Byte um: 0101 0100 = 84 Und Voila schon haben wir die r.H.

Sync (2bit): Hier eine kleine erklärung: Der Sender hat eine Taste um manuell zu senden. Wird dieser gedrückt wird nich nur gesendet sondern es wird auch ein Bit verändert gesendet. 00 = auto Wie man des berechnet is mir ned klar aber muss ich ja auch nicht. reicht ja wenn ich weiß was was ist :-). 00 = automatisch vom Sender gesendet. 10 = manuell per Knopfdruck gesendet.

KA2 (2bit): Über diese 2 Bits weiß ich auch noch nicht mehr. Ebenfalls am wechseln aber es bleibt immer ne Zeit lang auf einem Wert. Wie lang immer kann ich noch nicht sagen falls es überhaupt was mit Zeit zu tun hat.

Prüfsumme (4bit): Ich bin mir weder sicher ob die Prüfsumme nur aus 4 Bits besteht oder ob sie überhaupt hier steht. Das es eine geben muss bin ich mir sicher denn sonst hätt ich auf der Basisstation schon sehr seltsame Werte stehen haben müssen, da ich doch schon am Pc fehlerhafte Datenpakete erhalten habe die die Temp oder r.H. betroffen haben. Ich hoffe dass irgendwer das selbe Problem hat und man zusammenarbeiten könnte. 4 Augen sehen ja bekanntlich mehr als nur 2.

So, wie ich das ganze aufgeschlüsselt habe lasse ich vorerst mal weg. Aber falls Interesse besteht und ich vll ja gut erklären kann, schreibe ich für eine nette Community gerne mein Vorgehen.

Somit schließe ich meinen Eingangs-Post ab und sage, MFG R4z0r1989

Hallo R4z0r1989, mein Glückwunsch, dass du das geknackt hast. Erstaunlich, wie ähnlich die Kodierungen sind, schau mal hier: http://arduino.cc/forum/index.php/topic,119739.msg1037310.html#msg1037310. Wo gab's diese Wetterstation? Gruß Reinhard

Erstmal danke für den Glückwunsch. Du glaubst gar nicht wieviele nerven des gekostet hat, oder vll ja doch :-) Ich würde mal fast behaupten dass das exakt das Protokoll ist welches ich hier am rumsenden habe. Sollte ich mich fast mal mit ihm zusammentun um mehr in erfahrung zu bringen ;-) Die gibts momentan bei Tchibo. Im Onlineshop sind sie schon vergriffen aber hier bei uns im "Tengelma**" gibts noch welche. Was ich noch anmerken wollte: Ich bin über die leistung und störungsfreiheit von dem empfänger doch sehr überrascht.

http://www.tchibo.de/Funk-Wetterstation-p400022933.html Die ist es :-)

Edit1: Ich muss doch leider sagen dass es scheinbar doch nicht die selbe protokolle sind. der Channel kommt bei ihm 4 bits später. Aber was mir bei ihm auf gefallen ist, ist dass sich seine "prüfzahl" bei Channelveränderung nicht ändert. weil sich irgendwie sonst gar nichts ändert. (Edit1 bitte nicht beachten)

Edit2: Hab nochmal verglichen und festgestellt es sind doch die selbe Protokolle. Wenn du noch an der Sache dran bist würde ich gerne mit dir zusammenarbeiten um das Protokoll doch noch zu knacken.