Forum: Haus & Smart Home Reverse Engineering Sensorprotokoll TFA-Dorstmann


von Jonathan H. (s_h)


Lesenswert?

Einen schönen Guten Abend Zusammen!

Ich versuche gerade das Netzwerkprotokoll eines Smarthome-Systems zu 
analysieren. Das System kommt von der Firma TFA-Dorstmann und wird unter 
dem Label WEATHERHUB vertrieben. Es bindet Funksensoren (Temperatur, 
Hygrometer, ...) mit 433 MHz Funksendern an ein Ethernetfähiges Gateway 
an, welches die gemessenen Werte dann an den Dienst MobileAlerts sendet.

Nun ist die einzige Möglichkeit die Daten dort abzurufen eine furchtbare 
Smartphone App, die weder Graphen zeichnen kann noch die Daten 
exportieren lässt. Es gibt also keine Möglichkeit die Daten lokal zu 
speichern und das System ohne die Cloud zu benutzen.

Ich habe jetzt die Adresse, des Servers, an den das Gateway die Daten 
sendet im DNS auf meinen Rechner gesetzt und dort einen Socket offen, 
der die Daten (zunächst uninterpretiert) entgegennimmt und dem Gateway 
den Empfang quittiert (sonst wechselt es in einen Fehlermodus und 
versucht eine erneute Übermittlung).

Da es im Netz noch nichts zu diesem Sensorgateway gibt, möchte ich, 
sobald fertig, meine Rechercheergebnisse und das Skript hier anhängen. 
Evtl. hilft es ja jemandem.


Nun zum Problem. Ich habe einige Readings von einem Temperatursensor 
aufgezeichnet, kann aber die Kodierung der Temperatur im Paket nicht 
erkennen.

Das Format der Readings sieht so aus:



ce 58 24 e5 b5 12 02 16 2c 14 62 8e 01 e7 80 46 00 43 1a
|  |           |  |                 |  |  |     |     |
|  |           |  |                 |  |  |     |     + evtl. Batterieindikator 
[len:1]
|  |           |  |                 |  |  |     + Temperatur des letzten Readings 
[len:2]
|  |           |  |                 |  |  + Aktuelle Temperatur (7.0°C) [len:2]
|  |           |  |                 |  + Sequenznr. (++ bei jedem Reading) [len:1]
|  |           |  |                 +-- ?
|  |           |  +-- Sensor-Seriennummer [len:6]
|  |           +-- Reading type (12=Temperatur) [len:1]
|  +-- Epoch als 32bit Ganzzahl in Big Endian Order [len:4]
+-- Nachrichtentyp (ce=Sensordaten) [len:1]

Falls die Zeilen umbrechen, hier in groß: http://pastebin.com/0nUygVBS

Die Temperatur, hier 7.0°C ist mit 0x8046 kodiert. 46h = 70d/10 = 7,0. 
Das geht aber nur, wenn die Temperatur unter 25,5°C liegt (dann ist das 
rechte Byte voll) und die Temperatur positiv ist.


Hier nun einige Readings mit Testwerten (Temperaturbytes in Klammern):

ce 58 24 e5 b5 12 02 16 2c 14 62 8e 01 e7 [ 80 46 ] 00 43 1a =   7,0 °C
ce 58 24 ec 4b 12 02 16 2c 14 62 8e 01 eb [ 00 4d ] 00 4c 1a =   7,7 °C
ce 58 24 ed f0 12 02 16 2c 14 62 8e 01 ec [ 80 a6 ] 00 4d 1a =  16,6 °C
ce 58 2b 1f cc 12 02 16 2c 14 62 8e 00 ab [ 47 6c ] 47 74 1a = -19,5 °C
ce 58 2b 2c fd 12 02 16 2c 14 62 8e 00 b3 [ 07 5b ] 87 5d 1a = -16,5 °C
ce 58 2b 54 8f 12 02 16 2c 14 62 8e 00 cb [ 47 38 ] 47 3e 1a = -20,0 °C
ce 58 2b 5b 25 12 02 16 2c 14 62 8e 00 cf [ 40 16 ] 87 52 1a =   2,2 °C

Es fällt auf:
a) Das erste Nibble des ersten Bytes ist immer 0h, 4h oder 8h.
b) Das zweite Nibble des ersten Bytes ist bei positiven Werten immer 0, 
bei negativen immer 7.

Ich finde aber die Kodierung nicht, die verwendet wurde um z. B. -20°C 
in 0x4738 zu packen) - oder ich bin schon Betriebsblind.

Jedenfalls bin ich um einen kurzen Tipp dankbar!


Grüße aus dem Süden!
Jonathan

von Hp M. (nachtmix)


Lesenswert?

Jonathan H. schrieb:
> Jedenfalls bin ich um einen kurzen Tipp dankbar!

Jonathan H. schrieb:
> Das System kommt von der Firma TFA-Dorstmann

Dann würde ich erst einmal dort fragen: http://www.tfa-dostmann.de

von Jonathan H. (s_h)


Lesenswert?

Leider keine Unterstützung von dort. Das System wurde auch von einer 
anderen Firma im Auftrag entwickelt, dort werden die Informationan aber 
freilich nicht ohne Zustimmung von TFA erteilt.

Viele Grüße
J.

von CodeKnacker (Gast)


Lesenswert?

Also für die positiven Werte sieht es doch
nach 12 bit hex in 0.1 Grad Schritten aus:

046 hex = 70 = 7,0C
04d hex = 77 = 7,7C
0a6 hex = 166 = 16,6C

Stimmt Dein Aufschrieb mit den negativen Werten?

ich würde im Zweierkomplement 12 bit so etwas erwarten:
000 hex =  0 = 0C
7ff hex = -1 = -0,1C  ????

