Ajout publication MQTT (PubSubClient)

- Topics individuels par capteur sous un topic de base configurable (défaut: solar/)
  PV, batterie (tension/SOC/temp/statut), load, énergie, soleil, RS485, relais, entrées DI
- Abonnement relay/1/set et relay/2/set pour piloter les relais depuis MQTT
- Config NVS : serveur, port, user/pass optionnel, topic base, intervalle (défaut 30s)
- Reconnexion automatique toutes les 15s si broker inaccessible
- Publication immédiate après connexion et après changement de config
- Route GET/POST /api/mqtt + UI onglet Config avec liste des topics générée dynamiquement
- Stubs QEMU (#ifndef QEMU_BUILD)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-14 07:13:05 +02:00
parent 11559de21e
commit 14b3967590
7 changed files with 422 additions and 1 deletions
+51
View File
@@ -425,6 +425,57 @@
</div>
</div>
<div class="regle-form">
<div class="form-titre">Publication MQTT</div>
<p class="aide">Envoie les données des capteurs vers un broker MQTT (Home Assistant, Mosquitto…). Les relais sont pilotables via les topics de commande.</p>
<div id="mqtt-status-bar" class="ec-statusbar">Chargement…</div>
<div class="form-ligne">
<label>Activé</label>
<select id="mqtt-enabled">
<option value="false">Non</option>
<option value="true">Oui</option>
</select>
</div>
<div class="form-ligne">
<label>Serveur</label>
<input type="text" id="mqtt-server" placeholder="192.168.1.36" autocomplete="off">
</div>
<div class="form-ligne">
<label>Port</label>
<input type="number" id="mqtt-port" min="1" max="65535" value="1883">
</div>
<div class="form-ligne">
<label>Utilisateur</label>
<input type="text" id="mqtt-user" placeholder="Optionnel" autocomplete="off">
</div>
<div class="form-ligne">
<label>Mot de passe</label>
<input type="password" id="mqtt-pass" placeholder="Optionnel" autocomplete="new-password">
</div>
<div class="form-ligne">
<label>Topic de base <span class="ec-aide" title="Tous les topics seront préfixés par cette valeur. Ex: solar → solar/battery/voltage"></span></label>
<input type="text" id="mqtt-base" placeholder="solar" autocomplete="off">
</div>
<div class="form-ligne">
<label>Intervalle</label>
<div class="ec-field-unit">
<input type="number" id="mqtt-interval" min="5" max="3600" value="30">
<span class="ec-unit">s</span>
</div>
</div>
<div id="mqtt-topics-info" class="hidden">
<div class="form-section-label" style="margin-top:0.5rem">Topics publiés</div>
<div id="mqtt-topics-list" class="aide" style="font-size:0.72rem;line-height:1.7"></div>
<div class="form-section-label" style="margin-top:0.4rem">Topics de commande</div>
<div id="mqtt-cmd-list" class="aide" style="font-size:0.72rem;line-height:1.7"></div>
</div>
<button class="btn btn-primaire btn-plein" onclick="sauvegarderMqtt()">Enregistrer et appliquer</button>
</div>
<div class="regle-form">
<div class="form-titre">VPN WireGuard</div>
<p class="aide">Tunnel chiffré vers votre serveur WireGuard. Nécessite une connexion WiFi (mode STA). Désactivé par défaut — la configuration locale reste accessible même si le VPN est coupé.</p>