Generic-brand two-probe BBQ/meat thermometer, FCC ID 2APN2-EN2053,
sold e.g. as Feelle Digital Thermometer. Reverse engineered from the
captures, audio recording and annotated codes posted in the issue.
The checksum byte, unsolved in the issue thread, packs four even-parity
flags and a modulo-8 sum of the four message bytes; it matches all 37
known-good messages across both probe channels.
The BIOWIN / 2measure / Bioterm No. 270208 weather station from issue
#1476 turns out to transmit the exact Holman WS5029 older-PWM frame,
same preamble, layout and xor_shift_bytes checksum, but OOK modulated
instead of FSK. Register the existing decoder for OOK as well.
The wind direction field, unresolved in the issue, was recovered by
testing bit windows against the reporter's compass annotations and
matches the Holman layout. No barometric pressure is transmitted, the
display console likely measures it locally.
Reverse-engineered from real captures and analysis in the issue
discussion. OOK PPM, 30 bits repeated ~9 times: a 16-bit id (observed
fixed on the one unit tested), a 13-bit temperature, and a parity bit
(XOR of all 30 bits is always 1).
Source: https://github.com/merbanan/rtl_433/issues/1223
Reverse-engineered from Clayton Smith's gr-elster project and real
captures posted in the issue thread. FSK Manchester-encoded, whitened
with 0x55, CRC-16/X-25 protected. Disabled by default pending wider
field-testing; the protocol is only partially reverse-engineered
(the hourly-usage sub-command decode is a port of the reference
implementation, not independently confirmed against a real capture).
Source: https://github.com/merbanan/rtl_433/issues/1196
Decoder for the Martec MPLCD combined light dimmer/fan speed remote:
OOK PWM, 22-bit frame with a reflected/inverted channel ID, 7-bit
dimmer level, 2-bit fan speed, and a 4-bit nibble-sum checksum. The
remote holds its own state and resends the full light+fan setting on
every button press.
Ported from merbanan/rtl_433#3133 (originally by clockbrain/Don
Ashdown). Verified against the 3 sample captures from
merbanan/rtl_433_tests#474 — all decode with valid checksums and match
the documented expected values exactly (channel/speed, and a
progressive dimmer sweep for the long-press sample).
Decoder for RFXMeter/RFXPower devices, using X10RF-like PPM framing
with an address-complement check and a nibble-sum checksum.
Cleaned up and rebased from merbanan/rtl_433#2142 (originally by
Christian W. Zuckschwerdt), closes#2141. Verified against the sample
captures from that issue.
Co-authored-by: Christian W. Zuckschwerdt <christian@zuckschwerdt.org>
Decoder for the TR-502MSV remote for RC-710DX smart sockets, based on
merbanan/rtl_433#2921 by Filip Kosecek.
Applies the simplifications requested in review (direct mask/shift
field extraction instead of bit reformatting helpers, table lookups
for socket/command strings) and resolves the previously unknown 2-bit
checksum: U1 = C ^ S2 ^ S0, U0 = O ^ S1, derived from the sample table
posted in the PR discussion and verified against all 13 captured
samples in filipkosecek/rtl_433_tests#467.
Co-authored-by: Filip Kosecek <filip.kosecek@gmail.com>
Remote Grill Thermometer with probe (FCC ID TXRFPT0912), sold under
the RF-T0912 model number. Decodes a 16-bit Fahrenheit temperature
with an 8-bit checksum, repeated across multiple rows for reliable
detection, and reports an overload condition.
Co-authored-by: Ethan Halsall <ethanhalsall11@augustana.edu>
Adapted from Christian Zuckschwerdt's untested sketch in PR #3113 and
fixed/verified against real hardware captures in issue #3112 (thanks to
yashikada for testing and reporting the corrected bit layout). Supports
both of the HCS362's transmission modes: PWM (mode 0) and Manchester
(mode 1), sharing a single decode callback that branches on the demod
modulation.
Co-authored-by: Christian W. Zuckschwerdt <zany@triq.net>
Based on PR #1875: several size_t values (from strlen(), fread(),
list_t.len, struct addrinfo::ai_addrlen) were implicitly narrowed to
int/unsigned/socklen_t, which triggers MSVC C4267 warnings on x64
Windows builds. Adds explicit casts and widens a few parameter/local
types to size_t where that is the semantically correct type.
Excludes the original PR's mongoose-related mg_send() casts, and
drops two hunks (flex.c, honeywell_cm921.c) that no longer apply
since the affected code was refactored away since 2021.
Co-authored-by: obones <1314739+obones@users.noreply.github.com>
TPMS decoder for the Schrader MRXBC5A4 sensor (also sold as
MRXBMW433TX1), used on BMW vehicles. Decodes id, pressure, and
temperature, and verifies the packet's 2-bit C1C2 integrity check.
Based on merbanan/rtl_433#1702 by drid, with the C1C2 integrity
check formula derived by merbanan from RDC test tool data.
Adds an alternate decoding of the Honda/Continental KR5V2X remote as a
separate decoder alongside continental_car_remote, adapted from
gusgorman402's unmerged PR #2767 (honda_kr5vxx.c) with cleanup to match
project style. The two decoders disagree on bit layout and checksum for
the same physical hardware.
The /cmd getters serialized into fixed stack buffers (get_stats 20480,
get_meta 2048, get_protocols 102400). When a report exceeded its buffer
the output was silently corrupted into invalid JSON, not cleanly
truncated: the abuf string builder drops an oversized chunk but keeps
appending the smaller chunks that follow, so e.g. a get_stats reply with
~230 enabled decoders ended like `...,"name":,:8256}`. Clients then fail
to parse the response and the corresponding data never updates.
Make the serializer report truncation and add data_print_jsons_dup(),
which grows a heap buffer until the whole document fits, and use it for
the three JSON-payload getters:
- abuf gains an `overflow` flag, set by abuf_cat/abuf_printf and the
hand-rolled string formatter whenever a write is dropped or truncated.
- data_print_jsons_dup() retries with a doubled buffer until no overflow
(64 MiB sanity cap), so the report is never truncated.
- get_stats/get_meta/get_protocols use it and free the buffer after
responding; out-of-memory yields an error reply instead of a partial one.
Tests:
- data-test asserts a large report serializes to a complete object via
data_print_jsons_dup() while a fixed undersized buffer does not.
- the HTTP integration test now validates that get_protocols/get_stats/
get_meta return parseable JSON, not just HTTP 200.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>