2026-05-12 21:57:11 +00:00
|
|
|
# MeshAI Configuration
|
|
|
|
|
# LLM-powered Meshtastic assistant
|
|
|
|
|
#
|
|
|
|
|
# Copy this to config.yaml and customize as needed
|
|
|
|
|
# For Docker: mount as /data/config.yaml
|
|
|
|
|
|
|
|
|
|
# === BOT IDENTITY ===
|
|
|
|
|
bot:
|
|
|
|
|
name: ai # Bot's display name
|
|
|
|
|
owner: "" # Owner's callsign (optional)
|
|
|
|
|
respond_to_dms: true # Respond to direct messages
|
|
|
|
|
filter_bbs_protocols: true # Ignore advBBS sync/notification messages
|
|
|
|
|
|
|
|
|
|
# === MESHTASTIC CONNECTION ===
|
|
|
|
|
connection:
|
|
|
|
|
type: tcp # serial | tcp
|
|
|
|
|
serial_port: /dev/ttyUSB0 # For serial connection
|
|
|
|
|
tcp_host: localhost # For TCP connection (meshtasticd)
|
|
|
|
|
tcp_port: 4403
|
|
|
|
|
|
|
|
|
|
# === RESPONSE BEHAVIOR ===
|
|
|
|
|
response:
|
|
|
|
|
delay_min: 2.2 # Min delay before responding (seconds)
|
|
|
|
|
delay_max: 3.0 # Max delay before responding
|
|
|
|
|
max_length: 200 # Max chars per message chunk
|
|
|
|
|
max_messages: 3 # Max message chunks per response
|
|
|
|
|
|
|
|
|
|
# === CONVERSATION HISTORY ===
|
|
|
|
|
history:
|
|
|
|
|
database: /data/conversations.db
|
|
|
|
|
max_messages_per_user: 50 # Messages to keep per user
|
|
|
|
|
conversation_timeout: 86400 # Conversation expiry (seconds, 86400=24h)
|
|
|
|
|
auto_cleanup: true # Auto-delete old conversations
|
|
|
|
|
cleanup_interval_hours: 24 # How often to run cleanup
|
|
|
|
|
max_age_days: 30 # Delete conversations older than this
|
|
|
|
|
|
|
|
|
|
# === MEMORY OPTIMIZATION ===
|
|
|
|
|
memory:
|
|
|
|
|
enabled: true # Enable rolling summary memory
|
|
|
|
|
window_size: 4 # Recent message pairs to keep in full
|
|
|
|
|
summarize_threshold: 8 # Messages before re-summarizing
|
|
|
|
|
|
|
|
|
|
# === MESH CONTEXT ===
|
|
|
|
|
context:
|
|
|
|
|
enabled: true # Observe channel traffic for LLM context
|
|
|
|
|
observe_channels: [] # Channel indices to observe (empty = all)
|
|
|
|
|
ignore_nodes: [] # Node IDs to exclude from observation
|
|
|
|
|
max_age: 2592000 # Max age in seconds (default 30 days)
|
|
|
|
|
max_context_items: 20 # Max observations injected into LLM context
|
|
|
|
|
|
|
|
|
|
# === LLM BACKEND ===
|
|
|
|
|
llm:
|
|
|
|
|
backend: openai # openai | anthropic | google
|
|
|
|
|
api_key: "" # API key (or use LLM_API_KEY env var)
|
|
|
|
|
base_url: https://api.openai.com/v1 # API base URL
|
|
|
|
|
model: gpt-4o-mini # Model name
|
|
|
|
|
timeout: 30 # Request timeout (seconds)
|
|
|
|
|
system_prompt: >-
|
|
|
|
|
You are a helpful assistant on a Meshtastic mesh network.
|
|
|
|
|
Keep responses very brief - 1-2 short sentences, under 300 characters.
|
|
|
|
|
Only give longer answers if the user explicitly asks for detail or explanation.
|
|
|
|
|
Be concise but friendly. No markdown formatting.
|
|
|
|
|
google_grounding: false # Enable Google Search grounding (Gemini only, $35/1k queries)
|
|
|
|
|
|
|
|
|
|
# === WEATHER ===
|
|
|
|
|
weather:
|
|
|
|
|
primary: openmeteo # openmeteo | wttr | llm
|
|
|
|
|
fallback: llm # openmeteo | wttr | llm | none
|
|
|
|
|
default_location: "" # Default location for !weather (optional)
|
|
|
|
|
|
|
|
|
|
# === MESHMONITOR INTEGRATION ===
|
|
|
|
|
meshmonitor:
|
|
|
|
|
enabled: false # Enable MeshMonitor trigger sync
|
|
|
|
|
url: "" # MeshMonitor web UI URL (e.g. http://192.168.1.100:3333)
|
|
|
|
|
inject_into_prompt: true # Include trigger list in LLM prompt
|
|
|
|
|
refresh_interval: 300 # Seconds between trigger refreshes
|
|
|
|
|
|
|
|
|
|
# === KNOWLEDGE BASE (RAG) ===
|
|
|
|
|
knowledge:
|
|
|
|
|
enabled: false # Enable knowledge base search
|
|
|
|
|
db_path: "" # Path to knowledge SQLite database
|
|
|
|
|
top_k: 5 # Number of chunks to retrieve per query
|
|
|
|
|
|
|
|
|
|
# === MESH DATA SOURCES ===
|
|
|
|
|
# Connect to Meshview and/or MeshMonitor instances for live mesh
|
|
|
|
|
# network analysis. Supports multiple sources. Configure via TUI
|
|
|
|
|
# with meshai --config (Mesh Sources menu).
|
|
|
|
|
#
|
|
|
|
|
# mesh_sources:
|
|
|
|
|
# - name: "my-meshview"
|
|
|
|
|
# type: meshview
|
|
|
|
|
# url: "https://meshview.example.com"
|
|
|
|
|
# refresh_interval: 300
|
|
|
|
|
# enabled: true
|
|
|
|
|
#
|
|
|
|
|
# - name: "my-meshmonitor"
|
|
|
|
|
# type: meshmonitor
|
|
|
|
|
# url: "http://192.168.1.100:3333"
|
|
|
|
|
# api_token: "${MM_API_TOKEN}"
|
|
|
|
|
# refresh_interval: 300
|
|
|
|
|
# enabled: true
|
|
|
|
|
#
|
|
|
|
|
# - name: "mqtt-broker"
|
|
|
|
|
# type: mqtt
|
|
|
|
|
# host: "mqtt.meshtastic.org"
|
|
|
|
|
# port: 1883
|
|
|
|
|
# username: "meshdev"
|
|
|
|
|
# password: "large4cats"
|
|
|
|
|
# topic_root: "msh/US"
|
|
|
|
|
# use_tls: false
|
|
|
|
|
# enabled: true
|
|
|
|
|
mesh_sources: []
|
|
|
|
|
|
|
|
|
|
# === MESH INTELLIGENCE ===
|
|
|
|
|
# Geographic clustering and health scoring for mesh analysis.
|
|
|
|
|
# Requires mesh_sources to be configured with at least one data source.
|
|
|
|
|
#
|
|
|
|
|
# mesh_intelligence:
|
|
|
|
|
# enabled: true
|
|
|
|
|
# region_radius_miles: 40.0 # Radius for region clustering
|
|
|
|
|
# locality_radius_miles: 8.0 # Radius for locality clustering
|
|
|
|
|
# offline_threshold_hours: 24 # Hours before node considered offline
|
|
|
|
|
# packet_threshold: 500 # Non-text packets per 24h to flag
|
|
|
|
|
# battery_warning_percent: 20 # Battery level for warnings
|
|
|
|
|
# infra_overrides: [] # Node IDs to exclude from infrastructure
|
|
|
|
|
# region_labels: {} # Override auto-names: {"Twin Falls": "Magic Valley"}
|
|
|
|
|
mesh_intelligence:
|
|
|
|
|
enabled: false
|
|
|
|
|
region_radius_miles: 40.0
|
|
|
|
|
locality_radius_miles: 8.0
|
|
|
|
|
offline_threshold_hours: 24
|
|
|
|
|
packet_threshold: 500
|
|
|
|
|
battery_warning_percent: 20
|
|
|
|
|
infra_overrides: []
|
|
|
|
|
region_labels: {}
|
|
|
|
|
|
|
|
|
|
# === ENVIRONMENTAL FEEDS ===
|
|
|
|
|
# Live situational awareness from NWS, NOAA Space Weather, and Open-Meteo.
|
|
|
|
|
# Provides weather alerts, HF propagation assessment, and tropospheric ducting.
|
|
|
|
|
#
|
|
|
|
|
environmental:
|
|
|
|
|
enabled: false
|
|
|
|
|
nws_zones:
|
|
|
|
|
- "IDZ016" # Western Magic Valley
|
|
|
|
|
- "IDZ030" # Southern Twin Falls County
|
|
|
|
|
|
|
|
|
|
# NWS Weather Alerts (api.weather.gov)
|
|
|
|
|
nws:
|
|
|
|
|
enabled: true
|
|
|
|
|
tick_seconds: 60
|
|
|
|
|
areas: ["ID"]
|
|
|
|
|
severity_min: "moderate"
|
|
|
|
|
user_agent: "(meshai.example.com, ops@example.com)" # REQUIRED by NWS
|
|
|
|
|
|
|
|
|
|
# NOAA Space Weather (services.swpc.noaa.gov)
|
|
|
|
|
swpc:
|
|
|
|
|
enabled: true
|
|
|
|
|
|
|
|
|
|
# Tropospheric ducting assessment (Open-Meteo GFS, no auth)
|
|
|
|
|
ducting:
|
|
|
|
|
enabled: true
|
|
|
|
|
tick_seconds: 10800 # 3 hours
|
|
|
|
|
latitude: 42.56 # center of mesh coverage area
|
|
|
|
|
longitude: -114.47
|
|
|
|
|
|
|
|
|
|
# NIFC Fire Perimeters (Phase 2)
|
|
|
|
|
fires:
|
|
|
|
|
enabled: false
|
|
|
|
|
tick_seconds: 600
|
|
|
|
|
state: "US-ID"
|
|
|
|
|
|
|
|
|
|
# Avalanche Advisories (Phase 2)
|
|
|
|
|
avalanche:
|
|
|
|
|
enabled: false
|
|
|
|
|
tick_seconds: 1800
|
|
|
|
|
center_ids: ["SNFAC"]
|
|
|
|
|
season_months: [12, 1, 2, 3, 4]
|
|
|
|
|
|
|
|
|
|
# === WEB DASHBOARD ===
|
|
|
|
|
dashboard:
|
|
|
|
|
enabled: true
|
|
|
|
|
port: 8080
|
|
|
|
|
host: "0.0.0.0"
|