Files
rich 01c49d7bdd Add firmware version tracking and on-device history backfill
Repeaters now report their firmware version (REQ_TYPE_GET_OWNER_INFO),
checked daily and after a reboot, into meshcore_repeater_info. Firmware
changes show as Grafana annotations and in the web UI node list.

Repeaters on keymind/Cascade firmware keep 7 days of half-hourly battery
voltage and MCU temperature. With history = true and an admin login, the
collector fetches enough days via the remote CLI to fill gaps after
missed polls, writing them to meshcore_repeater_history.
2026-10-13 22:35:12 -04:00

76 lines
3.4 KiB
TOML

# Copy to config.toml and edit, or use install.sh and manage everything from
# the web UI. Note: when the web UI saves, it rewrites this file without comments.
[connection]
# The companion radio attached to the machine running this script.
type = "serial" # "serial", "tcp" or "ble"
port = "/dev/ttyUSB0" # serial: device path (macOS: /dev/cu.usbserial-XXXX or /dev/cu.usbmodemXXXX)
baudrate = 115200
# type = "tcp"
# host = "192.168.1.50"
# port = 5000
# type = "ble"
# address = "AA:BB:CC:DD:EE:FF"
# pin = "123456"
[influxdb]
url = "http://localhost:8086"
token = "my-token" # InfluxDB 1.8: "username:password"
org = "home" # InfluxDB 1.8: "-"
bucket = "meshcore" # InfluxDB 1.8: "database/retention_policy"
[poll]
interval_seconds = 900 # see README: 15 min is a sensible default
retries = 3 # per request; mesh packets get lost
timeout_seconds = 0 # 0 = use the radio's suggested timeout (scales with hop count)
state_file = "state.json" # remembers last poll time + low-power mode across restarts
local_stats_interval_seconds = 60 # stats of the attached companion (no airtime); 0 = off
location_interval_seconds = 900 # node positions from heard adverts, for the map; 0 = off
# Low-battery back-off (solar nodes). Below low_battery_mv, poll every
# low_battery_interval_seconds and skip the requests in low_battery_skip;
# stay there until the battery reaches recover_battery_mv. 0 disables.
# Values below suit a single Li-ion cell; LiFePO4 is flatter (e.g. 3200 / 3300).
low_battery_mv = 3500
recover_battery_mv = 3750
low_battery_interval_seconds = 3600
low_battery_skip = ["neighbours"] # any of "status", "telemetry", "neighbours"
# Every key in this [poll] block from interval_seconds down (except state_file)
# can be overridden per [[repeater]].
[advert]
# Automatic self-adverts so other companions can add this one (needed before they'll
# share telemetry with it). 0 = off; otherwise 3-168 hours. Manual adverts: web UI.
interval_hours = 0
flood = true # false = zero-hop only (direct neighbours)
[web]
listen = "0.0.0.0" # "127.0.0.1" to only allow local access (e.g. behind a reverse proxy)
port = 8080
# password_hash is set with: python meshcore_influx.py -c config.toml --set-password
# One block per repeater. It must already be in the companion's contact list.
[[repeater]]
name = "My Repeater" # advert name, case-insensitive
password = "guest-or-admin-pw" # guest is enough for status + basic telemetry + neighbours
# pubkey_prefix = "a1b2c3d4" # match by key instead of name; name is then just a label
enabled = true
status = true
telemetry = true
neighbours = true
# history = true # keymind/Cascade firmware + admin password: backfill missed
# polls from the repeater's 7-day half-hourly battery/temp history
# [[repeater]]
# name = "Hilltop"
# password = "..."
# low_battery_mv = 0 # mains powered: never back off
# Remote companions (other people's chat nodes): telemetry only, no password.
# They answer only if their owner shares telemetry and has this companion as a contact.
# [[companion]]
# name = "Bob's T-Deck"
# pubkey_prefix = "0b1c2d3e"
# location = false # true = also request GPS (only with the owner's agreement)
# interval_seconds = 1800