Variables et réglages
Ce qui se décide dans l’environnement, ce qui vit dans la base.
Meshloom a deux surfaces de configuration, et elles ne se recouvrent pas.
L’environnement décide de ce qui doit être connu avant que quoi que ce soit tourne : où écrire la base, si les bots sont autorisés, si une authentification s’applique, quels contournements de diagnostic sont actifs. Ces variables sont lues au démarrage. Les changer implique de redémarrer le service.
Les réglages d’exécution vivent dans la table app_settings de la base et se modifient à chaud depuis l’interface ou via GET / PATCH /api/settings. Le transport radio est un réglage d’exécution, pas une variable d’environnement. Voir Transports radio.
Où écrire les variables
| Installation | Emplacement |
|---|---|
| Paquet systemd | /etc/meshloom/meshloom.env |
| Docker | bloc environment: du Compose, ou un .env |
| Checkout | l’environnement du shell qui lance uv run uvicorn |
Pour l’installation par paquet, bash scripts/setup/install_service.sh peut être rejoué pour réécrire ce fichier sans l’éditer à la main.
Connexion radio
Le transport se configure dans l’interface et est stocké dans app_settings :
| Colonne | Défaut | Description |
|---|---|---|
radio_transport |
(non défini / en pause) | serial, tcp ou ble |
radio_serial_port |
vide | Port série ; vide = auto-détection |
radio_serial_baudrate |
115200 |
Débit série |
radio_tcp_host |
vide | Hôte TCP de la radio |
radio_tcp_port |
5000 |
Port TCP |
radio_ble_address |
vide | Adresse BLE de la radio |
radio_ble_pin |
vide | Code PIN BLE, obligatoire avec BLE |
Tant que radio_transport n’est pas défini, la radio reste en pause. Ne définissez pas MESHCORE_SERIAL_PORT, MESHCORE_TCP_HOST ni MESHCORE_BLE_ADDRESS pour choisir un transport.
Serveur et données
| Variable | Défaut | Description |
|---|---|---|
MESHCORE_DATABASE_PATH |
data/meshcore.db |
Emplacement de la base SQLite |
MESHCORE_LOG_LEVEL |
INFO |
DEBUG, INFO, WARNING, ERROR |
MESHCORE_VAPID_SUBJECT |
mailto:noreply@meshcore.local |
Repli du sujet VAPID si app_settings.vapid_subject est vide |
MESHCORE_PUBLIC_URL |
(vide) | Acceptée mais sans effet aujourd’hui : aucun chemin de production ne la lit (le manifeste web utilise des URL relatives) |
MESHCORE_MANAGED_PORTS |
false |
Posée par un hôte qui décide lui-même des ports d’écoute, comme l’add-on Home Assistant. Le port du proxy vient alors de l’hôte, et le champ dans les réglages le dit au lieu d’accepter une valeur sans effet |
MESHCORE_RADIO_PROXY_PORT |
(vide) | Port d’écoute du proxy radio, choisi par l’hôte. Utilisée seulement avec MESHCORE_MANAGED_PORTS=true, où elle remplace le port enregistré à chaque démarrage. L’add-on Home Assistant la fixe au port qu’il redirige (5051) |
MESHCORE_EMBEDDABLE_SAME_ORIGIN |
false |
Autorise une page de la même origine à afficher Meshloom dans un cadre. L’ingress de Home Assistant fait exactement cela, et les en-têtes par défaut le refusent — ce qui se voit comme un panneau blanc avec un 200 parfaitement sain dans le journal |
MESHLOOM_COMMUNITY |
(on pour une base neuve) | Seed Community sur une base toute neuve. Absent ou 1 = on ; 0 / false / off = opt-out. Les bases existantes ne sont jamais basculées |
MESHLOOM_COMMUNITY_IATA |
(vide) | Code IATA à 3 lettres. Tant qu’elle est posée, elle remplace à chaque lecture le code enregistré dans l’interface : un changement fait dans les Réglages ne prend pas effet |
MESHLOOM_COMMUNITY_BROKER_HOST |
(vide) | Remplace à chaque lecture l’hôte MQTT Community (défaut mqtt.meshloom.app) tant qu’elle est posée |
MESHLOOM_COMMUNITY_API_BASE |
(vide) | Remplace à chaque lecture l’origine de l’API Community (défaut https://api.meshloom.app) tant qu’elle est posée |
MESHLOOM_COMMUNITY_LOCKED |
false |
À 1, l’interface ne peut pas activer Community |
Le sujet VAPID se règle d’abord dans Réglages → Notifications. MESHCORE_VAPID_SUBJECT n’est utilisé que si ce champ est vide. Apple exige un mailto: ou un https: réel : APNs rejette le domaine .local par défaut avec 403 BadJwtToken. Google FCM l’accepte. Voir Notifications push et la documentation Apple.
Sécurité
| Variable | Défaut | Description |
|---|---|---|
MESHCORE_DISABLE_BOTS |
false |
Désactive entièrement le système de bots au démarrage |
MESHCORE_BASIC_AUTH_USERNAME |
(vide) | Identifiant HTTP Basic pour toute l’application |
MESHCORE_BASIC_AUTH_PASSWORD |
(vide) | Mot de passe associé |
MESHCORE_ENABLE_LOCAL_PRIVATE_KEY_EXPORT |
false |
Autorise GET /api/radio/private-key |
Les deux variables d’authentification doivent être définies ensemble. L’une sans l’autre est une erreur de validation au démarrage. La portée exacte de chacune de ces options est décrite dans Sécurité.
Diagnostic et contournements
Ces variables existent pour diagnostiquer ou contourner des radios qui se comportent mal. Aucune n’est nécessaire en fonctionnement normal.
| Variable | Défaut | Description |
|---|---|---|
MESHCORE_ENABLE_MESSAGE_POLL_FALLBACK |
false |
Fait passer l’audit radio d’un contrôle horaire à un sondage get_msg() toutes les 10 secondes |
MESHCORE_FORCE_CHANNEL_SLOT_RECONFIGURE |
false |
Désactive la réutilisation des slots de salon et force set_channel(...) avant chaque envoi |
MESHCORE_LOAD_WITH_AUTOEVICT |
false |
Charge les contacts en mode autoevict, la radio évinçant elle-même les plus anciens |
MESHCORE_SKIP_POST_CONNECT_SYNC |
false |
Saute la synchronisation contacts/salons, la publicité de démarrage et les boucles périodiques |
__CLOWNTOWN_DO_CLOCK_WRAPAROUND |
false |
Très expérimental : tente un débordement d’horloge sur 32 bits quand la RTC est bloquée dans le futur |
Trois précisions.
MESHCORE_ENABLE_MESSAGE_POLL_FALLBACK ne crée pas une tâche : elle change la fréquence d’une tâche qui tourne toujours. Par défaut, cet audit passe une fois par heure et vérifie deux choses — si des messages sont restés sur la radio sans remonter par abonnement d’événement, et si les attentes de l’application sur les slots de salon correspondent encore à la réalité de la radio. En cas d’écart, une erreur apparaît dans l’interface et dans les logs.
MESHCORE_FORCE_CHANNEL_SLOT_RECONFIGURE retarde chaque envoi de salon d’environ 500 ms. À réserver aux cas où un autre client modifie les slots sous les pieds de Meshloom.
MESHCORE_SKIP_POST_CONNECT_SYNC est une trappe de sortie de diagnostic. L’enregistrement des gestionnaires, l’export de clé, la synchronisation d’horloge et la récupération automatique des messages continuent ; c’est la prise en main des contacts et des salons qui est mise de côté. Utile quand l’état de la radio doit rester intact. Pas pour un usage normal.
__CLOWNTOWN_DO_CLOCK_WRAPAROUND est un dernier recours pour un nœud dont l’horloge est coincée dans le futur, sans mode rescue ni temps GPS disponibles. Elle repose sur un comportement dépendant de la carte et peut ne pas être sûre ni efficace sur toutes les cibles MeshCore.
Réglages d’exécution en base
Ce qui suit vit dans app_settings et se pilote depuis l’interface ou PATCH /api/settings. Ce n’est pas configurable par l’environnement.
radio_transport,radio_serial_port,radio_serial_baudrate,radio_tcp_host,radio_tcp_port,radio_ble_address,radio_ble_pinmax_radio_contacts— capacité de contacts visée sur la radio, base de calcul des remplissages et déchargementsauto_decrypt_dm_on_advert— déchiffrement historique des messages directs quand une clé devient connueadvert_interval,last_advert_time— publicité périodique,0désactiveflood_scope,known_regions— portée de flood régionale et liste de régions candidates au décodageblocked_keys,blocked_names,discovery_blocked_types— listes de blocagetracked_telemetry_repeaters,tracked_telemetry_contacts,telemetry_interval_hours— collecte de télémétrieauto_resend_channel— renvoi automatique de salonlast_message_times— horodatages de tri côté serveurpush_defaults,push_conversation_overrides,vapid_subject— règles et sujet VAPID du push web (l’ancienpush_conversationsn’est plus la surface de préférence)vapid_private_key,vapid_public_key— paire VAPID générée au premier démarrage
Les intégrations MQTT, bots, webhooks, Apprise et SQS ne sont pas dans app_settings : elles vivent dans la table fanout_configs et se gèrent via /api/fanout. L’état Community est stocké sur app_settings mais n’est pas dans GET / PATCH /api/settings : utiliser /api/community. Voir Fanout et Meshloom Community.
Les conséquences radio de max_radio_contacts, flood_scope et path_hash_mode sont détaillées dans Radio, contacts et salons.