Forum: Haus & Smart Home Wetterstation, Außensensor TX205 von Technoline auslesen, CRC-verfahren gesucht


von Rainer M. (Firma: privat) (rainer_1)


Angehängte Dateien:

Lesenswert?

Hallo,
ich habe vor kurzem eine Wetterstation von Technoline samt Außensensor 
bei Aldi erstanden. Funktioniert prima, der Außensensor WT 205 D-TH 
funkt auf 433Mhz alle 60s die Temperatur und die Luftfeuchte an die 
Basisstation.
Nun habe ich mit einem Arduino-Uno und einem Superhet-Empfänger RBX6 die 
Signale des WT 205 mitgeschnitten und decodiert. Das 
Modulationsverfahren ist ASK und mittels UNO leicht zu decodieren.
Was ich bereits habe:

40 Bit werden übertragen, MSB zuerst nach dem Start/Sync-Bit
Die Message wird 6x gesendet.

Aufbau der Message:
MSB= 39 
LSB= 0

AAAAAAAA  BBBBBBBB  CCCCCCCCCCCC  DDDDDDDD  EEEE
39     32 31     24 23         12 11     4  3  0 bit

Legende:
A = Ident-Nr (nach Reset oder Batteriewechsel neu generiert) -> id(HEX)
B = Checksum ??? -> CRC (HEX)
C = Temperatur in Zehntel Grad Fahrenheit +900 (12bit Integer, unsigned) 
->cT (bereits in Grad Celsius umgerechnet)
D = Luftfeuchte in %, BCD-codiert (= Hexdarstellung, 8Bit binary) 
->H(HEX)
E = Channel-Nr (1-3) ->CH

Was mir noch fehlt, ist die Berechnung des CRC (bit24-31, B), da ich 
damit noch keinerlei Erfahrung habe.
In der angefügten Datei TX205_Technoline.doc habe ich mehrere Datensätze 
dargestellt, um dem CRC auf die Schliche zu kommen.
Außerdem füge ich noch den Arduino-Sketch bei.
Bitte um Hinweise, wenn jemand einen Lösungsweg erkennt.
Grüße
Rainer

von Georg A. (georga)


Lesenswert?

> Bitte um Hinweise, wenn jemand einen Lösungsweg erkennt.

Zum finden unbekannter CRC-Eigenschaften kann ich nur reveng empfehlen:

http://reveng.sourceforge.net/

Braucht 3 Samplestreams und bekommt damit Polynom, Startwert etc. raus. 
Bei 8Bit sollte das in 0,nix gehen.

Edit: Hier habe ich das etwas näher beschrieben (die reveng-Doku ist 
etwas schwierig):

Beitrag "Tip: Reverse-Engineering von CRCs"

: Bearbeitet durch User
von GEKU (Gast)


Lesenswert?

Nicht nur das Polynom ist maßgebend,  sondern auch die Reihenfolge der 
Bits sowie ein eventueller Offset. Da gibt es sehr viele 
Kombinationsmöglichkeiten.

https://crccalc.com

von Rainer M. (Firma: privat) (rainer_1)


Lesenswert?

