Le Watt-Sensors est un capteur multi-sondes : il lit une ou plusieurs DS18B20 sur un bus OneWire et publie les températures en MQTT avec auto-découverte Home Assistant. Cette page documente écran par écran son interface web, servie sur son adresse locale.
Conventions de lecture
Le id est l'identifiant technique du champ (utile au support). Sauf mention contraire, 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 indicateur « modifications non enregistrées » s'allume dans la barre du haut dès qu'un champ est touché.
Badges utilisés dans cette page
Immédiat appliqué à chaud Reboot effectif au prochain démarrage opt-in désactivé par défaut conditionnel visible selon le matériel ou la config
Éléments communs à toutes les pages
La barre latérale, la barre du haut et le pied de page sont identiques sur toutes les pages de gestion (sauf en mode point d'accès, qui a sa propre mise en page). Ils ne sont pas redécrits dans chaque écran.
Barre latérale (menu)
| Élément | Rôle |
|---|---|
| sensors (logo) | Lien vers la racine / (tableau de bord). Le libellé name est remplacé par le nom réel du capteur. |
| Bloc d'état | Version du firmware version, SSID Wi-Fi WIFI, signal RSSI en dBm — rafraîchis depuis /state. |
| Configuration · Broker MQTT · Réseau Wifi · Sauvegardes | Pages de réglage. |
| Informations système · Debug · Console logs | Diagnostic. |
| Reboot | Lien /reboot : redémarrage immédiat. |
Barre du haut & pied de page
En haut : un bandeau d'état global (status-banner ; vert = normal, orange = partiel, rouge = erreur) et l'horloge locale heure-topbar. En bas : lien vers le site et l'année. Tous les messages d'état sont des clés i18n (interface bilingue FR / EN, sélecteur sur la page Configuration).
Chargement sérialisé. Sur ESP32 sans PSRAM, les pages chargent leurs ressources une par une (« chain ») pour ne pas saturer la pile réseau. Les scripts de chaque page n'agissent qu'une fois jQuery et i18n prêts.
Écran « Tableau de bord »
Accès : racine / (index.html) une fois le capteur connecté au Wi-Fi. Vue en lecture seule, rafraîchie toutes les 3 s depuis /state.
| Carte (id) | Affiche | Comportement |
|---|---|---|
| Température — temperature | Température de la sonde maître (°C). | Si plusieurs sondes sont détectées, la carte bascule sur le nombre de sondes (libellé temperature-label). |
| Sonde Dallas — dallas-status | État du bus OneWire. | Vert « Connectée » (dallas_status=1), rouge « Signal perdu » (=2), gris « Non détectée » (=0). |
| Heap libre — heap-free | heap_free en kB. | Indicateur mémoire (santé du firmware). |
| Délégation HTTPS — proxyCardIndex | Statut du watt-proxy, hôte:port résolu. | conditionnel visible uniquement si le proxy est activé. Boutons Re-tester (POST /proxy/discover) et Configurer. |
Les badges d'en-tête bdg-wifi / bdg-mqtt / bdg-ntp passent au vert/rouge selon WIFI, mqtt_connected et ntp_sync.
Liste multi-sondes. Une section dallas-section apparaît dès qu'au moins une sonde est détectée : une vignette par sonde (nom personnalisé name, adresse ROM addr, température). Masquée si dallas_devices est vide.
Écran « Accueil point d'accès » (onboarding Wi-Fi)
Accès : à la première mise sous tension (ou après un factory reset), le capteur démarre en point d'accès WATT-SENSORS-xxxx. La racine sert alors cet écran d'accueil dédié (fichiers index-ap.html et wifi-ap.html, identiques). Mise en page autonome, sans barre latérale ; basculement langue FR / EN en bas.
| Champ (id) | Type | Rôle |
|---|---|---|
| Réseau Wi-Fi — ssidSelect | liste | Réseaux détectés au scan (scanwifi), triés par signal, avec cadenas et barres de force. Dernière option : « Réseau caché ». |
| Bouton Re-scanner — rescanBtn | bouton | Relance scanwifi et repeint la liste. |
| Nom du réseau (SSID) — ssidManual | texte | conditionnel apparaît uniquement quand « Réseau caché » est choisi (max 31 car.). |
| Signal — signalRow | indicateur | Force (Excellent / Bon / Moyen / Faible) + dBm + cadenas Sécurisé/Ouvert du réseau sélectionné. |
| Mot de passe — password | mot de passe | Clé Wi-Fi (max 63 car.). Bouton œil togglePwdBtn pour afficher/masquer. |
| Bouton Connecter et redémarrer — submitBtn | submit | Envoie 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.
Repli automatique. Si la connexion échoue, le capteur revient de lui-même en mode point d'accès après quelques minutes — l'écran reste accessible.
Écran « Configuration »
Accès : menu › Configuration. Regroupe les sondes Dallas, les broches GPIO, l'heure (NTP), la langue, la délégation HTTPS (proxy) et le relais cloud. /config pré-remplit les champs au chargement.
Carte « Sondes de température » 🌡
Boutons d'en-tête : Rechercher (btnScanDallas → /restartdallas, relance la détection du bus) et Reset Dallas (/resetdallas, oublie les sondes mémorisées). L'état global s'affiche dans dallas-status / dallas-count.
La liste dallasList est construite à partir de dallas_devices (lu sur /config) : une carte par sonde.
| Élément (id) | Type | Plage | Rôle |
|---|---|---|---|
| Adresse ROM + température | lecture | — | Affiche l'adresse 16 hex (addr) et la dernière mesure ; badge « absente » si la sonde n'est plus détectée. |
| Nom personnalisé — dallas-name-input | texte | max 22 | Étiquette lisible (ex : « Ballon ECS haut »). Utilisée en MQTT / Home Assistant. |
| Bouton Supprimer (corbeille) | bouton | — | Retire la sonde de la config (/setdallas?dallas_remove=<addr>), après confirmation. |
Le bouton Enregistrer les noms (saveDallasNames) envoie tous les libellés d'un coup (/setdallas?name_<addr>=…). Immédiat les noms sont persistés sans reboot.
Carte « GPIO » 🔧 (repliable)
| Champ (id) | Type | Plage | Défaut | Effet |
|---|---|---|---|---|
| Pin OneWire (Dallas) — pin_one_wire | nombre | 0–40 | 25 | Broche du bus des sondes. Vide = valeur par défaut default_one_wire. Immédiat |
| Résolution Dallas — temperature_precision | liste | 9–12 bits | 10 | Compromis précision / temps de conversion (9 bits ≈ 94 ms … 12 bits ≈ 750 ms). Immédiat |
Le bouton Appliquer les GPIO (applyGpio) envoie /setgpio et réinitialise la détection des sondes.
Cartes « Serveur NTP & Fuseau » 🕐 et « Langue » 🌐
| Élément (id) | Type | Rôle |
|---|---|---|
| Serveur NTP — ntp_server + bouton Tester | texte | Adresse du serveur de temps ; le bouton btnTestNtp vérifie la synchro (/testntp). |
| Fuseau horaire — ntp_timezone | liste | Liste mondiale (Europe, Afrique, Asie, Amériques, Pacifique) ; gère l'heure d'été automatiquement. |
| Langue — lang | liste | FR / EN. Peuplée via /languages ; /setlanguage?lang= applique le changement immédiatement sur la page courante. |
Cartes « Proxy HTTPS » et « Relais cloud » ☁
La carte Proxy HTTPS (watt-proxy) délègue le handshake TLS à un watt-proxy ESP32-S3 pour soulager la mémoire pendant les MAJ OTA.
| Champ (id) | Type | Rôle |
|---|---|---|
| Activer la délégation — proxy_enabled | case | Active le passage par un watt-proxy. Optionnel. |
| Découverte mDNS — proxy_auto_discover | case | Cherche automatiquement un proxy (SolarMeshLabs._tcp). |
| Hôte manuel — proxy_host | texte | Vide = mDNS auto. Sinon ip:port. Bouton Découvrir maintenant (POST /proxy/discover) ; statut via /proxy/status (rafraîchi toutes les 15 s). |
Relais cloud (carte cloudCard). opt-in désactivé par défaut. Active l'envoi périodique d'un instantané chiffré (AES-256-GCM, zero-knowledge, lecture seule) au relais cloud, pour la consultation à distance via l'app companion. Champs : cloud_enabled, URL du relais cloud_ingest_url (max 92 car.). Statut : cl_claimed (clé E2E appairée), cl_count (envois réussis), cl_status (dernier code HTTP). Boutons Enregistrer (/setcloud) et Tester l'envoi (/cloud/test).
Le bouton vert Sauvegarder et Appliquer (saveAll) enregistre le proxy (/setproxy), applique le NTP (/applyntp) et persiste la config (/get?save=yes). Les cartes Relais cloud et la langue ont leur propre action.
Mode point d'accès. Tant que le capteur n'est pas connecté au Wi-Fi, c'est l'écran d'accueil point d'accès (voir plus haut) qui est servi à la racine — la page Configuration complète n'est disponible qu'en mode connecté.
É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) | Type | Défaut | Rôle |
|---|---|---|---|
| Serveur — MQTT_SERVER | texte | — | IP ou hostname du broker (ex. 192.168.1.40 ou broker.local). |
| Port — MQTT_PORT | nombre | 1883 | Port du broker (non chiffré par défaut). |
| Utilisateur — MQTT_USER | texte | (vide) | Optionnel — laisser vide si pas d'authentification. |
| Mot de passe — MQTT_PASSWORD | mot de passe | (vide) | Optionnel. |
| Activer Home Assistant — HA_ENABLED | interrupteur | activé | Publie les topics d'auto-découverte HA (une entité par sonde). |
Bouton Tester (btnTest → /testmqtt) : vérifie la joignabilité sans sauvegarder. Bouton Sauvegarder et Appliquer (btnSave → /applymqtt) : enregistre et reconnecte Immédiat sans reboot. Toute modification du serveur/port repasse le bandeau en « non testé ».
Topics publiés : SolarMeshLabs/Watt-Sensors/<id>/...
Écran « Réseau Wi-Fi »
Accès : menu › Réseau Wifi. Permet de reconfigurer le Wi-Fi en mode connecté (sans repasser par le point d'accès). Un badge wifiStatusBadge indique Connecté / Non connecté ; /getwifi et /state alimentent l'état.
| Champ (id) | Type | Rôle |
|---|---|---|
| SSID — ssid | texte | Nom du réseau cible (saisi ou choisi dans les résultats de scan). |
| Password — password | mot de passe | Clé du réseau. |
| Bouton Rechercher — btnScanWifi | bouton | Scan (/scanwifi, 3–5 s) ; résultats en badges cliquables (wifiResults) qui remplissent le SSID. |
| Bouton Sauvegarder et Appliquer — wifiSubmitBtn | submit | Envoie get?ssid=&password= et applique la nouvelle config réseau. |
Écran « Sauvegarde et restauration »
Accès : menu › Sauvegardes. Trois zones : fichier local, broker MQTT, et zone dangereuse.
Carte « Sauvegarde sur fichier »
| Bouton (id) | Endpoint | Rôle |
|---|---|---|
| Télécharger la sauvegarde — backup | /config/export | Génère un JSON (config + mqtt, champs sensibles chiffrés) nommé AAAA-MM-JJ-…-Watt-Sensors-XXXX.json. |
| Restaurer depuis un fichier — restoreBtn | POST /config/import | Charge un JSON local (restoreFile) et l'importe ; redémarrage avec compte à rebours puis redirection. |
Carte « Sauvegarde MQTT »
Statut mqttStatusBadge (Connecté / Déconnecté) et date de dernière sauvegarde mqttLastBackup via /mqttbackup/status (rafraîchi 10 s). Les boutons sont conditionnel désactivés tant que le broker n'est pas connecté.
| Élément (id) | Endpoint | Rôle |
|---|---|---|
| Sauvegarde auto — mqttAutoToggle | /get?mqtt_backup=&save=1 | Publie (retain) la config sur le broker au boot et à chaque reconnexion, et la restaure si manquante. |
| Sauvegarder vers MQTT — mqttPush | /mqttbackup/push | Publie immédiatement la config sur le broker. |
| Restaurer depuis MQTT — mqttPull | /mqttbackup/pull | Récupère la config (jusqu'à 20 s) ; si restaurée, reboot automatique avec compte à rebours. |
Carte « Zone dangereuse »
| Bouton (id) | Endpoint | Rôle |
|---|---|---|
| Reset config (garde WiFi) — eraseBtn | /config/erase | Efface la config mais garde le Wi-Fi — l'appareil reste joignable après reboot. |
| Factory reset (efface tout) — eraseAllBtn | /config/erase?all=1 | Efface tout, Wi-Fi compris — reboot en mode point d'accès. |
Irréversible. Les deux effacements demandent une confirmation puis redémarrent le capteur. Après un factory reset, il faut repasser par l'écran d'accueil point d'accès.
Écran « Informations système »
Accès : menu › Informations système. Tableaux statiques (lus une fois via /info) regroupés en cartes :
| Carte | Champs (ids préfixés i_) |
|---|---|
| Identité | i_name, i_board, i_fw (BUILD_FW), i_fs (BUILD_FS + badge ⚠ si FW/FS désynchronisés), i_release, i_compile. |
| Matériel | i_chip, i_rev, i_cores, i_freq, i_flash, i_psram (n/a sur ESP32 sans PSRAM), i_mac. |
| Mémoire | i_heap, i_heap_min, i_maxalloc, i_spiffs. |
| Réseau | i_netmode, i_ssid, i_rssi, i_ip, i_gw, i_subnet, i_dns. |
| Sondes Dallas | i_scount (détectées), i_slost (point vert/rouge), liste i_stemps (adresse + °C). |
| MQTT | i_mqbroker, i_mqconn, i_mqha. |
| Système | i_uptime, i_reset (cause + code 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 otaApply appelle POST /ota/apply et suit l'avancement via /ota/status et les évènements SSE ota_status sur /events. 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 (sans i18n ni bandeau d'état). Bouton Refresh et case auto 10s (autoRefresh) ; les 4 lectures sont échelonnées pour ménager la mémoire.
| Carte | Endpoint | Contenu |
|---|---|---|
| Reboot précédent (NVS) | /debug/boot | Numéro de reboot, dernier uptime, reset code, tâche active au crash, heap/maxBlk précédents. |
| Heap now + deltas | /debug/heap | Free, max alloc, min historique, fragmentation, deltas 1 h/6 h/24 h, PSRAM, sparkline 24 h. |
| Tasks + mutex | /debug/tasks | Par tâche : âge heartbeat, seuil, stalls, stack HWM ; compteurs mutex OK / timeouts. |
| Mutex hold-time | /debug/mutex | Temps de détention par callsite (uniquement si -D DEBUG_LOCK_TIMING). |
| Event ring buffer | /debug/ring?n= | Derniers N évènements (r_n 30/50/100, filtre niveau r_lvl), colorés par sévérité. |
É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-filter | TOUT / INF / WRN / ERR / DBG : masque les lignes hors du niveau choisi. |
| Auto-scroll — scrollBtn | Suit automatiquement le bas du flux (bascule ON/OFF). |
| Pause — pauseBtn | Gèle l'arrivée des nouvelles lignes (le pastille pollDot passe à l'orange). |
| Vider | Efface l'affichage local (clearLog). |
| log.txt | Télécharge le journal brut (/log.txt). |
À retenir. Le Watt-Sensors est une brique de mesure pure : il ne pilote aucune charge. Sa valeur vient des sondes (jusqu'à plusieurs DS18B20 nommées) et de leur publication MQTT / Home Assistant. Les Watt-Guardian et Watt-Modulator peuvent ensuite consommer ces températures comme sondes distantes.