mirror of
https://github.com/pyMC-dev/pyMC_Repeater.git
synced 2026-07-04 17:02:23 +02:00
dfacfeade8
Introduces a 'set format and forget' workflow for MQTT brokers. Users
reference a bundled preset by name inside the existing brokers: list,
and the package supplies the endpoints, audiences, and TLS settings.
Endpoint changes ship via 'pip install -U' instead of manual edits.
What changes
- New repeater/presets/ package with a tiny lazy YAML loader and two
bundled presets: waev (mqtt-{a,b}.waev.app) and letsmesh (EU + US).
- New format-family constant MC2MQTT_FORMATS = ('meshcoretomqtt',
'letsmesh', 'waev') replaces the inline tuple in topic resolution.
The legacy 'mqtt' format keeps its custom-topic semantics unchanged.
- Two-pass broker assembly in mqtt_handler.py: pass 1 expands every
{preset: <name>} entry inline; pass 2 collapses duplicates by name
with later-wins semantics. Place override entries AFTER preset
entries.
- Hard-coded LETSMESH_BROKERS constant deleted; its data now lives in
repeater/presets/letsmesh.yaml.
- convert_letsmesh_to_broker_config() collapsed from ~70 to ~25 lines
by emitting {preset: letsmesh} plus disable overrides for unwanted
brokers. Honors broker_index in (-1, 0, 1), additional_brokers, and
enabled flag exactly as before.
- update_mqtt_config API endpoint accepts {preset: <name>} entries and
passes them through unchanged so the web UI can author them when the
frontend is updated.
- config.yaml.example documents the preset entry shape, the override
rule, and the format family hierarchy.
- pyproject.toml ships presets/*.yaml as package data.
How to use
mqtt_brokers:
iata_code: "LAX"
brokers:
- preset: waev
# Override a single preset broker:
brokers:
- preset: waev
- name: waev-b
enabled: false
Tests
- tests/test_presets.py: 9 tests covering loader, expand/merge,
MC2MQTT topic-family parity, and parametrized legacy migration.
Co-Authored-By: Oz <oz-agent@warp.dev>
38 lines
1.1 KiB
YAML
38 lines
1.1 KiB
YAML
# LetsMesh MC2MQTT broker preset.
|
|
#
|
|
# LetsMesh is the operator of the public MeshCore Packet Analyzer
|
|
# infrastructure. These brokers speak the MeshCoreToMQTT (MC2MQTT)
|
|
# protocol with the "letsmesh" format flavor, which today shares the
|
|
# canonical MC2MQTT topic structure (meshcore/{IATA}/{PUBLIC_KEY}/...).
|
|
#
|
|
# Reference all LetsMesh endpoints with: brokers: [{preset: letsmesh}]
|
|
#
|
|
# Note: order matters for backward compatibility with the legacy
|
|
# letsmesh.broker_index field. Index 0 is Europe, index 1 is US West.
|
|
brokers:
|
|
- name: "Europe (LetsMesh v1)"
|
|
enabled: true
|
|
host: mqtt-eu-v1.letsmesh.net
|
|
port: 443
|
|
transport: "websockets"
|
|
audience: "mqtt-eu-v1.letsmesh.net"
|
|
use_jwt_auth: true
|
|
format: letsmesh
|
|
retain_status: false
|
|
tls:
|
|
enabled: true
|
|
insecure: false
|
|
|
|
- name: "US West (LetsMesh v1)"
|
|
enabled: true
|
|
host: mqtt-us-v1.letsmesh.net
|
|
port: 443
|
|
transport: "websockets"
|
|
audience: "mqtt-us-v1.letsmesh.net"
|
|
use_jwt_auth: true
|
|
format: letsmesh
|
|
retain_status: false
|
|
tls:
|
|
enabled: true
|
|
insecure: false
|