@georga
Danke für die beiden Links, vor allem der Link zu deinem Beitrag 
enthielt einen weiteren Link zu einem Vortrag, welcher sehr anschaulich 
das reverse-CRC-Finding beschreibt 
(https://media.ccc.de/v/eh16-27-how_to_reverese_crcs).
Hat mir sehr weitergeholfen, bin schon am tüfteln...
Melde mich wieder und erstatte Bericht.

@GEKU(Gast)
Danke für den Hinweis, kann ich bestimmt gebrauchen, wenn ich etwas 
weiter bin.

Versuche gerade herauszufinden, welche Bits der B-Serie wirklich 
CRC-Bits sind oder noch Teil der Message darstellen. Datenaufzeichnung 
läuft...

Grüße
Rainer

von GEKU (Gast)


Lesenswert?

Rainer M. schrieb:
> Versuche gerade herauszufinden, welche Bits der B-Serie wirklich
> CRC-Bits sind oder noch Teil der Message darstellen. Datenaufzeichnung
> läuft...

Wäre interessant  die Daten mit auf 0 gesetzten B-Bits an die 
Wetterstation zu senden.

Sollte die B-Bits ein CRC sein, dann wird die Wetterstation die Annahme 
der Daten verweigern.

Aber bitte vorher mit gültigen B-Bits aus dem Sniff probieren um andere 
Probleme auszuschließen, wenn die Daten nicht übernommen werden sollten 
(z B. Modulation)

von Wolfgang (Gast)


Lesenswert?

Siehe auch:
Sensor für Wetterstation von Technoline (ALDI) decodieren, Sensor TX 205 
D-TH
https://forum.arduino.cc/index.php?topic=634469.0

von Georg A. (georga)


Lesenswert?

Rainer M. schrieb:
> Versuche gerade herauszufinden, welche Bits der B-Serie wirklich
> CRC-Bits sind oder noch Teil der Message darstellen. Datenaufzeichnung
> läuft...

Ich hab mir aber gerade mal dein doc angeschaut und habe irgendwie 
Zweifel, dass das überhaupt eine CRC ist. Dazu ist doch das hintere 
Nibble immer nur 0, 1 oder 2, das ist kein CRC-Verhalten. Ausserdem ist 
der Wert bei aufeinanderfolgenden Messwerten verdächtig häufig ebenfalls 
sequentiell. Mir sieht das eher nach einer ganz gewöhnlichen Summierung 
(zB. der Nibbles) aus.

von Rainer M. (Firma: privat) (rainer_1)


Lesenswert?

@georga
Danke, dass du auch über mein Problem nachdenkst, ähnliches hatte ich 
auch schon vermutet.
Das untere Nibble der B-Serie (bit 0-3) könnten noch weitere Statusbits 
sein, wofür auch immer (Batteriezustand, Starker Anstieg oder Abfall der 
Temperatur oder Feuchte...etc.), da sie relativ statisch sind.
Die bits 4-7 (oberes Nibble) von B könnten tatsächlich eine 
Aufsummierung der Nibbles der Message sein. Werde mal probehalber in 
meinen sketch eine Berechnung mit Summenbildung einbauen und mit 
verschiedenen Nibbles testen.
Danke für deine Denkanstösse, melde mich wieder...
Grüße
Rainer

von Rainer M. (Firma: privat) (rainer_1)


Lesenswert?

@Wolfgang
Danke für deine Mühe, diesen Thread habe ich im Arduino-Forum eröffnet, 
bis jetzt habe ich von dort aber keine Rückmeldung.
Vielleicht kommt ja noch etwas...
Grüße
Rainer

von Rainer M. (Firma: privat) (rainer_1)


Lesenswert?

@GEKU
Guter Gedanke, habe sogar einen 433Mhz-Sender, direkt mit TTL-Pegel 
ansteuerbar. Nutze ich zum Schalten meiner Funksteckdosen von Conrad, 
klappt prima.
Werde diesen Gedanken mal im Hinterkopf behalten, sozusagen als 
Abschlusstest, wenn ich den Prüfalgorithmus ergründet habe.

Grüße
Rainer

von Rainer M. (Firma: privat) (rainer_1)


Lesenswert?

Hallo, hier meine neuesten Erkenntnisse:

Eine Aufsummierung der Nibbles brachte keinen Erfolg bis auf einige 
zufällige Übereinstimmungen. Habe einige Kombinationen getestet:
alle Nibbles der Message,
alle ohne das CRC-Nibble(oberes Nibble von B),
ohne CRC und id,
ohne CRC und id und CH,
dann alle Fälle nochmal mit Invertierung des Ergebnisses (^0xF).

Bleibt mir noch der Fall eines echten(üblichen) CRC mit der Division 
durch ein Polynom nten Grades (siehe Wikipedia 
[[https://de.wikipedia.org/wiki/Zyklische_Redundanzpr%C3%BCfung]]) . Da 
ich hier weder das Polynom noch den Anfangswert und alle sonstigen 
Randbedingungen kenne, ist das der Fall, wo ich noch etwas Hilfe 
benötige oder Intuition, ev. hilft ja noch die Mathematik dahinter, bin 
noch am recherchieren und tüfteln.

Grundsätzlich stellt sich die Frage, welche Datenbits überhaupt in die 
Berechnung eingehen:
-alle mit oder ohne CRC-Bits,
-muss für die id und die Channel-Nummer überhaupt ein CRC geprüft 
werden, da bei falscher CH-Nr. der Datenstrom sowieso ungültig ist.
-welche Funktion hat die id überhaupt, da sie bei Batteriewechsel 
zufällig bestimmt wird

Werde mal im FHEM-Forum anfragen, ob dort dieser Sensor und das 
Protokoll bekannt sind.

Wer noch Ideen beisteuern kann, bitte melden !

Ach ja, die Grundfunktion Erkennung der übertragenen Daten wie 
Temperatur und Feuchte leistet mein Programm ja bereits, wer also gute 
Empfangsverhältnisse hat, kann die Werte schon weiterverwenden, die 
Prüfung mit dem CRC wäre natürlich das Sahnehäubchen...

Grüße
Rainer

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.