Commit Graph

3865 Commits

Author SHA1 Message Date
Christian W. Zuckschwerdt
2e4b715323 Add fixed format string flex decoder feature 2026-07-11 17:07:41 +02:00
Cole Munz
11895fe3bf Fix uint8_t offset wraparound in m_bus parse_payload (#3597) 2026-07-11 13:10:30 +02:00
Benjamin Larsson
93b613e51e Add OWL CM130 energy monitor support to oregon_scientific (closes #1493)
The CM130 is an Oregon-Scientific v3 family energy monitor, sister to the
CM160/CM180. Decode the 96-bit message (preamble 00 00 00 60): house
code, instantaneous power (16-bit LE count, 16 W per count) and a
cumulative energy counter reported as energy_kWh = counter / 8192
(8192 = 2^13 = 16 * 512, matching the power scale of 16). This is the
meter's absolute lifetime total, so it reads higher than the console,
which shows a relative value with a device-specific offset.

The checksum, unsolved in the issue for years, is a CRC-8 (poly 0x07,
init 0) over message bytes 1..10 compared against the nibble-swapped
byte 11; validated against all 50 known messages.
2026-07-11 11:41:40 +02:00
Benjamin Larsson
d9efb4207d Add support for Esun EN2053 two-channel BBQ thermometer (closes #1478)
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.
2026-07-11 00:22:11 +02:00
Benjamin Larsson
624a20fd97 Add OOK variant of Holman WS5029 PWM, sold as BIOWIN 270208 (closes #1476)
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.
2026-07-10 23:37:44 +02:00
Benjamin Larsson
d032f74ec5 Fix Akhan 100F14 tolerance to decode three-button wall switch variant
Some units run long pulses close to 1100 us, just past the old
long_width(1020)+tolerance(80) cutoff, causing the pulse slicer to
intermittently mis-frame messages. Widen tolerance to 100 us (closes #1458).
2026-07-10 21:58:09 +02:00
Benjamin Larsson
b3d941e6c6 Add support for Florabest FB-TH-1 BBQ Thermometer
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
2026-07-10 19:19:03 +02:00
Benjamin Larsson
8f6050c4dc Add support for Elster/Honeywell R2S/REXU power meters
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
2026-07-10 18:15:36 +02:00
Benjamin Larsson
b2d6148a01 Add support for Arexx TSN-70E extended 24-bit ID variant
Some TSN-70E units transmit a 24-bit ID (message length 7) instead of
the usual 16-bit one (message length 5). Also fixes a row-length
sanity check that referenced the wrong bitbuffer row index.

Source: https://github.com/merbanan/rtl_433/pull/3488

Co-authored-by: Boing <dhs.mobil@gmail.com>
2026-07-10 00:24:25 +02:00
Aaron S. Joyner
30b4b89fc6 Add @attention annotations to stateful decoders (#3502)
- secplus_v1: stateful + time-based (caches first packet half, 800ms timeout)
- secplus_v2: stateful + time-based (caches first packet half, 800ms timeout)
- ikea_sparsnas: stateful (caches brute-forced sensor ID)

Replaces existing @warning tags with the @attention format
proposed in PR #3501 to standardize tracking of decoders
that are not pure functions.

Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-07-09 23:50:54 +02:00
cyberpods
22f02e9c15 ert_idm + scmplus: print 32-bit counters as unsigned (#3558)
LastConsumptionCount (IDM and NETIDM), LastGenerationCount (NETIDM), and
Consumption (SCMplus) are all parsed as uint32_t but were emitted via
DATA_INT, which formats them as signed int. Once a meter's lifetime
counter rolls past 2^31 (≈ 2.15 billion ticks), the displayed value
flips negative — observed in the wild on multiple Itron meters with
LastConsumptionCount values like -2,059,230,912 (actually 2,235,736,384
unsigned).

Use the existing `DATA_FORMAT, "%u", DATA_INT, value` idiom (already in
use by emontx.c, holman_ws5029.c, emax.c, and others) to render these
correctly as unsigned. No type change needed since the bit pattern
matches; only the printf format string changes.

The 9-bit and 14-bit DifferentialConsumptionIntervals values are well
within int range and don't need the change.

Co-authored-by: cyberpods <whittlewoodwoodworks@gmail.com>
2026-07-09 23:48:25 +02:00
H. David Todd
88a8fd6fe6 Add Omni Multisensor decoder
Source: https://github.com/merbanan/rtl_433/pull/3278
2026-07-09 22:58:23 +02:00
Christian W. Zuckschwerdt
528412b113 minor: Clean up NetAtmo-TH code style 2026-07-09 22:20:26 +02:00
Klaus Peter Renner
37e8f7ce47 Add support for NetAtmo outdoor temp/hum and wind sensors
Source: https://github.com/merbanan/rtl_433/pull/3396
2026-07-09 21:51:59 +02:00
klohner
2965b01121 Add flex decoder config for RISCO 868.64MHz alarm sensors
Fixes the Trigger bit mapping (was inverted) in the OOK_DMC flex
decoder worked out in issue #1194's discussion (originally by
@klohner, confirmed against real hardware by @kvdveer). Validated
against both sample capture sets attached to that issue: 12 of 16
files decode cleanly, each of 3 distinct physical sensors correctly
alternating between exactly two State values with a fixed ID.

No checksum exists in this protocol, so this remains a flex config
rather than a full C decoder for now.

Closes #1194.
2026-07-09 17:43:35 +02:00
clockbrain
a4b43f4d17 Add support for Martec MPLCD ceiling fan remote
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).
2026-07-09 16:07:31 +02:00
Michael Dreher
4c6d3d9111 feat(heidemann hx): add flex decoder for heidemann rx series (#3530) 2026-07-09 15:17:26 +02:00
Cory Snider
320bb1498e Add support for LaCrosse View LTV-TH2i Thermo/Hygro Sensor
The LTV-TH2i shares the LTV-TH2/TH3 framing but uses a third CRC-8
init value (0xb2) that appears to be selected arbitrarily by the
sensor, alongside the existing 0x00/0xac variants. Also exposes the
previously-unlabeled flag bits as battery_ok and retransmit, and only
emits the remaining unknown flags when non-zero.

Ported from merbanan/rtl_433#3406 (originally by Cory Snider), applied
against master's current data_make layout (DATA_COND model selection)
since the PR's diff predates that refactor.

Verified against the samples from merbanan/rtl_433_tests#404: g002
already decoded as plain LTV-TH2 before this change; g001 failed to
decode on master and now decodes correctly with the new 0xb2 CRC
check, confirming it uses the TH2i variant (same sensor id as g002,
consecutive sequence number). TH3 samples decode unaffected.
2026-07-09 02:08:16 +02:00
Bruno OCTAU
9e31ba093b minor: Update Oil Watchman Advanced with better CRC validation and Add sensor version (#3526)
* minor: Update Oil Watchman Advanced with better CRC validation and Add sensor version

* minor: Update Oil Watchman Advanced docs comment with shifted CRC sample
2026-07-09 00:53:47 +02:00
Greg Cormier
1c76fff628 Add WEN 3410 (#3153)
* add ivacpro for #3034
2026-07-09 00:49:18 +02:00
Rich
7ab51f2981 Added support for Honeywell ActivLink Door / Window Sensors (#3127)
* Added support for Door Window Sensors
2026-07-09 00:42:30 +02:00
robert-ercean
6649bc881b Add decoder conf for EV1527 Anime-Lightbox Remote (#3590) 2026-07-08 21:02:34 +02:00
mhos
f827e71193 minor: Add US 915 MHz YT60234 variant to Vevor-7in1 notes (#3592)
Co-authored-by: mhos <mhos@techshit.xyz>
2026-07-08 20:32:15 +02:00
Benjamin Larsson
f6b135d4d8 Add support for RfxMeter (#3582)
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>
2026-07-07 23:53:12 +02:00
Christian W. Zuckschwerdt
f71949536e minor: Fix Opel-Mokka code style 2026-07-07 16:15:23 +02:00
vidarino
ae28c509ef Add support for Opel Mokka car key (#3479) 2026-07-07 16:09:45 +02:00
Benjamin Larsson
b05e3bebda Add support for TR-502MSV remote smart socket controller (#3586)
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>
2026-07-07 14:04:22 +02:00
Jan Kundrát
0ba8d5d21e Add InfluxDB option for configurable prefix (#2586) 2026-07-07 12:47:31 +02:00
Benjamin Larsson
5a3e53042e Add support for Grill Thermometer RF-T0912 (#3585)
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>
2026-07-07 12:44:56 +02:00
Christian W. Zuckschwerdt
0ee1ad293c Change logf length limit from 60 to 80 chars (#3584) 2026-07-07 12:02:30 +02:00
Gerald Reisinger
37a32f78ab Add support for Aldi Sempre 4-AH0423-4 temperature/rain sensor (#2716)
* Add support for Aldi Sempre 4-AH0423-4 temperature/rain sensor

* Improve documentation for Aldi Sempre 4-AH0423-4 temperature/rain sensor

---------

Co-authored-by: Gerald Reisinger <gerald.reisinger@husqvarnagroup.com>
2026-07-07 11:36:09 +02:00
Benjamin Larsson
e52b4b563f Add support for Microchip HCS362 KeeLoq Hopping Encoder remotes (#3579)
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>
2026-07-07 10:31:59 +02:00
Benjamin Larsson
0b6ab87272 Fix VS2019 arithmetic overflow warnings (C26451) (#3581)
Based on PR #1877: MSVC /analyze flags int arithmetic that gets
implicitly widened before a double/float use.

- magnitude_true_cu8/cs16: use sqrtf() instead of promoting the
  int sum-of-squares to double, per review feedback on #1877 that
  double math is undesirable in this hot path.
- baseband_demod_FM(_cs16): cast low_pass to double in the debug
  log line only, harmless since it's not per-sample code.
- pulse_analyzer: regroup the FSK offset calculation with explicit
  parens (no behavior change, same left-to-right eval order).

Drops the PR's S_CONST/S_CONST32 cast (no-op, doesn't fix anything)
and the seven `.max + 1` -> `.max + 1.0` edits in pulse_analyzer.c,
which reviewers flagged as false positives that shouldn't be fixed
by turning int addition into double addition.
2026-07-07 09:42:59 +02:00
Benjamin Larsson
963bb4b259 Fix warnings about size_t being cast to a narrower type (#3580)
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>
2026-07-07 09:38:15 +02:00
Ilias Daradimos
a42fd2e4dd Add support for BMW Schrader-MRXBC5A4/MRXBMW433TX1
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.
2026-07-07 01:01:53 +02:00
Benjamin Larsson
2f7700ed9f minor: Update docs
Regenerate README.md and conf/rtl_433.example.conf device list text that
had gone stale after previous decoder changes (ESA/Gira, Nissan TPMS,
Honda Keyfob naming).
2026-07-06 22:00:12 +02:00
Christian W. Zuckschwerdt
e4ce944833 Add support for Q-walk_by to Wireless-MBus (#2997) 2026-07-06 21:45:16 +02:00
Benjamin Larsson
57ebfb57a4 Add Honda Keyfob KR5V2X/1X decoder based on PR #2767 (#3578)
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.
2026-07-06 20:58:13 +02:00
Benjamin Larsson
7ff42e3300 Add support for AcuRite Optimus 6-in-1 (06188M) weather station (#3577) 2026-07-06 20:48:28 +02:00
Benjamin Larsson
f6beeb09f8 Fix the maintainer_update.py script (#3573) 2026-07-06 20:07:15 +02:00
Greg Troxel
f350d497d7 Change Fineoffset-WH51 battery levels to real charge state (#3527)
The new translation if based on my experience with alkaline cells, and
having a failure within hours of battery_ok and battery_mv dropping to
0.55 and 1200.  A battery at 55% should be fine, of course.  While
there may be energy in the battery, once the device reports 1200 there
was a very short time until operation became erratic and the device
went offline.  The scale is about the remaining life of the battery in
terms of correct operation of the specific device.
2026-07-06 18:03:19 +02:00
Christian W. Zuckschwerdt
7609fb572b minor: Fix unused variable 2026-07-06 14:26:41 +02:00
Christian W. Zuckschwerdt
534d568b98 Change bitrow printing faster and less stack (#3576) 2026-07-06 14:22:20 +02:00
Christian W. Zuckschwerdt
1ad8c00a0b minor: Fix doc typos 2026-07-06 11:44:10 +02:00
Benjamin Larsson
390fef5fa5 Add checksum support and fix pressure_PSI calculation in Nissan TPMS decoder
Implements the sum2N checksum from issue #1024 to validate frames,
fixes the pressure_PSI calculation, and enables the decoder by
default now that it can reject invalid packets.
2026-07-06 11:26:21 +02:00
Benjamin Larsson
db596ed046 Add Acurite 985 support (#3509)
Code based on https://github.com/merbanan/rtl_433/pull/1582

Assisted-by: Qwen 3.6 Plus

Co-authored-by: jfbauer432 <jfbauer432@users.noreply.github.com>
2026-07-06 02:44:41 +02:00
Jon Klixbuell Langeland
0cc19fe2af Add support for Thermor_a6n_132tx (#3507)
High nibble checksum investigation done by Qwen3.6 Plus.

Assisted-by: Qwen 3.6 Plus
2026-07-06 02:31:00 +02:00
Cole Munz
5d1cb0d21a minor: Fix Security+ 2.0 doc comment (#3574) 2026-07-06 02:00:16 +02:00
dclawin
3d759cc536 Add support for Gira-EHZ energy sensor to ESA decoder 2026-07-06 01:43:01 +02:00
Jeffrey S. Ruby
fbc7a85a9f Add support for meter type field and extend consumption to 26 bits for Neptune-R900 (closes #2891)
Some newer R900 meters (Non-BCD, e.g. V4) split the former 8-bit
Unknown1 byte into a 4-bit Unknown1 and a 4-bit Meter Type, and
appear to add 2 more bits to the Consumption field from Unknown3.
2026-07-06 00:51:59 +02:00