This repository contains a GNU Radio Companion flowchart, a perl decoder and some notes I wrote for receiving the signals of a wireless thermometer/hygrometer TFA KLIMALOGG PRO 30.3039.IT.
- 868.3 MHz
- OOK, symbol rate about 85 kHz
The messages from the sensor match the following regular expression:
(?:01){10}1101111(.{168})1(?:01){20}0{10} ^-sync prefix ^-payload ^-suffix
The payload has every second bit set to 1. Removing them, the following message remains:
010000101011100100001110101101100001000101000001010000000110000011110110101010111100 cccccccccccciiiiiiiiiiiiiiiiaaaabbbbccccddddHHHHHHHHccccccccccccNNNNccccccccSSSSSSSS ^-constant ^-hex digits | | | | | ^-constant | | ^-checksum of ID sticker | | | | ^-humidity, binary | ^-constant ^---^---^---^--temperature, BCD ^-transmission counter
All numbers are sent LSB first. The following function yields the value from the sensor display. I have no idea what the perpetual 8 in digit b means…
t(a,c,d) = (a-4)*10 + d + c*0.1 °C
klimalogg.pl listens on UDP port 35000, decodes the incoming bits and stores them in a postgres database. It expects the following table to be present:
create table klimalogg(t timestamptz default now(), hygro int2, temp float, raw bit varying); create index on klimalogg using brin (t);
- Clock recovery fails on every second telegram
- AGC stage is missing
- DC removal currently implemented with an AddConst block