Sortie · sept. 2026

AccueilWatt-ModulatorManuel

INTERFACE WEB · RÉFÉRENCE ÉCRAN PAR ÉCRAN

Manuel — Watt-Modulator

Chaque page de l'interface web, chaque zone de saisie, chaque bouton et badge : ce que ça fait, les valeurs acceptées et les comportements.

Cette page est une référence d'écran. Pour les concepts (régulation PV, chaîne parent/enfant, sécurité thermique), voir le guide thématique. Les valeurs se règlent dans l'interface web embarquée du module, servie sur son adresse locale.

Conventions de lecture

Le id est l'identifiant technique du champ (utile au support). Modifier un champ ne change la valeur qu'en mémoire : tant que vous n'avez pas cliqué un bouton Sauvegarder, rien n'est écrit — un redémarrage perdrait la modification. Un indicateur « modifications non enregistrées » s'allume dès qu'un champ est touché.

Badges utilisés dans l'interface

Immédiat appliqué à chaud   Reboot effectif au prochain démarrage   non testé fonction désactivée   conditionnel visible selon le matériel

Éléments communs à toutes les pages

La barre latérale, la barre du haut et le pied de page sont identiques partout (sauf en mode point d'accès). Ils ne sont pas redécrits dans chaque écran.

Barre latérale (menu)

ÉlémentRôle
Watt-ModulatorLien vers la racine / (tableau de bord).
Bloc d'étatVersion du firmware, SSID Wi-Fi, signal RSSI en dBm — rafraîchis en continu depuis /state.
Modulator · Broker MQTT · Minuteur · Statistiques · SauvegardesAccès aux pages de réglage.
Informations · Debug · Console logsDiagnostic.
RebootAppelle /reboot : redémarrage immédiat.

Barre du haut & pied de page

En haut : un bandeau d'état global (vert = normal, orange = partiel, rouge = erreur) et l'horloge locale. En bas : lien vers le site et l'année.

Écran « Configuration »

Accès : menu › Modulator. Règle la sécurité thermique, la plage de puissance, le type de charge, la chaîne parent/enfant, le mode de pilotage, le boost, les sondes, l'heure (NTP) et la langue.

Mode point d'accès. Tant que le module n'est pas connecté au Wi-Fi, cette page redirige vers l'écran Wi-Fi (on configure d'abord le réseau).

Carte « Gestion de la température » 🌡

La sonde coupe le dimmer dès Température max et ne le redémarre que sous (MaxTemp − Trigger %).

Champ (id)TypePlageDéfautRôle
Température max (°C) — maxtempnombre0–8065Au-delà, le dimmer est coupé immédiatement. Ex. 65 °C ECS, 32 °C piscine.
Trigger / Hystérésis (%) — triggernombre1–5010Redémarre quand T < (MaxTemp − Trigger %). Ex. 65 °C / 10 % → 58,5 °C. Évite le yo-yo ON/OFF.

Alerte. Si maxtemp = 0, un bandeau rouge prévient : le dimmer resterait coupé en permanence. Mettre une valeur réaliste.

Carte « Gestion de la puissance » 🔌

Champ (id)TypePlageDéfautRôle
Min Power (%) — minpownombre0–1000En dessous, le dimmer s'éteint. Ex. 5 % — évite les micro-puissances où le triac ne conduit pas.
Max Power (%) — maxpownombre1–100100Plafond de puissance. Ex. 80 % — protège une résistance.
Puissance au démarrage (%) — startingpownombre0–1000Plancher à la 1ʳᵉ commande (« coup de pouce »).
État au démarrage — dimmer_on_offlisteActif / InactifActifInactif = refuse toute commande au boot (maintenance).

Conditionnel. « État au démarrage » est désactivé tant qu'aucune sonde n'est affectée au dimmer (voir Sondes › Affectation).

Carte « Appareil et Charge » 🔌

Champ (id)TypeValeursRôle
Type d'appareil — device_typelisteBallon ECS · Piscine · Chauffage · VMC · Recharge VE · GénériqueAdapte les libellés et l'aide. « Piscine » renomme le champ ci-dessous et rappelle la sonde obligatoire.
Puissance de la charge (W) — charge1nombre≥ 0 (ex. 1000)Puissance de la résistance / du réchauffeur sur la sortie dimmer.

