Decoder für Auriol AFT 77 B2
Die sehr günstige Funk-Temperaturstation von Auriol hat mich interessiert und darum habe ich sie spontan gekauft.
Kein Decoder in rtl_433
Zu Hause fand ich heraus dass rtl_433 keinen Decoder für diesen Sensor hat. Wahrscheinlich ist er ganz neu herausgekommen, und deshalb hat sich noch niemand darum gekümmert.
Neuerdings bietet rtl_433 sehr nützliche Debug-Tools an, und und damit wurde klar dass die Temperatur praktisch im Klartext übermittelt wird. Drei Nibbles geben die Temperatur in Zehntelgrad an. Dank ein paar kalten Tagen gab es auch Messwerte mit negativen Temperaturen. Die zeigten auf dass dies mit einem Sign-Bit signalisiert wird.
Entwicklung des Decoders
rtl_433 ist modular aufgebaut. Jeder Decoder ist in einem eigenen Sourcefile und kann auf die Infrastruktur der Applikation zugreifen. Ein Bit-Buffer wird vom Framework abgefüllt, und den einzelnen Decodern angeboten bis einer die Daten entschlüsseln kann.
Die Decoder können zudem angeben welches Bit-Timing sie erwarten, und bekommen dann nur mehr oder weniger passende Signale angeboten.
Die Temperatur war schon gefunden, aber am Ende gab es noch zwei Bytes die wie eine CRC aussahen. Ein guter Decoder sollte das selbstverständlich prüfen, sonst kommt es zu Fehlmessungen.
Hier wäre ich wahrscheinlich nicht weitergekommen, aber ein Issue im Repository wurde sofort mit guten Tips beantwortet. Ein User namens Zuckschwerdt zeigte auf dass die beiden Bytes keine CRC sind, sondern eine Summe und ein Galois LFSR-Digest.
Nach einigem Grübeln brachte ich eine Funktion zur Verifikation des LFSR-Digest zusammen, und seither werden ungültige Signale zuverlässig aussortiert.
Ein weiteres Problem war das Timing der Synch-Sequenzen. Anscheinend passt das Signal nicht so recht auf das Verfahren in rtl_433. Das konnte ich lösen indem der Code den Buffer nach einer Zeile mit exakt 68 Bits durchsucht und nur diese Zeile decodiert.
Die Sourcen
Die Sourcen für dieses Projekt liegen in einem Github-Repository: https://github.com/Heimetli/rtl_433.
Der Pull-Request https://github.com/merbanan/rtl_433/pull/1674 wurde akzeptiert und ins Projekt übernommen.
Ein Decoder für den Raspberry Pico in Micropython wurde ebenfalls realisiert.