Dev plugins

Developpement de plugins MeshCore

Ajouter des modules custom et etendre MeshCore sans toucher au coeur plus que necessaire

Qu est-ce qu un plugin MeshCore ?

MeshCore vise une approche modulaire. Une architecture de plugins permet d ajouter des fonctions (capteurs, logs, bridges) sans forker lourdement le coeur.

La plugin API expose des hooks sur des evenements (message recu, node detectee, telemetrie, decisions de routage) pour construire des comportements specifiques.

Contexte France: reseau en construction. Si vous testez un plugin, faites-le d abord sur un noyau local (2-5 noeuds) pour mesurer l impact radio et la stabilite.

Vue d ensemble de l architecture

Les plugins suivent souvent une logique event-driven avec quelques fichiers clefs

Manifest plugin

Un fichier manifest declare le nom, version, et capacites:

plugin.json avec metadata et dependencies

Handlers d events

Enregistrement de callbacks pour des evenements:

onMessageReceived(), onNodeDetected(), onRouteUpdated()

State

Stockage d etat (si supporte) pour conserver des infos entre reboots:

plugin.setState(), plugin.getState(), persistence

Acces aux APIs

Utiliser les fonctions du coeur via API:

sendMessage(), getNodes(), getRoutes(), getTelemetry()

Etapes (niveau dev)

De l environnement de build au test sur hardware

1

Etape 1: environnement

Cloner le repo et installer les tools (ex: PlatformIO):

git clone https://github.com/meshcore/meshcore-firmware.git
cd meshcore-firmware
git submodule update --init --recursive
pip install platformio
pio run
2

Etape 2: skeleton

Creer un dossier plugin avec les fichiers de base:

mkdir -p src/plugins/myPlugin
touch src/plugins/myPlugin/plugin.json
touch src/plugins/myPlugin/myPlugin.h
touch src/plugins/myPlugin/myPlugin.cpp
3

Etape 3: manifest

Declarer metadata et capacites:

{\n "name": "MyPlugin",\n "version": "1.0.0",\n "author": "Your Name",\n "description": "Custom plugin",\n "dependencies": ["core", "radio"],\n "capabilities": ["messaging", "telemetry"]\n}
4

Etape 4: logique

Implementer votre code C++ et vos handlers (messages, telemetrie, timers).

5

Etape 5: build + test

Compiler, flasher sur un device de test, verifier logs via serial monitor.

Exemple: plugin capteur temperature

Exemple simplifie: lire un capteur et diffuser une valeur (attention airtime).

#include "myPlugin.h"\n#include <DHT.h>\n\n#define DHT_PIN 4\n#define DHT_TYPE DHT22\nDHT dht(DHT_PIN, DHT_TYPE);\n\nvoid MyPlugin::init() {\n dht.begin();\n Log.info("MyPlugin initialized");\n}\n\nvoid MyPlugin::loop() {\n static unsigned long lastRead = 0;\n if (millis() - lastRead > 60000) { // chaque minute\n float temp = dht.readTemperature();\n float humidity = dht.readHumidity();\n\n if (!isnan(temp) && !isnan(humidity)) {\n String payload = "T:" + String(temp, 1) + "C H:" + String(humidity, 1) + "%";\n meshcore.sendMessage(payload, BROADCAST_ADDR);\n Log.info("Sent: " + payload);\n }\n lastRead = millis();\n }\n}\n\nvoid MyPlugin::onMessageReceived(MeshMessage* msg) {\n if (msg->payload.startsWith("TEMP_REQUEST")) {\n float temp = dht.readTemperature();\n meshcore.sendMessage("T:" + String(temp, 1) + "C", msg->sender);\n }\n}

Comment ca marche ?

Le plugin lit le capteur toutes les 60 s et envoie une courte valeur. Il repond aussi a une requete "TEMP_REQUEST". En vrai reseau, pensez sobriete: intervalle plus long, canal prive, et eviter de spammer.

Idees de plugins

🌑️

Capteurs

Integrer temperature/pression/IAQ et envoyer en telemetrie

πŸ“Š

Data logging

Logger des events sur SD ou vers une gateway

πŸ””

Alertes

Alerter sur seuils (batterie, capteurs) ou messages critiques

πŸ—ΊοΈ

Mapping

Visualiser topologie, liens, positions, signaux

πŸ”Œ

Bridges

Connecter MeshCore a d autres reseaux (WiFi, MQTT, etc.)

πŸ€–

Automatisation

Bots et comportements auto

Bonnes pratiques

Pour rester stable et sobre (important en LoRa)

  • βœ“

    Plugin focalise - une fonctionnalite claire, pas une usine a gaz

  • βœ“

    Respect des ressources - memoire/CPU limites, surtout sur ESP32

  • βœ“

    Eviter de bloquer - pas de delays longs dans la loop

  • βœ“

    Logs propres - erreurs explicites pour depannage

  • βœ“

    Doc - README et exemples pour utilisateurs

  • βœ“

    Test terrain - tester en vrai radio, pas seulement au bureau

FAQ

Dans quel langage ecrire un plugin ?

Sur firmware embarque: surtout C/C++. Pour des integrations externes (gateway), Python est souvent plus simple via serial/MQTT.

Puis-je utiliser des librairies Arduino ?

Souvent oui, selon le framework et les conflits. Attention au poids memoire.

Comment debugger ?

Serial monitor et logs (info/debug/error). Pour du plus avance: debugger hardware selon plateforme.

Un plugin peut modifier la radio ?

Selon permissions/support, oui. Faites-le prudemment: une mauvaise config peut degrader le reseau.

Comment distribuer un plugin ?

Souvent via un repo (code + manifest) et une procedure de build. Certains projets evoluent vers des approches plus simples, mais cela depend du firmware.

Peut-on faire du commercial ?

MeshCore est open source; verifiez les licences. Beaucoup choisissent open source + donations, ou facturent du support.

Demarrer en dev plugins

Avec une approche sobre, les plugins permettent d adapter MeshCore a des besoins locaux sans casser le coeur.

Faites un premier plugin simple, testez en petit noyau, puis partagez vos retours.

Articles connexes