Carte « Dimmer enfant (child) » 🗺

Chaîne un second dimmer (architecture parent → enfant).

Élément (id)TypeRôle
Dimmer enfant IP / Hostname — childtextenone ou IP/hostname. Un lien http://<enfant> s'affiche dès qu'une valeur valide est saisie.
Bouton RechercherboutonDécouverte mDNS (/scandimmers). Résultats en badges cliquables. conditionnel caché sur ESP8266 (mDNS off → saisie manuelle).
Mode de répartition — delesterlisteDésactivé · Délester (surplus → enfant) · Égal (même consigne).
Bypass auto si ZC perdu — bypass_on_zc_losscaseSi le zero-cross local disparaît : sortie locale à 0 W et toute la puissance transmise à l'enfant. La chaîne survit à une panne du matériel local.
Délai d'entrée / sortie (s) — bypass_zc_enter_s / bypass_zc_exit_snombreTemporisations avant d'activer (5–600 s, déf. 30) puis de quitter (3–600 s, déf. 10) le bypass.

Carte « Mode de fonctionnement » 📡

Élément (id)TypeRôle
Mode autonome — mode_pilotage_autonomeradioPar défaut. Piloté en HTTP par un Guardian, ou manuellement.
Mode piloté MQTT — mode_pilotage_mqttradionon testé Désactivé. Recevrait la consigne via MQTT.
Source PV — SubscribePV + bouton Découvrirtexteconditionnel visible en mode MQTT seulement. Topic publiant {"power": X} ; le bouton découvre les Guardians (/scanpvsources).

Carte « Boost (marche forcée) » 🔥

Force la chauffe à pleine puissance pendant une durée, en ignorant la régulation PV.

Champ (id)TypePlageDéfautRôle
Température max (°C) — boost_tempnombre0–8060Sécurité thermique pendant le boost.
Puissance (%) — boost_powernombre1–100100Niveau forcé.
Durée (minutes) — boost_durationnombre5–48060Durée. Un libellé HH:MM se met à jour en direct.

Alerte. boost_temp = 0 désactive la sécurité température pendant la marche forcée.

Carte « Sonde de température » 🌡

Bouton d'en-tête Rechercher : scan du bus OneWire (/scandallas).

Sondes locales (Dallas) — la liste affiche les sondes détectées (badge « maître ») ; DALLAS reçoit l'adresse ROM 16 hex (un clic sur une sonde la remplit).

Sondes distantes (MQTT) — 3 slots indépendants SubscribeTEMP1/2/3 ; bouton Découvrir (/scantempprobes).

Affectation par device — chaque organe reçoit sa sonde :

Champ (id)ValeursRôle
Sonde du dimmer — dallas_dimmer(aucune) · sondes locales · MQTT1/2/3Protège le dimmer. « (aucune) » désactive le cap thermique et l'activation.
Sonde relais 1 / 2 — dallas_relay1 / dallas_relay2idemSécurité des relais ; à défaut, la sonde maître est utilisée.

Toute modification d'affectation est enregistrée immédiatement. Alertes possibles : sonde réutilisée par plusieurs devices, ou aucune sonde affectée.

Cartes « NTP & fuseau » 🕐 et « Langue » 🌐

Élément (id)Rôle
Serveur NTP — ntp_server + bouton TesterAdresse du serveur de temps ; le bouton vérifie la synchro (/testntp).
Fuseau horaire — ntp_timezoneListe mondiale ; gère l'heure d'été automatiquement.
Langue — langFR · EN · ES · IT · DE. Changement immédiat sur la page courante.

Le bouton vert Sauvegarder et Appliquer envoie tous les champs, écrit en flash, republie l'auto-découverte MQTT et applique le NTP. Il ne couvre pas les cartes GPIO et Cloud, qui ont leur propre bouton.

Cartes « GPIO » 🔧 et « Relais cloud » ☁

La carte GPIO (repliable) réaffecte les broches. Chacune montre sa valeur compilée par défaut.

