Files
Flipper/Applications/UberGuidoZ/smart_meter_monitor
2026-03-24 20:18:45 -07:00
..
2026-03-24 20:18:45 -07:00
2026-03-24 20:14:57 -07:00
2026-03-24 20:14:57 -07:00

Smart Meter Monitor - Flipper Zero FAP v1.11

By: UberGuidoZ | https://github.com/UberGuidoZ/Flipper

Code: Applications/UberGuidoZ/smart_meter_monitor/Source

Monitors the 433 MHz, 868 MHz, and 915 MHz bands for smart meter radio transmissions using the Flipper Zero's built-in CC1101 sub-GHz radio. Displays live RSSI as a scrolling waveform, detects signal bursts, and tracks transmission intervals.


What It Does

Most North American electric and gas meters use the ERT (Encoder Receiver Transmitter) protocol at 915 MHz, broadcasting unencrypted SCM (Standard Consumption Message) packets every 30-90 seconds. European meters typically use 868 MHz. Some water meters use 433 MHz.

This app monitors RSSI (signal strength) in real time. When a meter transmits, a spike appears in the waveform and is counted as a detection event. The app tracks how often transmissions occur, giving you the broadcast interval of meters in range.

No packet decoding is performed - this is energy detection only.


Display

Meter Monitor     915MHz 500ms
[RSSI waveform - 128 samples, newest on right]
[dashed threshold line across waveform]
-90dBm Cnt:003
Int: 47s Avg: 52s
  • Waveform bars show RSSI from -120 dBm (bottom) to -40 dBm (top)
  • Dashed line marks the burst detection threshold
  • Cnt: total detected transmissions since last reset
  • Int: interval between last two detections (seconds)
  • Avg: exponential moving average of all intervals

When fewer than 2 bursts have been detected, line 2 shows the current threshold and "---" for interval.


Controls

Button Action
OK (short) Pause / resume capture (II indicator)
OK (long) Reset stats and waveform history
UP Raise threshold (less sensitive)
DOWN Lower threshold (more sensitive)
LEFT Previous frequency (cycle 433/868/915)
RIGHT Next frequency
BACK Stop radio, return to menu

Frequencies

Frequency Region Meter type
433.92 MHz Worldwide Some water meters
868.30 MHz Europe Electric / gas
915.00 MHz North America Electric / gas (ERT)

Change the frequency on the fly with LEFT/RIGHT while monitoring. NOTE: Changing frequency resets stats and restarts the radio.


Sample Rates and History Window

Rate History at 128 samples
100 ms 13 seconds
250 ms 32 seconds
500 ms 64 seconds (default)
1 s 128 seconds (~2 min)
2 s 256 seconds (~4 min)

UP/DOWN cycles the sample rate while monitoring.


Threshold Adjustment

The dashed line on the waveform marks the burst detection threshold. Adjust with UP/DOWN in 5 dBm steps (-110 to -60 dBm).

Default: -90 dBm. Start here and watch the ambient RSSI noise floor. Raise the threshold until it sits clearly above the noise floor but below the meter transmission spikes.

Typical noise floor: -100 to -105 dBm Typical meter transmission RSSI: -60 to -90 dBm (distance-dependent)


Building

pip install --upgrade ufbt
ufbt update
cd smart_meter_monitor
ufbt launch

Output: dist/smart_meter_monitor.fap Install to: /ext/apps/Sub-GHz/smart_meter_monitor.fap


File Structure

smart_meter_monitor/
  application.fam        - ufbt app manifest
  smart_meter.h          - shared types, constants, app struct
  smart_meter_app.c      - entry point, alloc/free, scene handler table
  scene_splash.c         - splash screen (3s auto-advance)
  scene_menu.c           - main menu
  scene_freq.c           - frequency selector submenu
  scene_monitor.c        - CC1101 capture, waveform, burst detection
  scene_instructions.c   - 4-page on-screen reference
  scene_about.c          - about screen
  README.md              - this file

Notes

  • The app uses the CC1101 HAL directly. Do not launch while the built-in Sub-GHz app is actively scanning.
  • Burst detection uses hysteresis: 2 consecutive samples above threshold to enter, 3 consecutive samples below to exit. This prevents spurious counts from momentary noise spikes.
  • The ERT protocol broadcasts every 30-90 seconds depending on meter model and utility configuration. Allow 2-3 minutes of monitoring before drawing conclusions from interval data.