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.
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)
Update â 19th January 2026
PING: @Minims @frazor77 @Vorhees @GSzabados @AltF4me
Major Release: v2.1.0 + ESPHome Integration Now Available! ![]()
Iâm excited to announce that this project now supports two integration methods:
Option 1: ESPHome Component (NEW!)
- Native Home Assistant integration with YAML configuration
- No MQTT broker required
- Automatic sensor discovery (15+ sensors)
- All ESPHome features (OTA, logging, diagnostics)
- Same proven codebase as the MQTT version
Full ESPHome documentation: ESPHOME/README.md
Option 2: Standalone MQTT (Existing)
- Continues to work as before with all new improvements
- Full control over firmware and customization
- PlatformIO-based development
New Features in v2.1.0 (both versions):
- Adaptive frequency tracking: Intelligent frequency offset optimization based on successful reads
- Enhanced monitoring: Read attempts counter, frequency offset reporting, tuned frequency sensors
- Better reliability: Improved frequency persistence and handling
- Multi-layer validation: 5 layers of frame validation (custom serial decoding, CRC-16/KERMIT FCS, frame structure, temporal checks, signal quality filtering)
Known Issue (ESPHome only): The discovered frequency offset doesnât persist between ESPHome reboots (will re-scan on each boot). The MQTT version doesnât have this limitation. Iâm working on refining the persistence mechanism.
Migration from MQTT to ESPHome: Super easy - use the same meter_year and meter_serial values from your private.h. Sensors will auto-discover with similar entity IDs.
Both versions are actively maintained and tested on ESP8266/ESP32 with real water and gas meters. Choose whichever integration method works best for you!
ESPHome