Champ (id)PlageEffet
Bus OneWire — gpio_one_wire0–40Réinitialise la détection des sondes. Immédiat
Dimmer / Zero-cross / Relais 1-2 / Ventilateur0–40Broches de commande. Reboot
OLED SDA / SCL — gpio_oled_*0–48conditionnel si écran OLED (ESP32). Reboot
Résolution Dallas — gpio_temp_precision9–12 bitsPrécision / temps de conversion. Reboot

Relais cloud (ESP32 uniquement). Masquée par défaut, elle n'apparaît que si le firmware l'expose. Active l'envoi périodique d'un instantané chiffré (lecture seule, zero-knowledge) au relais cloud, pour la consultation à distance via l'app. Désactivée par défaut.

Données dynamiques & pièges

  • /state est interrogé toutes les 5 s (état dimmer, température, puissance, sondes, capacité mDNS) ; /config pré-remplit les champs au chargement.
  • ESP8266 : boutons de découverte masqués (mDNS off), carte Cloud absente. Le mode MQTT est volontairement désactivé. Les scans sont différés (déclenchement puis sondage du résultat).

Écran « Tableau de bord »

Accès : racine / (index.html) une fois le module connecté au Wi-Fi. Vue de supervision rafraîchie depuis /state toutes les 5 s (plus /chain toutes les 30 s et /history toutes les 5 min). Tout y est en lecture seule, sauf la carte « Commandes ».

Badges masqués (FS47). Les badges d'en-tête (mode, état, master…) et la rangée de badges système (Wi-Fi, MQTT, NTP, heap…) sont volontairement masqués : l'information est reportée dans les cartes ci-dessous (Puissance, Température, Pilotage, Commandes…). Le code qui les alimente reste actif.

Carte (id)AfficheComportement
Architecture — arch-containerSchéma dynamique Source PV → ce module → dimmer(s) enfant(s).Source en MQTT ou HTTP ; flèches étiquetées du mode de chaînage (déleste / égal / off) ; chaque nœud montre puissance, température et charge. Construit depuis /state + /chain.
Puissance routée — g-pct / g-wattConsigne en % et en W, jauge.Un badge g-bridle-badge « Limité » (en watts) et un trait orange g-bridle-mark apparaissent quand maxpow < 100 %.
Température — g-tempTempérature de la sonde du dimmer (°C) + source (local 📍 / MQTT ⚡).Trait orange à la consigne maxtemp. Affiche « Sonde requise » si aucune source, « Sonde perdue » si la valeur sentinelle 99,9 °C remonte.
Pilotage — master-badge / master-ipÉtat de l'asservissement par un master HTTP.4 états selon master_age_s : Standalone · Piloté actif (<5 s) · Master silencieux (<30 s) · Master attendu (<120 s) · Master perdu (>120 s).
Watchdog master — watchdog-rem / watchdog-barCompte à rebours (120 s) avant coupure de sécurité.Vert → orange → rouge à l'approche du timeout ; signale « dimmer coupé » si le watchdog s'est déclenché.
Sondes Dallas — dallas-listUne vignette par sonde (température + adresse, badge « maître »).conditionnel la carte dallas-detail n'apparaît que si au moins une sonde est détectée.
Zero-Cross — zc-cardFréquence secteur détectée (Hz).conditionnel visible uniquement sur ESP32 avec détection zéro-passage (/state.zc=true). Rouge si aucun front détecté.
Historique — hist-cardCourbe puissance + température sur la journée, total kWh.conditionnel ESP32 seulement (/history). Masquée sur ESP8266 (pas de données).

La carte Commandes (commands-card-row) regroupe les actions directes :

Bouton (id)EndpointRôle
ON / OFF — btn-onoff/onoffBascule la sortie dimmer. conditionnel grisé « (sonde requise) » si aucune sonde n'est affectée au dimmer.
Boost — btn-boost/boostLance / arrête la marche forcée (décompte affiché). conditionnel désactivé si le boost n'est pas configuré ou sans sonde.
Relais 1 / 2 — btn-relay1 / btn-relay2/get?relay1=2 · /get?relay2=2Bascule le relais. conditionnel masqué tant qu'aucune sonde n'est affectée au relais (dallas_relay1/2).

