Examples and samples ready for Zephyr release

This commit is contained in:
2026-08-26 00:58:57 +10:00
parent 67ff8721c0
commit 22af47854d
20 changed files with 1158 additions and 29 deletions
+58
View File
@@ -0,0 +1,58 @@
# scan — find your Victron devices
Logs every Victron "Instant Readout" advertisement in range. **No
advertisement keys and no device list required**, so this is the first thing
to run: it tells you what you have and what its Bluetooth address is.
The whole sample is `victronble_watch_set(true)` plus `victronble_start()`
all the output comes from the library's own log module.
## Build and run
```sh
west build -p -b nrf52840dk/nrf52840 -d /tmp/vb_scan samples/scan \
-- -DZEPHYR_EXTRA_MODULES=$PWD
west flash -d /tmp/vb_scan
```
Console (115200 baud):
```
<inf> scan: VictronBLE discovery — logging every Victron advert in range
<inf> victronble: observing (interval 96 window 48)
<inf> victronble: watch: E4:05:42:34:14:F3 (random) rssi -67 type 0x01 (solar charger) len 31 keycheck 0x0d
<inf> victronble: watch: E6:45:59:78:3C:FB (random) rssi -82 type 0x02 (battery monitor) len 31 keycheck 0x3f
<inf> scan: stats: adverts 61 queued 61 dropped 0
```
Each line gives you everything you need for `samples/observer`:
| Field | Use |
|---|---|
| address + `(random)` | Victron uses **random** static addresses — that address type matters |
| `type` | which device family it is, before any decryption |
| `keycheck` | first byte of the advertisement key; confirms you copied the right key |
| `rssi` | how well you can hear it — useful for placing the node |
Nothing here is decrypted. Watch mode reads only the plaintext header, which
is why it works without keys.
## Next step
Copy the addresses into the `known_devices` table in
[`../observer/src/main.c`](../observer/src/main.c) along with each device's key
from VictronConnect (device → gear icon → Product info → *Instant readout via
Bluetooth*), then build `observer`.
## Notes
- Unregistered devices are **not** deduplicated by nonce, so expect roughly
one line per device per second. That is the point — it shows liveness.
- `prj.conf` raises the scan duty cycle to 60 ms / 30 ms
(`BT_GAP_SCAN_FAST_*`) instead of the library default 1.28 s / 11.25 ms.
Discovery should be quick; `observer` uses the low-power default.
- `CONFIG_VICTRONBLE_QUEUE_DEPTH=16` because watch mode queues every advert,
not just the ones from known devices. If `dropped` climbs on a busy site,
raise it further.
- `adverts 0` after a minute means either nothing is in range or the device
has *Instant readout via Bluetooth* switched off in VictronConnect.