Le Watt-Guardian est le maître de l'écosystème : il mesure la puissance réseau, calcule le surplus et orchestre les dimmers (locaux et distants) ainsi que les relais. Cette page est une référence d'écran par écran de son interface web embarquée, servie sur l'adresse locale du routeur. Pour les concepts (régulation PV, chaîne maître/esclave, gammes de licence), voir les guides thématiques.
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 et Appliquer, rien n'est écrit — un redémarrage perdrait la modification. Un avertissement « modifications non sauvegardées » s'allume dès qu'un champ d'un formulaire est touché.
Badges utilisés dans ce manuel
Immédiat appliqué à chaud Reboot effectif au prochain démarrage non testé fonction désactivée conditionnel visible selon le matériel ou la gamme de licence
Gammes de licence. Plusieurs fonctions sont réservées à une gamme : basic < pro < max < ultra. Un champ verrouillé apparaît grisé avec un cadenas et un lien vers la page Licence. Le mode DIY (firmware compilé sans secret de licence) débloque tout. Les écrans concernés portent ci-dessous le badge conditionnel.
Éléments communs à toutes les pages
La barre latérale, la barre du haut et le pied de page sont identiques sur les pages d'administration (sauf en mode point d'accès et sur l'assistant, qui ont leur propre habillage). Ils ne sont pas redécrits dans chaque écran.
Barre latérale (menu)
| Élément | Rôle |
|---|---|
| Watt-Guardian (logo) | Lien vers la racine / — le tableau de bord. |
| Bloc d'état | Version firmware (version), réseau Wi-Fi (WIFI), signal RSSI en dBm, nom (name) — rafraîchis en continu depuis /state. |
| Paramètres | Guardian · Moniteur d'énergie · Météo · Batterie · Historique · Broker MQTT · Réseau Wifi · Minuteur · Sauvegardes · Licence · Communauté. |
| Système | Informations système · Debug · Performance · Console logs. |
| Reboot | Appelle /reboot : redémarrage immédiat (le bandeau d'état passe en violet « Appareil injoignable » puis vert « Appareil redémarré »). |
| Badges dynamiques | conditionnel Historique / Météo / Batterie / Statistiques affichent un badge de gamme (Premium, Nj, MAX, ULTRA) si la fonction est verrouillée ; Informations affiche MAJ si une mise à jour OTA est disponible ; Communauté peut afficher une pastille d'invitation. |
Les pages Statistiques et Trophées s'atteignent depuis le tableau de bord, Mise à niveau depuis la page Licence, et l'Assistant au premier démarrage.
Barre du haut & pied de page
En haut : un bandeau d'état global (#status-banner) et l'horloge locale (#heure-topbar). Le bandeau résume l'état calculé à partir de /state :
Code couleur du bandeau. Vert = fonctionnement normal ; Orange = fonctionnement partiel (MQTT déconnecté, sonde Dallas absente, modulator distant injoignable, token Enphase bientôt expiré…) ; Rouge = erreur (Wi-Fi coupé, aucune source d'énergie configurée, mesure injoignable, token Enphase expiré) ; Violet = appareil injoignable (reboot en cours).
Données live (SSE)
Les pages reçoivent l'état en temps réel via EventSource('/events') — une connexion unique partagée qui émet les évènements state (état général, ~toutes les 4 s), chain (chaîne de modulators), battery (EMS batterie) et ota_status (mise à jour). Un repli par interrogation directe de /state prend le relais si le flux est muet plus de 12 s.
Écran « Tableau de bord »
Accès : racine / (logo de la barre latérale). C'est l'écran principal : mesure réseau/PV, routage, diagramme d'architecture, score de qualité, état des services et commandes.
Cet écran est un tableau de bord sans formulaire persistant : ses seuls contrôles sont des boutons de commande. Les cartes affichent des valeurs lues dans /state et /modulator/chain.
Cartes d'affichage
| Carte | Valeurs (champ source) |
|---|---|
| Réseau | État textuel state. |
| Wattmètre | Puissance réseau signée watt (+ = soutirage, − = injection), courbe 60 s, production pv_production, conso calculée (pv_production + watt), bornes delta / deltaneg. |
| Dimmers | Dimmer local (dimmerlocal, Plocal) + dimmers distants de la chaîne (/modulator/chain) ; total routé total_charge, capacité, % d'utilisation. conditionnel chaîne masquée si chain_gated_by_tier. |
| Température dimmer local | temp_dimmer, sonde dallas_dimmer, alerte dimmer_mqtt_lost / dimmer_sensor_lost, plafond tmax. |
| Auto-conso · CO₂ évité · Pic du jour | Calculés depuis pv_production, watt, wh_today, puissance_route (+ historique local du navigateur). |
| Score qualité | Note (donut) combinant auto-conso et stabilité. Boutons d'échelle 5 s / 24 h / 7 j. conditionnel détail réservé aux gammes max/ultra (ou DIY). |
| Services | Wi-Fi / MQTT (mqtt_connected) / NTP (ntp_sync) / Énergie (mode, wattIsValid). |
| Santé du système | Tâches FreeRTOS et mutex (/debug/tasks : tasks, mutex_ok, mutex_timeout). |
| Architecture du système | Diagramme SVG : réseau, source, routeur, dimmer local, chaîne, proxy, bus MQTT et sondes découvertes. |
| Délégation HTTPS / proxy | conditionnel visible si proxy actif — état, hôte, empreinte, dernières tentatives (/proxy/status). |
Boutons de commande (carte « Commandes »)
| Bouton (id) | Endpoint appelé | Rôle |
|---|---|---|
| Éteindre / Allumer — btn-onoff | /get?disengage_dimmer=on|off | Coupe ou réactive le dimmer local. conditionnel désactivé tant que la sonde du dimmer manque (dimmer_temp_ok + dallas_dimmer). |
| Boost — btn-boost | /boost | Lance/arrête la marche forcée (lit ok / msg). |
| Relais 1/2/3 — btn-relay1/2/3 | /get?relay1=2 (resp. relay2, relay3) | Bascule le relais. conditionnel visible selon has_relay1/2/3 et relays_visible_count. |
| Switch écran — screen | /get?servermode=screen | conditionnel visible si écran TFT présent (has_tft). |
| Re-tester (proxy) — proxy-card-discover | /proxy/discover | Relance la découverte mDNS du proxy. |
Badges du titre. Le tableau de bord affiche la gamme active (tier), un badge DIY si diy_build, et un badge d'alerte si la chaîne est bridée par la licence (chain_gated_by_tier) ou si des modulators/sondes configurés ne sont pas actifs.
Mode point d'accès (index-ap)
Tant que le Wi-Fi n'est pas configuré, le routeur démarre en point d'accès et sert une version minimale du tableau de bord (assets locaux, pas d'Internet). La barre latérale ne contient qu'un lien Configuration. Cartes : State (state), Sigma (watt), Routed Power (dimmerdistant_puissance), bouton écran. /state y est interrogé toutes les 2 s (pas de SSE).
Écran « Moniteur d'énergie »
Accès : menu › Moniteur d'énergie. Choisit, teste et active la source de mesure du réseau/PV. C'est ici (et non sur la page Configuration) que l'on paramètre Shelly, Enphase, Fronius, une source HTTP générique ou Home Assistant via MQTT.
Carte « Source de mesure »
| Champ (id) | Type | Valeurs | Rôle |
|---|---|---|---|
| Type de source — sourceType | liste | 0 Aucune · 1 Shelly EM · 2 Enphase · 3 Fronius · 4 HTTP générique · 5 HA MQTT | Sélectionne le panneau de configuration affiché ci-dessous. Défaut = mode courant. |
Panneau Shelly (cfg-shelly)
| Champ (id) | Type | Rôle |
|---|---|---|
| EM | texte | IP du Shelly EM (none pour désactiver). |
| TRI | case | Triphasé (Shelly 3EM). |
Panneau Enphase (cfg-enphase)
| Champ (id) | Type | Plage / valeurs | Rôle |
|---|---|---|---|
| IP_ENPHASE | texte | IP | Adresse de l'Envoy. |
| PORT_ENPHASE | texte | défaut 443 | Port HTTPS. |
| Type (enphaseType/Type) | radio | S / R | Modèle d'Envoy. |
| Version (enphaseVersion/envversion) | radio | 5 / 7 (déf. 7) | Firmware Envoy. |
| token | texte | JWT | Jeton d'accès. La date d'expiration s'affiche (rouge si expiré, jaune si < 30 j). |
| envdelay | curseur | 0–60 s (déf. 5) | Délai mini entre deux mesures. Immédiat sauvegarde auto via /get?envdelay=…&save=1. |
Conditionnel. L'option Enphase est désactivée sans proxy HTTPS actif (proxy_enabled + proxy_active) ni PSRAM (psram_total > 0) : le handshake TLS de l'Envoy a besoin de l'un des deux.
Panneau Fronius (cfg-fronius)
| Champ (id) | Type | Rôle |
|---|---|---|
| IP_FRONIUS | texte | IP de l'onduleur Fronius. |
| FRONIUS_API | texte (lecture seule) | Version d'API (V1). |
Panneau HTTP générique (cfg-generic)
Pour interroger n'importe quelle source exposant une valeur en JSON. Deux blocs symétriques (réseau / production) :
| Champ (id) | Type | Rôle |
|---|---|---|
| GEN_URL_GRID / GEN_URL_PROD | texte | URL à interroger (réseau / production). |
| GEN_METHOD_GRID / GEN_METHOD_PROD | liste | GET ou POST. |
| GEN_BODY_GRID / GEN_BODY_PROD | texte | Corps de requête (POST). |
| GEN_PATH_GRID / GEN_PATH_PROD | texte | Chemin JSON pointé (ex. data.power). |
| GEN_SCALE_GRID / GEN_SCALE_PROD | nombre | Facteur d'échelle (déf. 1, pas 0,01). |
| GEN_INVERT_GRID | case | Inverse le signe de la valeur réseau. |
| GEN_AUTH | texte | En-tête Authorization. |
| GEN_POLL | nombre | Période d'interrogation (1000–30000 ms, déf. 3000). |
Panneau Home Assistant MQTT (cfg-hamqtt)
| Champ (id) | Type | Rôle |
|---|---|---|
| HA_TOPIC_GRID / HA_TOPIC_PROD | texte (datalist) | Topic MQTT réseau / production (auto-complété par les topics découverts). |
| HA_PATH_GRID / HA_PATH_PROD | texte | Chemin JSON optionnel dans la charge utile. |
| HA_SCALE_GRID / HA_SCALE_PROD | nombre | Facteur d'échelle (déf. 1). |
| HA_INVERT_GRID | case | Inverse le signe réseau. |
Carte « Mode debug — Shelly virtuel » (debugShellyCard)
conditionnel visible seulement sur un firmware DEBUG (debug_mode) et en source Shelly. Champ debugShellyIP (IP:Port d'un Shelly simulé). Bouton Utiliser (btnDebugUse) → /setdebugshelly?ip= (surcharge en RAM uniquement).
Boutons & tests
| Bouton | Endpoint(s) | Rôle |
|---|---|---|
| Tester (source courante) | /testshelly?ip= · /testenphase… (+ /testenphase_status) · /testfronius?IP_FRONIUS= · /testgeneric?which= · /testhamqtt?which= (+ /testhamqtt_status) | Mesure à blanc ; lit ok, grid/value, msg. Les tests Enphase et HA sont asynchrones (202 + sondage du statut). |
| Sauvegarder & Activer — btnSaveActivate | /get?…&save=1 ou /setgeneric / /sethamqtt, puis /setsource?source=<1..5> | Enregistre les paramètres de la source choisie puis l'active. conditionnel activé seulement après un test réussi. |
Bandeau d'état live. #liveState (non testé / test en cours / actif / inactif / erreur) et #liveValue (« Grid : N W ») reflètent wattIsValid, mode et enphase_token_err de /state.
Écran « Météo »
Accès : menu › Météo. Affiche les conditions actuelles (open-meteo), une prévision PV 24 h et une estimation de production via forecast.solar. conditionnel profondeur selon la gamme (mode 1 = info ; mode 2 = prévisions ; mode 3 = optim. prédictive ; forecast.solar = max/ultra).
Carte « Configuration »
| Champ (id) | Type | Rôle |
|---|---|---|
| Activer la récupération météo — w_enabled | case | Active les appels météo. Refusé si aucune coordonnée n'est définie. |
| Coordonnées | lecture seule | Latitude/longitude affichées (w_geo_display) ; elles se règlent dans Configuration › Localisation. |
Bouton Sauvegarder (w_save) → /setweather?enabled=.
Carte « Configuration PV — forecast.solar » (fs_card_row)
conditionnel visible seulement en gamme max/ultra (ou DIY).
| Champ (id) | Type | Plage | Rôle |
|---|---|---|---|
| Activer la prévision PV — fs_enabled | case | — | Active forecast.solar. |
| Puissance crête — fs_kwp | nombre | 0,1–50 kWc (déf. 3,0) | Puissance installée. |
| Inclinaison — fs_dec | nombre | 0–90° (déf. 30) | Inclinaison des panneaux. |
| Azimut — fs_az | nombre | −180–180° (0 = Sud) | Orientation. |
Bouton Sauvegarder → /setforecastsolar?enabled=&kwp=&dec=&az=.
Cartes d'affichage
Conditions actuelles (/weather : temp, label, cloud, wind_kmh, is_day, code, age_ms). Prévisions 24 h : KPIs (pic W/m², énergie kWh/m², fenêtre PV) et bande synoptique 8×3 h depuis forecast (objets r/c/t). Prévision PV (/forecast : wh_today, wh_tomorrow, peak_w, peak_time).
Écran « Batterie »
Accès : menu › Batterie. Lit une batterie domestique Victron Cerbo GX via MQTT et propose un asservissement du routage au niveau de charge. conditionnel fonction réservée à la gamme ULTRA (ou DIY).
Carte « Configuration » (b_config_card)
| Champ (id) | Type | Plage / valeurs | Défaut | Rôle |
|---|---|---|---|---|
| Activer la lecture EMS — b_enabled | case | — | off | Active la lecture batterie. |
| Type d'onduleur — b_type | liste | Victron Cerbo GX (MQTT) | victron-mqtt | Protocole de lecture. |
| VRM Portal ID — b_portal_id | texte | ≤ 31 car. | — | Identifiant du portail Victron. |
| Période — b_poll_period | curseur | 15–120 s | 15 | Cadence de lecture. |
| Mode de routage — b_route_off / b_route_soc | radio | Désactivé (0) / Asservi SOC (1) | 0 | Conditionne le routage au niveau de charge. |
| SOC minimum — b_min_soc | curseur | 5–99 % | 80 | conditionnel visible en mode asservi. Seuil au-dessus duquel le surplus part vers les charges. |
| Hystérésis — b_hyst | curseur | 1–30 % | 5 | Évite le yo-yo autour du seuil. Un aperçu de la décision s'affiche en direct. |
Bouton Sauvegarder (b_save) → /setbattery?enabled=&type=&portal_id=&poll_period_s=&route_mode=&min_soc_pct=&hysteresis_pct=.
Carte « État batterie »
Anneau SOC + indicateurs depuis /getbattery et l'évènement SSE battery : data_valid, soc_pct, power_w (signé : < 0 = charge, > 0 = décharge), voltage_v, current_a, temp_c, last_update_ms.
Écran « Historique »
Accès : menu › Historique. Trace réseau, production et puissance routée par dimmer sur une fenêtre réglable. conditionnel profondeur selon la gamme (history_days_allowed : 0 / 7 / 15 / 30 jours ; DIY = tout).
Sélecteur de fenêtre (h_window_group)
| Bouton | Attributs | Rôle |
|---|---|---|
| 6 h / 24 h / 7 j / 15 j / 30 j | data-window, data-agg (raw/hour/day), data-min-days, data-tier | Recharge le graphe via /history/ring. conditionnel chaque bouton est désactivé (cadenas + gamme requise) si data-min-days dépasse history_days_allowed ; défaut actif = 24 h. |
Bouton Sauvegarder maintenant (h_save_btn) → POST /history/save (force une écriture NVS ; lit ok, last_snap, recent/medium/long).
Format des données. /history/ring renvoie records (tableaux positionnels : horodatage, réseau W, production W, local W, dimmers 1-3 W) plus total_pages, max_days, count, capacity, last_snap, aggregate. La pagination utilise from, to, page, page_size, aggregate.
Écran « Configuration » (Guardian)
Accès : menu › Guardian. Règle la régulation du routage, les dimmers local/distant, le boost, les sondes, la délégation HTTPS, l'écran, le style du dashboard, le NTP/langue/géoloc et le mappage des broches GPIO. Le bouton vert Sauvegarder et Appliquer (btnSubmitMain) envoie tous les champs via /get puis /get?save=yes, et applique NTP/météo/proxy.
Carte « Paramètres du Guardian »
Comporte la visualisation de la bande morte (zone de régulation), alimentée par les deux champs ci-dessous et par watt live.
| Champ (id) | Type | Rôle |
|---|---|---|
| Limite consommation — Delta — delta | nombre (W) | Seuil de soutirage au-dessus duquel le Guardian réduit la puissance routée. |
| Limite injection — Deltaneg — deltaneg | nombre (W) | Seuil d'injection sous lequel il augmente la puissance routée. |
Carte « Gestion des dimmers »
Dimmer local (blockDimmerLocal) :
| Champ (id) | Type | Plage | Rôle |
|---|---|---|---|
| Activer le dimmer local — dimmerlocal | case | 0/1 | Active la sortie dimmer locale. |
| Limiteur — localfuse | nombre | % (0 = sans limite) | Plafond de puissance locale. |
| Température max — tmax | nombre | °C | Coupure thermique auto. |
| Puissance de démarrage — trigger | nombre | % | Seuil mini anti court-cycle. |
| Puissance de la charge — charge1 | nombre | W | Puissance nominale (sert à la répartition). |
| Type de charge — dimmer_type | liste | — / chauffage / ECS / pompe / lumière / ventilation / autre | Type d'appareil piloté. |
Boost (marche forcée, dimmer local) :
| Champ (id) | Type | Plage | Rôle |
|---|---|---|---|
| Température max — boost_temp | nombre | 20–95 °C | Sécurité thermique du boost. |
| Puissance — boost_power | nombre | 1–100 % | Niveau forcé. |
| Durée — boost_duration | nombre | 5–480 min (pas 5) | Durée (libellé « 1h00 » live). |
Dimmer distant : champ dimmer (hostname/IP ou none) ; bouton Rechercher (btnScanDimmer) → /scandimmers (renvoie dimmers autonomes + piloted).
Carte « Sondes de température »
Sondes locales (Dallas) — bouton Rechercher (btnScanDallas) → /resetdallas puis relecture de /state (paires addr0/1… + dallas0/1…).
Sondes distantes (MQTT) — slots SubscribeTEMP1 à SubscribeTEMP4 ; bouton Rechercher (btnScanSensors) → /scansensors (renvoie sensors : name/topic). conditionnel le nombre de slots visibles dépend de mqtt_slots et de la gamme.
Affectation des sondes — selects assign-dimmer, assign-relay1/2/3 (valeurs : aucune / adresse ROM 16 hex / MQTT1…). Immédiat chaque changement enregistre via /get (avec save=yes). Alerte warn-dallas-shared si une même sonde est affectée à plusieurs organes. conditionnel blocs relais visibles selon has_relay1/2/3.
Carte « Délégation HTTPS (watt-proxy) »
| Champ (id) | Type | Défaut | Rôle |
|---|---|---|---|
| Activer la délégation — proxy_enabled | case | off | Délègue les handshakes HTTPS au watt-proxy. |
| Découverte mDNS — proxy_auto | case | on | Recherche automatique du proxy sur le réseau. |
| Hôte du proxy — proxy_host | texte | — | hôte ou hôte:port (si découverte manuelle). |
Boutons : Tester / découvrir (btnProxyDiscover) → /proxy/discover + /proxy/status ; Apairer (btnProxyPair) → /proxy/pair ; Désappairer (btnProxyUnpair) → /proxy/unpair. État dans proxyStatus / proxyPairStatus.
Cartes « Écran » & « Style du dashboard »
Écran TTGO TFT (screenCard, conditionnel si has_tft) : screentime (délai d'extinction, 0 = toujours allumé), flip (orientation, Immédiat via /get?servermode=flip) ; bouton ON/OFF Oled → /get?servermode=screen.
Écran S3-HMI (hmiCard, conditionnel si has_hmi) : hmi_screentime, hmi_rotation (0/90/180/270°), hmi_night_start_hour / hmi_night_end_hour (0–23), hmi_brightness_day / hmi_brightness_night (0–255).
Style du dashboard (DASHBOARD_STYLE_CARD, conditionnel cartes à écran graphique) : select dashboard_style (variantes Tesla, Mega, Data, Gauge, Bars, Timeline, Triangle, Retro, Forecast, Battery, Chain — l'offre s'adapte à la carte). Immédiat via /setdashboard_style?n=. Verrouillé (badge MAX) si dashboard_style_unlocked est faux.
Cartes « NTP & fuseau », « Langue » & « Localisation »
| Champ (id) | Type | Rôle |
|---|---|---|
| Serveur NTP — ntp_server + bouton Tester | texte | Serveur de temps ; le bouton vérifie via /testntp?ntp_server=. |
| Fuseau horaire — ntp_timezone | liste | Chaînes POSIX par région (heure d'été auto). |
| Langue — lang | liste | FR · EN · ES · IT · DE. Immédiat via /setlanguage?lang=. |
| Libellé des modulators — modulator_label_mode | liste | nom / type / personnalisé / type+nom. Immédiat via /setmodulatorlabel?mode=. |
| Latitude / Longitude — geo_lat / geo_lon | nombre | −90..90 / −180..180. Bouton Détecter (géoloc navigateur). Sert à la météo. Enregistré via /setweather?lat=&lon=. |
Carte « Paramétrage GPIO »
Repliable. Chaque broche affiche sa valeur compilée par défaut ; laisser vide = valeur par défaut.
| Champ (id) | Plage | Effet |
|---|---|---|
| Bus OneWire — gpio_one_wire | 0–40 | Réinitialise la détection des sondes. Immédiat |
| Dimmer / Zero-cross — gpio_dimmer / gpio_zerocross | 0–48 | Broches de commande. Reboot |
| Relais 1/2/3 — gpio_relay1/2/3 | 0–48 | conditionnel selon has_relay1/2/3. Reboot |
| Résolution Dallas — gpio_temp_precision | 9–12 bits | Précision / temps de conversion. Reboot |
Bouton Appliquer les GPIO (btnSaveGpio) → /setgpio (bouton propre, distinct du Sauvegarder principal).
Écran « Broker MQTT »
Accès : menu › Broker MQTT. Configure la connexion au broker et l'auto-découverte Home Assistant, avec un bandeau d'état live et un bouton de test.
Carte « Broker MQTT »
| Champ (id) | Type | Défaut | Rôle |
|---|---|---|---|
| Serveur — MQTT_SERVER | texte | — | Hôte/IP du broker. |
| Port — MQTT_PORT | nombre | 1883 | Port du broker. |
| Utilisateur — MQTT_USER | texte | — | Identifiant (optionnel). |
| Mot de passe — MQTT_PASSWORD | mot de passe | — | Mot de passe (optionnel). |
Carte « Intégration Home Assistant »
Case HA_ENABLED : active les topics d'auto-découverte HA. conditionnel désactivée (badge MAX + bandeau) si la gamme est inférieure à MAX (hors DIY).
Boutons : Tester (btnTest) → /testmqtt?MQTT_SERVER=&MQTT_PORT= (lit ok, msg) ; Sauvegarder et Appliquer (btnSave) → /applymqtt?…&HA_ENABLED=.
Bandeau d'état. Le bandeau broker passe « non testé » → « connecté » (vert) / « non connecté » (rouge) selon mqtt_connected (/getmqtt) et le résultat du test. Il repasse en « non testé » dès qu'on modifie le serveur ou le port.
Écran « Réseau Wi-Fi »
Accès : menu › Réseau Wifi. Configure le Wi-Fi en mode station (SSID/mot de passe) avec scan asynchrone et résultats cliquables.
Carte « Configuration »
| Champ (id) | Type | Rôle |
|---|---|---|
| SSID — ssid | texte | Nom du réseau cible (pré-rempli depuis /getwifi). |
| Mot de passe — password | mot de passe | Laisser vide pour conserver le mot de passe actuel (jamais pré-rempli). |
Boutons : Rechercher (btnScanWifi) → sonde /scanwifi (réseaux ssid/rssi ; un clic sur un résultat remplit le SSID) ; Sauvegarder et Appliquer (envoi de get?ssid=&password=). Le badge wifiStatusBadge indique « Connecté / Non connecté » selon le signe de RSSI.
Mode point d'accès (wifi-ap)
Page d'onboarding (portail captif), habillage propre, servie quand le routeur est en point d'accès. Contrôles : liste déroulante ssidSelect (réseaux scannés + option « Réseau caché » __manual__ qui révèle ssidManual), bouton de re-scan rescanBtn (scanwifi), indicateur de signal, mot de passe password avec œil togglePwdBtn, bascule de langue FR/EN. La soumission appelle savewifi?ssid=&password= et affiche une superposition de redémarrage. Le bloc serialBlock n'apparaît que si getwifi renvoie un numéro de série.
Écran « Minuteur »
Accès : menu › Minuteur. Programme des plages horaires marche/arrêt (avec température max, et puissance % pour le dimmer) pour le dimmer local et jusqu'à 3 relais. Onglets visibles selon le matériel et la gamme.
Onglet « Dimmer » (dimmer-form)
| Champ (id) | Type | Plage | Rôle |
|---|---|---|---|
| Heure de démarrage — heure_demarrage_dimmer | heure | HH:MM | Début de plage. |
| Heure d'arrêt — heure_arret_dimmer | heure | HH:MM | Fin de plage (badge « lendemain » si arrêt ≤ démarrage). |
| Température max — temperature_dimmer | nombre | 20–90 °C | Coupure thermique pendant la plage. |
| Puissance — puissance_dimmer | nombre | 0–100 % | Niveau forcé (dimmer uniquement). |
Onglets « Relais 1/2/3 »
Mêmes champs heure_demarrage_relayN / heure_arret_relayN / temperature_relayN (20–90 °C), sans champ puissance. conditionnel onglets visibles selon has_relay1/2/3 et relays_visible_count ; un onglet trop gourmand pour la gamme affiche un badge (PRO/MAX/ULTRA) et un lien vers la Licence.
Chaque formulaire enregistre via /setminiteur?<prefix> (paramètres heure_demarrage, heure_arret, temperature, + puissance pour le dimmer) ; pré-rempli par /getminiteur?<prefix>. Bouton de réinitialisation par onglet.
Sonde requise. Si la sonde affectée à un organe est perdue, le bloc dimmer est bloqué (alerte rouge, champs désactivés) et le champ température d'un relais est désactivé (alerte orange). Lecture de dimmer_mqtt_lost, dimmer_sensor_lost, relayN_mqtt_lost, relayN_sensor_lost.
Écran « Sauvegardes »
Accès : menu › Sauvegardes. Sauvegarde/restaure la configuration complète (fichier ou MQTT), avec une zone dangereuse de réinitialisation.
Cartes & boutons
| Bouton (id) | Endpoint | Rôle |
|---|---|---|
| Télécharger la sauvegarde — backup | /config/export + /getminiteur?… + /state | Construit et télécharge un fichier JSON (config, mqtt, sources, minuteurs). |
| Restaurer depuis un fichier — restoreBtn / restoreFile | POST /config/import | Charge un .json et restaure les sections (avec _device_token). |
| Sauvegarder vers MQTT — mqttPush | /mqttbackup/push | conditionnel actif si broker connecté. |
| Restaurer depuis MQTT — mqttPull | /mqttbackup/pull | Restaure puis redémarre (compte à rebours). |
| Auto-sauvegarde MQTT — mqttAutoToggle | /get?mqtt_backup=&save=1 | Sauvegarde/restauration auto au boot/reconnexion. |
| Reset config (garde Wi-Fi) — eraseBtn | /config/erase | Réinitialise la config en conservant le réseau. |
| Factory reset — eraseAllBtn | /config/erase?all=1 | Efface tout (y compris Wi-Fi). |
| Effacer l'historique — eraseHistBtn | POST /history/clear?confirm=EFFACER | Vide l'historique 30 j (confirmation « EFFACER »). |
| Relancer le setup guidé — wizardResetBtn | /wizard/reset | conditionnel carte visible si wizard_enabled. Renvoie vers l'Assistant. |
Zone dangereuse. Les boutons de réinitialisation sont irréversibles et demandent une confirmation. Le statut du broker (mqttStatusBadge) provient de /mqttbackup/status (connected, lastBackup).
Écran « Licence »
Accès : menu › Licence. Affiche la gamme et le matériel, permet d'activer une clé de licence pour débloquer une gamme supérieure, compare les 4 gammes et permet de revenir à la base eFuse.
Cartes & contrôles
| Élément (id) | Type | Rôle |
|---|---|---|
| Gamme actuelle | affichage | Carte, n° de série (si gravé), type de licence, gamme effective, capacité relais — depuis /state (tier, tier_base, tier_license_active, license_secret_injected, serial…). |
| Clé de licence — l_key | texte | Clé HMAC 51 caractères (compteur live l_key_count). Entrée = activation. |
| Comparaison des gammes | affichage | 4 cartes basic/pro/max/ultra ; liens « Passer à cette gamme » vers Mise à niveau. |
Boutons : Activer (l_btn_activate) → POST /applylicense (lit ok, tier, ou code d'erreur err) ; Effacer la licence (l_btn_clear) → POST /clearlicense (double confirmation). conditionnel carte « Mode DIY » et activation désactivée si license_secret_injected est faux (DIY = tout débloqué).
Mise à niveau (upgrade.html) : page statique « bientôt disponible » expliquant ce que débloquent PRO/MAX/ULTRA et comment être prévenu de l'ouverture de la boutique. Atteinte depuis les cartes de gammes de la page Licence ; lit seulement /state pour la barre latérale.
Écran « Communauté »
Accès : menu › Communauté. Gère deux options indépendantes : les statistiques publiques anonymes (balise) et le relais cloud zero-knowledge (accès distant), plus le partage de localisation.
Cartes & contrôles
| Champ (id) | Type | Plage | Rôle |
|---|---|---|---|
| Participer aux stats publiques — enabled | case | — | Envoi anonyme à la balise communautaire. |
| Activer le relais cloud — cloud_enabled | case | — | conditionnel réservé MAX/ULTRA (cloud_allowed). Push chiffré lecture seule. |
| Cadence d'envoi — cloud_period | curseur | 1–120 s | Immédiat via /setcloud?push_period_s=. |
| Pays / Région — country / dept | texte | ISO-2 / 6 car. | Localisation grossière. |
| Apparaître sur la carte — share_geo | case | — | Révèle un aperçu de coordonnées arrondies (±0,5°). |
| URL balise / relais — beacon_url / cloud_ingest_url | texte | ≤ 92 car. | URLs des serveurs (avancé). |
Boutons : Enregistrer (btnSave) → /setcommunity puis /setcloud ; Aperçu (btnPreview) → /community/preview ; Tester (btnTest) → /community/test ; Oublier (btnForget) → /community/forget ; Tester le cloud (btnCloudTest) → /cloud/test.
Bandeau cloud. 5 états selon /state : désactivé · aucune app appairée (cloud_claimed) · actif et synchronisé · erreur d'envoi (HTTP) · en attente du premier envoi (cloud_push_count). Statut détaillé via cloud_last_status.
Écran « Statistiques »
Accès : depuis le tableau de bord, l'historique ou la page Licence. Tableau de bord analytique : KPIs (auto-conso, CO₂, économies, score qualité), performance de régulation, courbes 60 s, records (mémoire navigateur), cumuls long terme, état de la chaîne et conseils. conditionnel réservé à la gamme MAX (ou DIY) ; sinon la page affiche un bandeau de mise à niveau et masque le contenu.
Page d'affichage (pas de formulaire) ; navigation par sommaire ancré. Sources : /state (interrogé chaque seconde : watt, pv_production, wh_today, puissance_route, delta/deltaneg, chaîne…), /modulator/chain (état des dimmers), /stats/cumul.json (cumuls : totals, months, current). Certaines valeurs (records, pics) sont stockées localement dans le navigateur.
Écran « Trophées »
Accès : depuis le tableau de bord. Grille de gamification : 50 exploits (10 catégories × 5 paliers), badges débloqués (avec date) et barres de progression vers les suivants. Un interrupteur darkSwitch bascule le thème sombre (mémorisé dans le navigateur).
Pas de formulaire. Données via /stats/trophies.json : mask (chaîne hex des badges débloqués), counters (compteurs de progression : kwh_routed, op_days, ecs65, deadzone_h, mesh_days…), unlocked (total), unlocks (dates). Les libellés viennent de /lang/<langue>.json.
Écran « Informations système »
Accès : menu › Informations système. Tableau en lecture seule : identité, matériel, mémoire, réseau, source d'énergie, MQTT, système, batterie et relais cloud optionnels — plus la fenêtre de mise à jour OTA.
Données affichées (/info, objet imbriqué)
| Bloc | Champs |
|---|---|
| Identité | name, product_name, board, fw_build, fs_build, release, compile. |
| Matériel | chip, revision, cores, freq_mhz, flash_size, psram_total, mac. |
| Mémoire | heap_free, heap_total, heap_min, max_alloc, spiffs_used, spiffs_total. |
| Réseau | mode, ssid, rssi, ip, gateway, subnet, dns. |
| Énergie / MQTT / Système | mode_name, grid_w, prod_w · broker, connected, ha_discovery · uptime_ms, reset_reason. |
conditionnel lignes eFuse (code, série, date, fabricant) si la puce est gravée ; cartes Batterie (si battery_enabled) et Relais cloud (si cloud_allowed/cloud_enabled). Un badge d'alerte signale un FS attendu différent du FS chargé.
Mise à jour OTA
Bouton Vérifier / Mettre à jour → fenêtre OTA : /ota/preflight (proxy), /ota/check (state_label, versions, changelog, tailles), puis POST /ota/apply et sondage /ota/status (machine d'états state_label : downloading → flashing → success). L'évènement SSE ota_status pousse aussi l'avancement.
Écran « Debug forensic »
Accès : menu › Debug. Diagnostic avancé : forensique du dernier crash, heap live, tâches FreeRTOS/mutex, pool TCP LwIP, cache mDNS, journal d'évènements et santé du pipeline HTTP sortant.
Contrôles & sources
| Élément (id) | Endpoint | Rôle |
|---|---|---|
| Rafraîchir auto — autoRefresh + bouton Refresh | tous les endpoints | Recharge tout (intervalle 10 s). |
| Lignes — r_n | /debug/ring?n= | Taille du journal (30/50/100). |
| Niveau — r_lvl | /debug/ring | Filtre ERR/WRN/INF. |
Endpoints : /debug/boot (dernier reboot), /debug/heap (now_free, now_frag_pct, history…), /debug/tasks (tasks, mutex_ok), /debug/mutex, /debug/ring (events), /debug/lwip_stats (pool TCP), /mdns/diag (cache mDNS), /debug/http_pipeline (santé HTTP sortant). conditionnel carte Batterie si battery_enabled.
Écran « Performance »
Accès : menu › Performance. Heap/système, batterie optionnelle, instantané réseau (LwIP + mDNS) et table de comptage par endpoint HTTP.
Source principale : /perf.json (heap : free/max_alloc/min/frag_pct/psram_free, uptime_ms, total_hits, endpoints : url/hits) interrogé toutes les 5 s. Complété par /debug/lwip_stats et /mdns/diag. Bouton Reset compteurs (btnReset) → /perf/reset ; case autoRefresh (5 s).
Écran « Console logs »
Accès : menu › Console logs. Visionneuse de la console série en direct : interrogation incrémentale du tampon, parsing des lignes [HH:MM:SS][NIV][TAG], coloration par niveau, filtres, pause, auto-scroll et téléchargement brut.
| Contrôle | Rôle |
|---|---|
| Filtres ALL / INF / WRN / ERR / DBG | Masquage côté client par niveau (data-filter). |
| Auto-scroll — scrollBtn | Suit ou fige le défilement. |
| Pause — pauseBtn | Suspend/reprend l'interrogation. |
| Vider / Télécharger | Vide l'affichage / télécharge /log.txt. |
Source. La console interroge /cs?c2=<id> toutes les 2 s : réponse texte brut (et non JSON) au format ID}1FLAG}1TEXTE — l'id de séquence permet la lecture incrémentale, le flag « 0 » signale une réinitialisation du tampon. Un indicateur (pollDot) montre l'état de l'interrogation.
Écran « Assistant de configuration »
Accès : au premier démarrage (servi à la place du tableau de bord jusqu'à la fin), ou relancé depuis Sauvegardes. Parcours guidé en 8 étapes, habillage plein écran propre, reprise à la dernière étape enregistrée.
| Étape | Contrôles (id) | Endpoint de sauvegarde |
|---|---|---|
| 1 · Bienvenue | welcomeLang (fr/en), welcomeName (lecture seule) | /setlanguage?lang= |
| 2 · Restauration | radio restoreChoice, restoreFileInput | POST /config/import (optionnel) |
| 3 · Heure | ntpServer, ntpTz, ntpTzCustom | /applyntp?ntp_server=&ntp_timezone= |
| 4 · Source d'énergie | sourceMode (0–5), shellyIp | /setsource?source= (+ /get?EM=&save=1 pour Shelly) |
| 5 · Dimmer & charge | dimmerEnable, dimmerCharge (0–10000 W), dimmerType | /get?dimmerlocal=&charge1=&dimmer_type=&save=1 |
| 6 · MQTT (optionnel) | mqttHost, mqttPort, mqttUser, mqttPass, mqttHA | /applymqtt?… |
| 7 · Communauté (optionnel) | radio commChoice, commCountry, commDept | /setcommunity?enabled=&country=&dept= |
| 8 · Validation | récapitulatif recapBody | /wizard/complete → redirige vers / |
Navigation : Précédent / Suivant / Sauter (étapes optionnelles) / Mode expert (/wizard/complete). Chaque changement d'étape est persisté via /wizard/setstep?n=. L'état de reprise vient de /wizard/state (step, language, pvname, mode_source).
Référence vivante. Ce manuel décrit l'interface web du Watt-Guardian telle qu'embarquée dans le firmware. Les libellés exacts peuvent varier selon la langue choisie et la gamme de licence active ; les fonctions verrouillées restent visibles mais grisées. En cas de doute, l'écran Informations système indique la version exacte du firmware et du filesystem.