Les badges cmd-bdg-boost et cmd-bdg-minuteur de cette carte montrent le boost en cours et le minuteur programmé.

Écran « Mode point d'accès » (onboarding Wi-Fi)

Accès : à la première mise sous tension (ou après un factory reset), le module démarre en point d'accès WATT-… et n'a pas d'accès Internet. La racine sert alors l'écran d'accueil dédié wifi-ap.html (mise en page autonome, sans barre latérale ; en mode AP, config.html redirige vers cet écran). Bascule de langue FR / EN en bas.

Champ (id)TypePlageRôle
Réseau Wi-Fi — ssidSelectlisteRéseaux détectés au scan (scanwifi), triés par signal, avec cadenas et barres de force. Dernière option : « Réseau caché ».
Re-scanner — rescanBtnboutonRelance scanwifi et repeint la liste.
Nom du réseau (SSID) — ssidManualtextemax 31conditionnel apparaît seulement quand « Réseau caché » est choisi.
Signal — signalRowindicateurForce (Excellent / Bon / Moyen / Faible) + dBm + cadenas Sécurisé/Ouvert du réseau choisi.
Mot de passe — passwordmot de passemax 63Clé Wi-Fi. Bouton œil togglePwdBtn pour afficher/masquer.
Connecter et redémarrer — submitBtnsubmitEnvoie savewifi?ssid=&password= puis affiche l'écran de redémarrage (rebootOverlay).

L'en-tête affiche l'identité du produit (productName, serial, version) lue depuis getwifi.

Mini tableau de bord AP (index-AP.html). Une fois en AP, un tableau de bord minimal peut être servi : deux cartes state (puissance) et sigma (température) rafraîchies via /state toutes les 2 s, plus un lien vers la configuration. Si la connexion échoue, le module revient de lui-même en point d'accès après quelques minutes.

Écran « Broker MQTT »

Accès : menu › Broker MQTT. Un bandeau d'état (brokerStatusBar) reste visible en haut : non testé / connecté / non connecté. /getmqtt pré-remplit les champs.

Champ (id)TypeDéfautRôle
Serveur — servertexteIP ou hostname du broker (ex. 192.168.1.40). 15 caractères max.
Port — portnombre1883Port du broker (non chiffré par défaut).
Utilisateur — usertexte(vide)Optionnel — vide si pas d'authentification.
Mot de passe — passwordmot de passe(vide)Optionnel.
Activer Home Assistant — ha_enabledinterrupteurselon firmwareconditionnel la carte ha-card-row n'apparaît que si le firmware est compilé avec le support HA (/state.ha=true). Publie les topics d'auto-découverte.

Bouton Tester (btnTest/testmqtt?hostname=&port=) : le test TCP est différé (réponse « pending » puis re-sondage ~6 s plus tard sur ESP8266), sans sauvegarder. Bouton Sauvegarder et Appliquer (btnSave/applymqtt) : enregistre et reconnecte Immédiat sans reboot. Toute modification du serveur ou du port repasse le bandeau en « non testé ».

Topics publiés : SolarMeshLabs/Watt-Modulator/<id>/…

Écran « Minuteur »

Accès : menu › Minuteur. Programme un appoint horaire (plages de marche) pour le dimmer et les deux relais. L'heure courante est affichée (heure). Trois onglets : Dimmer, Relais 1, Relais 2.

Gamme PRO requise. conditionnel si le module est en gamme basic (/state.tier), le contenu est masqué et un bandeau m_upgrade_banner invite à activer une licence PRO depuis le Watt-Guardian.

Champ (id)TypePlageRôle
Démarrage / Arrêt — heure_demarrage_* / heure_arret_*heureHH:MMPlage de marche. La durée est calculée en direct (duree_*) avec alerte « arrêt le lendemain » si la plage chevauche minuit. Vide / 00:00 = non programmé.
Température max (°C) — temperature_*nombre0–80Consigne de sécurité haute température pendant la plage.
Puissance (%) — puissance_dimmernombre0–100Onglet Dimmer uniquement : niveau forcé pendant la plage.

