RainPoint HCS012ARF rain gauge: rainfall is 10x too low
Decoder: src/devices/rainpoint_hcs012arf.c (protocol 276)
Device: RainPoint HCS012ARF High Precision Rain Sensor
rtl_433 version: 25.12-356-gf96ab11c
Receiver: RTL-SDR Blog V4, 433.92 MHz, 250 kHz sample rate
Summary
The decoder reports rainfall ten times lower than the real value. It applies:
float rain_mm = rain_raw * 0.1f;but each unit of rain_raw corresponds to 1.0 mm, not 0.1 mm. The correct
line should be rain_raw * 1.0f.
Evidence
Five independent checks, all agreeing.
1. Each bucket tip increments the counter by exactly 1
Tipping the bucket 25 times by hand (water poured slowly, tips counted):
before rain_raw = 799
after rain_raw = 824 (+25, exactly the number of tips)2. Physical measurement of the gauge
funnel diameter 9.0 cm -> collecting area 63.62 cm²
1 mm of rainfall = 6.36 ml
measured bucket > 8 ml -> > 1.26 mm per tipFor the decoder's 0.1 mm/unit to be correct, the bucket would have to hold 0.64 ml — twelve times less than measured.
3. Vendor app cross-check
The vendor app (HomGar) shows the same counter scaled. Three readings taken two
days apart, with the app's total and the decoded rain_raw:
rain_raw app total implied "pre-existing total"
400 1820.8 mm 1356.8
792 2275.6 mm 1356.9
799 2283.7 mm 1356.9The pre-existing total is a fixed number, so it must come out the same every time. It only does at 1.16 mm per unit. The app applies a user-configurable +16 % calibration; removing it gives 1.00 mm per unit exactly.
At 0.1 mm/unit the same figure would have to grow from 1780.8 to 2203.8 with no rain — impossible.
4. Counting tips against the app
10 tips total 2283.7 -> 2295.3 +11.6 mm (1.16 mm/tip)
10 tips total 2295.3 -> 2306.9 +11.6 mm (1.16 mm/tip)
5 tips total 2306.9 -> 2312.7 + 5.8 mm (1.16 mm/tip)5. Range declared in the manual
The manual gives Rainfall Range: 0-9999 mm. rain_raw is 16 bits (max 65535).
At 0.1 mm/unit, 9999 mm would need 99,990 counts — it would not fit. At
1 mm/unit it fits comfortably.
Sample frames
Device id 67198984, flags1=24, flags2=3, battery_ok=1.
Raw 163-bit frame (Manchester decoded and bit-reflected, header 0xa5):
a5 08 60 01 04 60 03 1f 03 f2
b0 sync | b1-b4 id (LE) | b5 flags1 | b6 flags2 | b7-b8 counter (LE) | b9 ?b7-b8 = 0x031f = 799, reported by the decoder as 79.9 mm. Real value: 799 mm
of accumulated rainfall since the counter started (uncalibrated).
Note b9 is not read by the decoder; its purpose is unknown.
Suggested fix
- float rain_mm = rain_raw * 0.1f;
+ float rain_mm = rain_raw * 1.0f;Source: merbanan/rtl_433