Sharing my project: Fetch water/gas usage data from Itron EverBlu Cyble Enhanced RF water meters using the RADIAN protocol on 433 MHz with an ESP32/ESP8266 and CC1101 transceiver. Integrated with Home Assistant via MQTT AutoDiscovery.
I live in the UK and my Water Meter is out on the street and has an Itron EverBlu Cyble Enhanced module that allows for wireless remote meter functionality. More details:
Ref: Water Meter Reading/Integration with Itron EverBlu Cyble Enhanced
Software original code (but also all the hard work to get things working was originally done here then put on github by @neutrinus here and then forked by psykokwak
Update ā 17th April 2025
PING: @Minims @frazor77 @Vorhees @GSzabados @AltF4me
Exciting news! Iāve added several new features:
- Diagnostics for 433 MHz communication: Now includes RSSI (Radio Signal Strength Indicator), LQI (Link Quality Indicator), and signal strength readings to help with diagnostics and finding the best position for the transceiver.
- Meter sleep/wake tracking: New Time Start and Time End sensors show when the meter wakes and sleeps, read directly from the meterās settings.
- Frequency discovery: You can now enable automatic frequency discovery for meter communication via the config file.
- Wi-Fi improvements: Added support for enabling 802.11g (11G) PHY mode via the config file, along with expanded Wi-Fi diagnostics and OTA updates.
- Reading schedule configuration: You can now define which days the meter should be queried (e.g. Monday to Friday, Monday to Saturday, or Monday to Sunday). This is also configured via the config file.
- Confirmed counter behaviour: As previously reported, Iāve now confirmed that the read counter can be āresetā or wrap around under certain conditions. For example, a reading that originally showed a counter of
255was followed shortly after by another showing it as1.
Current date (UTC) : 2025/04/17 17:21/50 - 1744910510
Data from meter:
Liters : 635633
Battery (in months) : 107
Counter : 255
RSSI : 226
Time start : 06:00
Time end : 18:00
Current date (UTC) : 2025/04/17 17:22/03 - 1744910523
Data from meter:
Liters : 635633
Battery (in months) : 107
Counter : 1
RSSI : 227
Time start : 06:00
Time end : 18:00
Important note on counter implications:
Thereās a known issue where, if the water company makes a reading and the counter value differs significantly from their previous reading, they may assume something is wrong and replace the meter. In this edge case, one theoretical (but very much a last-resort) workaround would be to record the counter value at the time of the water companyās last reading, and then, just before their next visit, perform enough reads to cause the counter to roll over and match that same number again.
To be absolutely clear: Iām not recommending this as a good solution. It will drain the battery very quickly and should only be considered if there are no other options available and all alternatives have been exhausted. Itās a bodge, not a fix, but it might be the only logical fallback in a worst-case scenario.
Update ā 29th October 2025
PING: @Minims @frazor77 @Vorhees @GSzabados @AltF4me
Major update! Iāve completely overhauled the radio handling and reliability. The firmware now works out-of-the-box with any CC1101 module without manual tuning:
Automatic Frequency Calibration & Tracking:
- Wide initial scan on first boot: Automatically finds your meterās frequency (±100 kHz coarse scan, then ±15 kHz fine scan) and saves it permanently
- Adaptive frequency tracking: Uses the CC1101ās FREQEST register to monitor and correct for frequency drift over time (temperature changes, crystal aging)
- Manual scan on demand: Trigger a frequency scan via MQTT or the new Home Assistant āScan Frequencyā button
- Automatic CC1101 calibration: Enable synthesizer auto-calibration and FOC (Frequency Offset Compensation) for robust operation
Stability & Security Improvements:
- Watchdog protection: Prevents device resets during long operations (scans, meter reads)
- Fixed stack overflow risk: Replaced recursive retries with safe delayed callbacks
- Buffer overflow protection: Added bounds checking to prevent memory corruption from malformed RF data
- MQTT input validation: Strict command validation with clear warnings for invalid inputs
Performance & Memory:
- 90% faster MQTT operations: Reduced publish delays from 50ms to 5ms
- ~500 bytes heap saved per cycle: Eliminated Arduino
Stringusage in favor of efficient stack buffers - Self-documenting code: Replaced cryptic hex values with descriptive constants for all CC1101 registers
Enhanced Diagnostics:
- New MQTT topics:
total_attempts,successful_reads,failed_reads,last_error,cc1101_state,frequency_offset - All diagnostic sensors auto-discover in Home Assistant
- Real-time CC1101 state monitoring (āIdleā, āReadingā, āFrequency Scanningā)
Configuration Improvements:
- Startup validation: Checks meter year/serial, frequency bounds, GPIO pins, and schedule before operation
- Default frequency: Falls back to 433.82 MHz if not configured (standard RADIAN frequency)
- Persistent offset storage: ESP8266 uses EEPROM, ESP32 uses Preferences API
- Hardware change guidance: Clear instructions for when to clear stored calibration (replacing CC1101/board/meter)
Note on āFrequencyā entity removal: The frequency is a radio configuration parameter (like WiFi channel), not a meter sensor value. Itās been removed from Home Assistant to avoid confusion. The discovered frequency offset is still available as a diagnostic metric.
Previous features (still included):
- Diagnostics for 433 MHz communication (RSSI, LQI, signal strength)
- Meter sleep/wake tracking (Time Start and Time End sensors)
- Wi-Fi improvements (802.11g support, expanded diagnostics, OTA updates)
- Reading schedule configuration (customize query days)


