Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
48 changes: 36 additions & 12 deletions config/default.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,11 @@ radio:
sync_word: 0x2B
preamble_length: 16
tx_power_dbm: 22
# HAL GPS/PPS (RAK Pi HAT u-blox → concentrator PPS pin). Off by default.
# gps_pps_enabled: false
# gps_pps_tty_path: "/dev/ttyAMA0"
# gps_family: "ubx7"
# gps_pps_target_baud: 0 # 0 = HAL default (9600)

meshtastic:
default_key_b64: "AQ=="
Expand All @@ -19,6 +24,9 @@ meshtastic:
# MyChannel: "base64encodedPSK=="
# SecretChat: "anotherBase64PSK=="
channel_keys: {}
# Remote ADMIN config read (PR 15) — PSK for the shared admin channel on target nodes.
# admin_key_b64: "base64PSK=="
# admin_channel_name: "admin"

meshcore:
default_key_b64: ""
Expand Down Expand Up @@ -50,7 +58,7 @@ device:
longitude: 0.0
altitude: 25
hardware_description: "RAK2287 + Raspberry Pi 4"
firmware_version: "0.7.6"
firmware_version: "0.7.5.1"

relay:
enabled: false
Expand All @@ -60,6 +68,18 @@ relay:
burst_size: 5
min_relay_rssi: -110.0
max_relay_rssi: -50.0
# blocklist: [] # 8-char hex node IDs — relay only, feed unchanged
# priority_list: [] # bypass burst gate under congestion
# dedup_ttl_seconds: 300
# channel_throttle_percent: # per-channel relay duty budget (est. ToA)
# "0": 100 # omit = 100% all channels; EU capped at 1%
# storm_guard: # memory-only quarantine (PR 12)
# enabled: false
# window_seconds: 60
# identical_packet_threshold: 5
# rate_threshold_per_minute: 30
# quarantine_duration_seconds: 300
# notify_dashboard: true

upstream:
enabled: true
Expand All @@ -80,13 +100,6 @@ transmit:
nodeinfo:
interval_minutes: 180 # 5..1440 min, default 180 (3 hr); 0 = disabled
startup_delay_seconds: 60 # delay before first broadcast on boot
position:
interval_minutes: 15
startup_delay_seconds: 180
# LoRa mesh POSITION packets (Meshtastic app map). Meshradar fleet pin
# always uses device.latitude/longitude above, not live GPS.
coordinate_source: "static" # static | live (live needs gpsd/uart source)
location_precision: "approximate" # exact | approximate | none (live only)

web_auth:
# First-run state: hashes are empty -> dashboard forces /setup.
Expand Down Expand Up @@ -124,18 +137,29 @@ mqtt:
homeassistant_discovery: false

location:
# Where live GPS fixes come from (skyplot + optional mesh POSITION).
# Registered coordinates for Meshradar live in device.latitude/longitude
# and are not overwritten by gpsd.
# Where the Meshpoint's reported lat/lon/alt comes from.
# static : use device.latitude/longitude/altitude (default)
# gpsd : poll a local or remote gpsd daemon for live fixes
# uart : reserved (RAK Pi HAT GPS, not yet wired)
# uart : on-board RAK Pi HAT GPS via /dev/ttyAMA0 (NMEA GGA)
source: "static"
# gpsd connection. Defaults match the well-known local socket; only
# change when running gpsd on a peer machine on the LAN.
gpsd_host: "127.0.0.1"
gpsd_port: 2947
uart_path: "/dev/ttyAMA0"
uart_baud: 9600
# How often the coordinator wakes to read the active source.
update_interval_seconds: 5
# Minimum acceptable fix mode: 0=any (incl. no-fix), 1=2D, 2=3D.
min_fix_quality: 1

# signal_health:
# green_rssi_floor: -100 # badge green when 1h avg RSSI is above this
# yellow_rssi_floor: -115 # badge yellow above this, red below
# min_packets_per_hour: 5 # hide badge when fewer packets in the last hour

# automation:
# enabled: false
# # Long random secret for LAN scripts (Home Assistant, Node-RED). Generate with:
# # openssl rand -hex 32
# token: ""
14 changes: 14 additions & 0 deletions docs/CONFIGURATION.md
Original file line number Diff line number Diff line change
Expand Up @@ -160,6 +160,20 @@ The setup wizard configures sources automatically. To add or remove a MeshCore c

When running both Meshtastic concentrator capture and a MeshCore USB companion, pin `meshcore_usb.serial_port` explicitly. Auto-detect can grab the wrong device when multiple Espressif boards are attached.

### Remote node config read (ADMIN, read-only)

**Node drawer → Remote Configuration** sends a single encrypted ADMIN `get_config_request` (or `get_owner_request`) per click. Responses display read-only in the drawer. Requires native TX (`transmit.enabled: true`) and a shared admin channel PSK on target nodes.

```yaml
meshtastic:
admin_key_b64: "base64PSK==" # PSK for the shared "admin" channel
admin_channel_name: "admin" # optional; default "admin"
```

- Admin-only API; audit action `admin.config_request` (target node + section only — no PSK in logs).
- 30 s response timeout with retry UI; 30 s debounce between requests per node.
- **Read-only** — no config writes in this release.

---

## Location (GPS) source
Expand Down
59 changes: 59 additions & 0 deletions frontend/css/node_drawer.css
Original file line number Diff line number Diff line change
Expand Up @@ -322,6 +322,65 @@
pointer-events: auto;
}

/* ---- Remote ADMIN config (node drawer) ---- */

.nd-remote-config__toolbar {
display: flex;
gap: 0.5rem;
align-items: center;
margin-bottom: 0.5rem;
}

.nd-remote-config__select {
flex: 1;
min-width: 0;
padding: 0.35rem 0.5rem;
border-radius: 4px;
border: 1px solid var(--border);
background: var(--bg-card);
color: var(--text-primary);
font-size: 0.85rem;
}

.nd-remote-config__btn {
flex-shrink: 0;
font-size: 0.8rem;
padding: 0.35rem 0.6rem;
}

.nd-remote-config__status {
font-size: 0.8rem;
color: var(--text-muted);
margin: 0.25rem 0 0.5rem;
}

.nd-remote-config__hint {
font-size: 0.8rem;
color: var(--text-muted);
margin: 0;
}

.nd-remote-config__hint code {
font-size: 0.75rem;
}

.nd-remote-config__result {
max-height: 220px;
overflow-y: auto;
border-top: 1px solid var(--border);
padding-top: 0.35rem;
}

.nd-remote-config__retry {
background: none;
border: none;
color: var(--accent);
cursor: pointer;
text-decoration: underline;
padding: 0;
font-size: inherit;
}

@media (max-width: 480px) {
.nd-drawer {
width: 100%;
Expand Down
Loading
Loading