Boutons par onglet : Appliquer (/setminuteur?<dimmer|relay1|relay2> avec heure_demarrage, heure_arret, temperature [+ puissance]) et Réinitialiser (renvoie 00:00). Chargement via /getminuteur?<cible>.

Consigne à 0 °C. Dimmer : un bandeau rouge (warn-temp-dimmer) prévient que le dimmer resterait coupé en permanence. Relais : un bandeau jaune (warn-temp-relayN) signale que la sécurité température est désactivée. Sans sonde affectée, le programmateur horaire fonctionne toujours, mais la sécurité haute température et le pilotage par seuil deviennent inopérants (avertissement injecté par device).

Écran « Relais » (pilotage par seuil)

Accès : écran de configuration des relais (relai.html). Définit, pour chaque relais, des seuils de puissance et une température de consigne — complémentaire du minuteur, qui est horaire. Deux onglets : Relais 1 et Relais 2.

Champ (id)TypePlageRôle
Seuil de démarrage (%) — seuil_demarrage_relayNnombre% de puissanceAu-dessus de ce niveau de routage, le relais s'enclenche.
Seuil d'arrêt (%) — seuil_arret_relayNnombre% de puissanceEn dessous, le relais se coupe (hystérésis).
Température de consigne (°C) — temperature_relayNnombre0–80Coupe le relais au-delà de la consigne.

Le bouton Application des paramètres (submit) envoie /setseuil?<relay1|relay2> avec seuil_demarrage, seuil_arret et temperature ; les valeurs sont relues via /getseuil?<relayN>.

Consigne à 0 °C. Un bandeau jaune (warn-temp-relayN) prévient que la sécurité température est désactivée : le relais est alors piloté uniquement par le seuil de puissance.

Écran « Statistiques »

Accès : menu › Statistiques. Vue temps réel + cumul du jour, calculés côté navigateur (localStorage, remise à zéro à minuit) — aucun surcoût mémoire sur le module. Lecture seule, /state toutes les 5 s.

Section / carte (id)Affiche
Bilan du jourkWh routés kpi-kwh, CO₂ évité kpi-co2 (+ km kpi-km), économies kpi-eur (tarif 0,26 €/kWh), pic du jour kpi-peak + heure kpi-peak-time.
Régulation 60 sPuissance routée live-pow (courbe + min/moy/max) et stabilité de consigne stab-pct / stab-bar + nombre de transitions cycles-cnt.
Distribution consigne 60 sHistogramme distrib-svg des consignes (alerte « souvent à 100 % » / « souvent au plancher »).
Pilotage & sécuritéIndicateur Master 4 états m-badge / m-ip et bridage maxpow b-pct / b-msg.

À savoir. Les cumuls sont remis à zéro à minuit et ne sont pas persistés sur le long terme côté module ; ils vivent dans le navigateur qui affiche la page.

Écran « Sauvegardes »

Accès : menu › Sauvegardes. Trois zones : fichier local, broker MQTT, et zone dangereuse.

Carte « Sauvegarde sur fichier »

