mirror of
https://github.com/merbanan/rtl_433.git
synced 2026-07-30 18:17:45 -04:00
Adapts the decoder from PR #3568 by Paul Antaki. Shares the Govee FSK envelope reverse-engineered by Reece Neff for the H5059 (PR #3493): sync word 2c 4c 4a, 128-byte XOR key, CRC-16/AUG-CCITT. Both probe temperatures and humidity are packed into one 32-bit little-endian word by the device's own firmware: 11 bits each for probe1/probe2 (0.1 C/count, zero-anchored at -40 C) and 10 bits for humidity (0.1%/count). Confirmed by dumping and disassembling the H5112's FR8016HA firmware -- it contains a sensor-packing function with this exact symmetric layout. Probe 2 is read directly as an absolute value like probe 1: no per-device state, no wrap-count tracking, no cold-start dependency. Two frame types: msg_class 0x13 periodic report (~10 min interval, full sensor data + 10-entry history buffer at ~1-minute intervals) and msg_class 0x71 triggered status response (reply to gateway poll, same sensor fields, no history). Beyond the original PR, two guards make the separation from the other Govee-family decoders structural rather than priority-dependent: each msg_class must carry its exact documented payload length (57 or 28 bytes), and frames whose humidity decodes above 100% RH are rejected -- the latter is the mirror of H5310's dec[9] == 0xff status check, since a genuine H5310 status reply always decodes here as an impossible 102.3% RH. Priority ordering (5, between H5310's 0 and H5059's 10) remains as belt-and-braces only. Verified against all 3 real captures from the companion rtl_433_tests#505 PR -- two room-temperature devices (one with the history buffer) and one fridge/freezer device (probe1 ~2.3 C, probe2 ~-24.0 C) -- all match exactly. Also verified the H5310 status frames that previously double-decoded as garbage H5112 records (102.3% RH) under -y are now rejected by the humidity guard. Full local regression suite: no new false positives.