Bei diesen Werten stimmt es:
7 5b hex = -165 = -16,5C
7 38 hex = -200 = -20,0C

nur die Zeile mit 19,5 stimmt nicht:
7 6c hex = -148 = -14.8C  oder
7 3d hex = -195 = -19,5C

von Poster (Gast)


Lesenswert?

Im FHEM Forum findet man da einiges zu.
Es gab sogar schon mal eine deutlich besser App dafür.
Aber da hatte der Hersteller was dagegen, bei jeden neuen Update der APP 
basteln die da wieder an der Übertragung rum um es den "Daten 
Fremdzugreifern" schwerer zu machen.
Deutlich besser währe es da wohl bei der Funkschnittstelle anzusetzen 
und das Gateway durch was eigenes zu ersetzen.
Ich meine aber das es das 866MHz Band ist.

von Poster (Gast)


Lesenswert?

Die meisten Infos findet man darüber aber mit dem Suchbegriff: 
MobileAlerts

von Held (Gast)


Lesenswert?

@Poster: da findet man aber keine Infos zum Protokoll.
über irgend eine Cloud Verbindung möchte es der TO ja eben nicht die 
Daten bekommen......

von Poster (Gast)


Lesenswert?

Ist schon einige Zeit her wo ich mir das mal angeschaut hatte, aber 
irgendwie kommt mir da das Problem des TS bekannt vor.
Vielleicht sind ja die Daten die von der Cloud zurückkommen ähnlich 
kodiert,
und darüber sollte sich da ja was finden lassen.

von Jonathan H. (s_h)


Lesenswert?

Guten Abend!

Erstmal danke für die hilfreichen Tipps!

Es ergab sich folgendes:

>ich würde im Zweierkomplement 12 bit so etwas erwarten

Jein, es ist schon sowas ähnliches. 12 Bit ZWK funktioniert (hatte 
selbst nur 16 Bit getestet), es fehlt aber durchgängig das Vorzeichen. 
Das 12 Bit von rechts ist immer low.

Es ist vermutlich ein 11 Bit-ZWK, denn das 11 Bit ist bei den negativen 
Werten immer 1. Bei Werten <1023d ist der Temperaturrange des Sensors ja 
auch noch gut abgedeckt. Wer auch immer auf die Idee kam das so zu 
machen. Nix mit Ockham's Knife.
1
80 46 =   7,0 °C = 1000 0000 0100 0110
2
00 4d =   7,7 °C = 0000 0000 0100 1101
3
80 a6 =  16,6 °C = 1000 0000 1010 0110
4
40 16 =   2,2 °C = 0100 0000 0001 0110
5
00 48 =   7,2 °C = 0000 0000 0100 1000
6
80 4b =   7,5 °C = 1000 0000 0100 1011
7
80 f8 =  24,8 °C = 1000 0000 1111 1000
8
00 4c =   7,6 °C = 0000 0000 0100 1100
9
47 6c = -14,8 °C = 0100 0111 0110 1100
10
07 5b = -16,5 °C = 0000 0111 0101 1011
11
47 38 = -20,0 °C = 0100 0111 0011 1000

Nun gibt es noch das vordere Nibble. Das ist sicherlich ein Flag. Da ist 
wechselnd das erste Bit, das zweite oder keines gesetzt. Einen 
Verwendungszeck kann ich aber keinen erkennen.

Fällt euch da aus der Erfahrung mit anderen Systemen was ein?


>Im FHEM Forum findet man da einiges zu.
Die Hardware kommt wohl vom Hersteller LaCrosse (OUI von der MAC ist 
auch LaCrosse), da findet sich viel zum Funkprotokoll, leider aber 
nichts für das Ethernetbasierte. Aus ersterem lässt es sich leider auch 
nicht ableiten, schon versucht.


>Vielleicht sind ja die Daten die von der Cloud zurückkommen ähnlich
kodiert
Schwer zu sagen, es gibt nur die App für den Zugriff auf die Cloud. Da 
habe ich als erstes angesetzt. Dort wird Certificate Pinning anhand der 
Serial benutzt, soll heißen, der App ein falsches Zertifikat 
unterzuschieben, selbst wenn ihm vertraut wird, funktionierte nicht. 
Also keine Trafficanalyse.

Ich hatte anfangs auch den Plan, die Daten aus der Cloud zu holen und zu 
verarbeiten, aber dann stellt der Hersteller mal den Dienst ein und es 
ist Schluss.


EDIT: Um das Chaos mit den Namen noch zu beseitigen:
Hardware-Hersteller ist La Crosse Technology LTD. Software-Hersteller 
ist die DATA INFORMATION SERVICES GmbH, die auch MobileAlerts betreibt 
(nicht nur für das eine Produkt). Vertrieb kommt von TFA Dorstmann, 
Geräte sind aber auch mit TFA-Logo versehen.



Viele Grüße!
Jo.

: Bearbeitet durch User
von Martin (martin3000)


Lesenswert?

Ist zwar schon uralt, aber falls jemand ein ähnliches Problem hat:
Das Gerät von RfxTrx kann 433MHz Sensoren lesen. Und es kann auch das 
"La Crosse" Protokoll.

von Oliver S. (phetty)


Lesenswert?

Martin schrieb:
> Ist zwar schon uralt, aber falls jemand ein ähnliches Problem hat:
> Das Gerät von RfxTrx kann 433MHz Sensoren lesen. Und es kann auch das
> "La Crosse" Protokoll.

Das geht auch mit einem simplen jeelink auf Arduino und 
https://github.com/deveth0/lacrosse-mqtt-gateway

Ich hatte Adapter und Sensoren schon fast in der Tonne, hiermit sind sie 
wieder brauchbar (für mich).

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.