Bouton (id)EndpointRôle
Télécharger la sauvegarde — backup/config/exportGénère un JSON (config, mqtt, minuteurs dimmer + relais) nommé AAAA-MM-JJ-…-<nom>.json.
Restaurer depuis un fichier — restoreFilePOST /config/importCharge un JSON local (avec son _device_token d'origine) ; redémarrage avec compte à rebours (8 s) puis redirection.

Carte « Sauvegarde MQTT »

Statut mqttStatusBadge (Connecté / Déconnecté) et date mqttLastBackup via /mqttbackup/status (rafraîchi 10 s). conditionnel les boutons sont désactivés tant que le broker n'est pas connecté.

Élément (id)EndpointRôle
Sauvegarde auto — mqttAutoToggle/get?mqtt_backup=&save=1Publie (retain) la config au boot et à chaque reconnexion, et la restaure si manquante.
Sauvegarder vers MQTT — mqttPush/mqttbackup/pushPublie immédiatement la config sur le broker.
Restaurer depuis MQTT — mqttPull/mqttbackup/pullRécupère la config ; si restaurée, reboot automatique avec compte à rebours.

Carte « Zone dangereuse »

Bouton (id)EndpointRôle
Reset config (garde WiFi) — eraseBtn/config/eraseEfface la config mais garde le Wi-Fi — l'appareil reste joignable après reboot.
Factory reset (efface tout) — eraseAllBtn/config/erase?all=1Efface tout, Wi-Fi compris — reboot en mode point d'accès.

Irréversible. Les deux effacements demandent une confirmation puis redémarrent le module. Après un factory reset, il faut repasser par l'écran de point d'accès.

Écran « Informations système »

Accès : menu › Informations système. Tableaux lus via /info (rafraîchis toutes les 5 s), regroupés en cartes :

CarteChamps (ids préfixés i_)
Identitéi_name, i_board, i_fw (BUILD_FW), i_fs_build (BUILD_FS + badge ⚠ si FW/FS désynchronisés), i_release + bouton de mise à jour OTA.
Matérieli_chip, i_cores, i_freq, i_flash, i_mac.
Mémoirei_heap, i_maxalloc, i_frag, i_fs (utilisé / total).
Réseaui_netmode, i_ssid, i_rssi, i_ip, i_gw.
Dimmeri_dpower (%), i_dtemp (°C), i_dboost (point vert/rouge).
MQTTi_mqbroker, i_mqconn, i_mqha.
Systèmei_uptime, i_reset (cause du dernier reset).

Mise à jour (modale OTA). Le bouton btn.ota_check ouvre la modale otaModal : préflight (/ota/preflight), vérification du manifest GitHub (/ota/check), puis états disponible / en cours / succès / à jour / erreur. Le lancement ota-btn-apply appelle POST /ota/apply et suit l'avancement via /ota/status et les évènements SSE ota_status. Compte à rebours 180 s. Penser à vider le cache du navigateur après une MAJ.

Écran « Debug forensic »

Accès : menu › Debug. Page de diagnostic avancée. Bouton Refresh et case auto 10 s (autoRefresh) ; les lectures sont échelonnées (1,5 s d'écart) pour ménager la mémoire ESP8266.

CarteEndpointContenu
Reboot précédent/debug/bootNuméro de reboot (b_count), dernier uptime, reset code, âge loop (+ ⚠ si stall), heap/maxBlk précédents.
Heap now + deltas/debug/heapFree, max alloc, min historique, deltas 1 h / 6 h / 12 h, sparkline (free + max block).
Zero-Cross/state · /zc_resetconditionnel ESP32 seulement : fréquence, état, pulses 5 min, bouton Re-tester.
Event ring buffer/debug/ring?n=Derniers N évènements (r_n, filtre niveau r_lvl), colorés par sévérité ; total depuis le boot.

Écran « Console logs »

Accès : menu › Console logs. Flux de logs en direct (logContainer), interrogé toutes les 2 s via /cs?c2=<id>. Format structuré : [HH:MM:SS][NIV][TAG] message, colorisé par niveau.

Contrôle (id)Rôle
Filtres niveau — badge-filterTOUT / INF / WRN / ERR / DBG : masque les lignes hors du niveau choisi.
Auto-scroll — scrollBtnSuit automatiquement le bas du flux (bascule ON/OFF).
Pause — pauseBtnGèle l'arrivée des nouvelles lignes (la pastille pollDot passe à l'orange).
ViderEfface l'affichage local (clearLog).
log.txtTélécharge le journal brut (/log.txt).

ESP8266. Le ring buffer est très petit : seuls les évènements BOOT, WRN et ERR y sont conservés (les INF / DBG ne sortent que sur le port série à 115200). Pour un diagnostic détaillé, brancher le port USB.

À retenir. Le Watt-Modulator route le surplus PV vers une charge (résistance, réchauffeur…) via un dimmer, en autonomie ou piloté par un Watt-Guardian. La plupart des réglages de fond (sécurité thermique, puissance, chaîne, sondes) vivent dans l'écran Configuration ; les écrans ci-dessus en sont la supervision, la programmation et le diagnostic.