# ============================================================================ # MeshCore Observer — Configuration # ============================================================================ # # Copy this file to observer_config.yaml and adjust settings as needed. # All settings have sensible defaults — the observer will work without # a config file. # # Author: PE1HVH # SPDX-License-Identifier: MIT # Copyright: (c) 2026 PE1HVH # ============================================================================ # ── Observer settings ──────────────────────────────────────────────── observer: # Path to archive directory (where meshcore_gui/bridge write JSON files) archive_dir: "~/.meshcore-gui/archive" # Seconds between archive directory polls poll_interval_s: 2.0 # Maximum number of messages displayed in dashboard max_messages_display: 100 # Maximum number of RX log entries displayed in dashboard max_rxlog_display: 50 # ── GUI settings ───────────────────────────────────────────────────── gui: # Dashboard TCP port (GUI=8081, Bridge=9092, Observer=9093) port: 9093 # Browser tab title title: "MeshCore Observer" # ── MQTT Uplink to LetsMesh ────────────────────────────────────────── # # Publishes RX log packet data to the LetsMesh analyzer # (analyzer.letsmesh.net) via MQTT over WebSocket+TLS. # # DISABLED by default — set enabled: true and provide keys to activate. # # Required for MQTT: # - Device public key (64-char hex) # - Device private key (64-char hex) for Ed25519 JWT signing # - IATA airport code (3 letters) for topic namespace # # Private key can be provided via: # 1. MESHCORE_PRIVATE_KEY environment variable (recommended) # 2. private_key_file path (permissions should be 600) # 3. private_key inline (not recommended for production) # mqtt: # Master enable switch — MUST be explicitly set to true enabled: false # 3-letter IATA airport code for your location (used in MQTT topic path) # Examples: AMS (Amsterdam), JFK (New York), LHR (London) iata: "AMS" # Device identity (required when MQTT is enabled) # Can also be set via MESHCORE_PUBLIC_KEY env var public_key: "" # Device name shown as 'origin' in published packets device_name: "MeshCore Observer" # Private key for Ed25519 JWT authentication # SECURITY: prefer private_key_file or MESHCORE_PRIVATE_KEY env var private_key: "" # Path to file containing private key (more secure than inline) # File should contain only the 64-char hex key, permissions 600 private_key_file: "" # ── Broker endpoints ── # Multiple brokers can be configured (e.g. EU + US) brokers: - name: "letsmesh-eu" server: "mqtt-eu-v1.letsmesh.net" port: 443 transport: "websockets" tls: true enabled: true - name: "letsmesh-us" server: "mqtt-us-v1.letsmesh.net" port: 443 transport: "websockets" tls: true enabled: false # ── Privacy filter ── # Which packet types to upload. Empty list = upload ALL types. # Packet types: # 0=REQ, 1=RESPONSE, 2=TXT_MSG, 3=ACK, 4=ADVERT, # 5=GRP_TXT, 6=GRP_DATA, 7=ANON_REQ, 8=PATH, 9=TRACE # # Examples: # upload_packet_types: [] # Upload everything # upload_packet_types: [4] # Only adverts # upload_packet_types: [4, 5] # Adverts + group text upload_packet_types: [] # Seconds between status topic republish (0 = only on connect) status_interval_s: 300 # Seconds between reconnect attempts reconnect_delay_s: 10 # Maximum reconnect retries (0 = infinite) max_reconnect_retries: 0 # JWT token lifetime in seconds (auto-refreshed before expiry) token_lifetime_s: 3600