Repository navigation
First Scan and Tap Test
Use a scan to find nearby transmitters, then a water-use check to help confirm which one is yours. Check the transmitter label where possible; signal strength alone does not establish ownership. The check uses your household tap: leave the meter and transmitter untouched.
Tip
What you'll need
- ha-taggle 0.3.0 installed (add-on, Docker or Python)
- The antenna connected and positioned (placement tips)
- 65 minutes for the scan
- A 10 L bucket and nobody else using water during the water-use check
Transmitters typically send about once an hour. Scan for 65 minutes to cover an expected hourly transmission opportunity. Messages can still be missed, and other channels or transmitter types may not be supported.
Stop normal reception first. Only one program can use the USB receiver.
-
Add-on: on Configuration, set
scan_minutes: 65and usemeter_ids: []if you do not know your ID. Keep other options. Click Save, then Restart (or Start if stopped) on Info. Watch Log. -
Docker: run the following from the cloned
ha-taggledirectory:docker compose stop taggle docker compose run --rm taggle --config /config/options.json --scan 65
-
Python: stop the existing receiver process or service, then run:
taggle-rx --config config.json --scan 65
Ctrl+C stops a foreground scan early. Scan mode makes no MQTT connection, creates no entities and writes no state or log files. It stops when the time is up; it does not switch to normal reception automatically.
Each valid message prints one line. This is a fictional 0.3.0 example:
{"time":"2026-11-02T08:15:00+00:00","meter_id":123456,"snr_median_db":12.4,"signal_level_dbfs":-43.2}| Field | Meaning |
|---|---|
time |
Sample-derived UTC frame time, not decoding completion time |
meter_id |
The transmitter ID heard |
snr_median_db |
SNR, signal-to-noise ratio in decibels. Higher is better for comparing positions. |
signal_level_dbfs |
Signal level in dBFS. Closer to 0 means stronger. |
counts |
Raw counters. Shown only for IDs already in meter_ids, and only for clear (unencrypted) messages. |
Release 0.3.0 includes UTC timestamps and one-decimal signal measurements, but no byte-length field. Missing counts for an unconfigured ID does not establish encryption. Counts for your configured ID establish a supported clear format, but not whether it is 18 or 21 bytes. See supported formats and field-test limits and Protocol.
Note
Is my SNR good enough? There is no proven threshold. This is an estimate measured after decoding, not straight off the antenna. Generated tests use 5 dB as a test setting, not a reception rule. Judge whether your own transmitter is received consistently over several hourly opportunities.
Important
Scan output can contain other people's IDs. Keep it private. Hearing an ID does not make it yours; configure only your own transmitter.
- Check startup now: the receiver should be detected and the log should show
Reading samples in async mode.... A V4 can also showRTL-SDR Blog V4 Detected. A USB light is not a reliable detection check. Fix errors before waiting. - Check the antenna connection. Move it to a window facing the meter or higher up.
- Use the USB extension to move the receiver away from the computer.
- Try gain 49; reduce it if reception gets worse. Add-on: Save → Restart. Docker: edit
gaininconfig.json; the next scan command reads it. Python: stop and rerun the scan after editing. - Once startup is healthy, compare reception over a full 65 minutes after each change. Scan mode can remain silent between decoded frames; it has no normal listening heartbeat.
- Still nothing? Check Troubleshooting for USB, channel and mobile-network-meter checks.
After returning to normal reception, 0.3.0 logs startup, broker connection and configured-meter updates. Fictional example (order can vary):
INFO Listening on 922.2 MHz for meter(s): 1 configured; first reading can take up to an hour
INFO MQTT connected to 192.168.1.50:1883
INFO Meter 123456: +10 pulses last hour, SNR 30.1 dB
INFO still listening: 0 frames from 0 other meters heard in the last 15 min
The 15-minute heartbeat counts frames and distinct other meters without listing neighbour IDs. It shows that the receiver runs; it does not prove your own meter was heard or that USB acquisition is healthy. Check SDR detection and Reading samples in async mode... first. Scan mode has no MQTT, startup listening announcement or normal heartbeat. A no-SDR warning needs USB troubleshooting, not another hour of waiting.
This provides evidence about ownership and usable pulses. It is not proof of ownership or litre calibration. If the label is unreadable, ask your utility to confirm the transmitter ID when the result is uncertain.
- Put only your own ID (or the candidate you are checking) in
meter_ids, replacing fictional123456. Return to normal mode using Part 3 below. - Open Settings → Devices & services → MQTT → Devices → Taggle 123456 (your ID). Wait for Last seen, under Diagnostics, to update. Note its time and Last hour pulses.
- Stop other water use: washing machine, irrigation and toilet refills included.
- Fill a 10 L bucket twice (20 L total) from a household tap. Note the time and reuse the water.
- Look for corresponding usage at the next update; check the following update too if the draw straddled two intervals. It need not exceed the previous hour's usage.
Note
Do not expect “20”. Until calibration, these are pulses, not litres. A 20 L draw may be too small for a clear result at an unknown pulse size. No visible change is inconclusive. Repeat during normal water use; do not keep running water to force a result.
Repeat uncertain identification at another time. A coincident neighbour's water use can resemble your test. Remove an unconfirmed candidate from meter_ids, apply the change, and use the old-device cleanup guidance. Never keep a neighbour's ID configured.
Diagnostics update but usage is unavailable? Encryption is one possible cause; a counter/sequence discontinuity can also temporarily hide usage. Check the encrypted attribute on Last hour where available, or report uncertainty. Confirmed encrypted messages provide ID and signal information only, so this check cannot use their pulses.
Keep only your own confirmed ID in meter_ids, then use your installation's action:
| Install | Return to normal reception |
|---|---|
| Add-on | Set scan_minutes: 0, Save, then Start/Restart Taggle water meter. |
| Docker | Let the one-off scan finish or stop it with Ctrl+C. Save config.json, then run docker compose up -d taggle from the receiver repository. |
| Python | Stop the scan, save config.json, then run taggle-rx --config config.json without --scan. |
Do not add scan_minutes to Docker/Python JSON; it is add-on-only. Devices should appear as soon as normal mode connects to MQTT, before radio values arrive. If none appear, check MQTT discovery. Next: optionally add the dashboard card, then follow guided calibration.
ha-taggle is experimental, receive-only and unofficial. It is not affiliated with Taggle Systems or any council or utility. Only receive your own meter, and never touch the utility's equipment. All IDs in this wiki are fictional. · Repository · Report an issue · Glossary
Start here
- Home
- Getting started
- Check your meter
- Finding your meter
- Meter types and pulse sizes
- Hardware and antennas
- Tested hardware
Setup
Using it
Reference and optional background
- Entities reference
- Configuration reference
- How it works
- Protocol
- Research and prior art
- Privacy and legal
- Glossary
- AI disclosure
Help