mikrocontroller.net

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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
Autor: Rainer M. (Firma: privat) (rainer_1)
Datum:
Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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

Autor: Georg A. (georga)
Datum:

Bewertung
0 lesenswert
nicht 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
Autor: GEKU (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rainer M. (Firma: privat) (rainer_1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: GEKU (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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)

Autor: Wolfgang (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Georg A. (georga)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Rainer M. (Firma: privat) (rainer_1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rainer M. (Firma: privat) (rainer_1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rainer M. (Firma: privat) (rainer_1)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rainer M. (Firma: privat) (rainer_1)
Datum:

Bewertung
0 lesenswert
nicht 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

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.