- Bouton Reset Hardware (GPIO 16) avec verification ATI apres redemarrage
- Bandeau d'alerte rouge quand mode configuration actif (transmission desactivee)
- Reset automatique de modem_config_mode a 0 au boot (SARA/reboot/start.py)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Meme modele que NPM: ecriture en base avec valeurs a 0 et noise_status=0xFF
si capteur deconnecte, flag ERR_NOISE (bit 5) dans byte 66 UDP, messages
explicites sur page capteurs et self-test.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- npm_status 0xFF = pas de reponse du capteur → flag ERR_NPM (byte 66 bit 3)
et byte 67 reste a 0x00 (pas de status valide a transmettre)
- npm_status valide → byte 67 tel quel, pas de flag dans byte 66
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Quand npm_status = 0xFF (aucune reponse du capteur), affiche
"Capteur deconnecte" au lieu de lister tous les flags d'erreur.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Adapte le self-test au nouveau format retourne par get_data_modbus_v3.py
(npm_status numerique decode bit par bit au lieu de notReady/fanError/etc.)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Lecture npm_status depuis derniere mesure en base (rowid DESC, pas de moyenne)
- Independant du RTC (pas de dependance au timestamp)
- Byte 67 du payload UDP = registre status NextPM
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
En mode --dry-run, les print d'erreur/warning/status sont desactives
pour que seul le JSON soit envoye en sortie standard.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- NPM: mode --dry-run (print JSON sans ecriture en base)
- launcher.php: endpoint npm appelle get_data_modbus_v3.py --dry-run
- sensors.html: affichage PM + temp + humidite + status NPM decode
- Suppression unite ug/m3 sur le champ status
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- README: ajout section parser Miotiq avec firmware version (bytes 69-71)
- error_flags.md: parser mis a jour (version_major/minor/patch + reserved 22)
- error_flags.md: correction note init bytes 66-68 a 0x00
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Lecture fichier VERSION et pack major.minor.patch dans bytes 69-71
- README: documentation complete structure 100 bytes + conso data
- Changelog mis a jour
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Bytes 66-68 (error_flags, npm_status, device_status) initialises a 0x00
au lieu de 0xFF pour eviter faux positifs cote serveur
- Implementation flag RTC (byte 66) + methodes SensorPayload
- Escalade PDP reset: si echec → notification + hardware reboot + exit
- Changelog et VERSION mis a jour
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Colonne Status avec badge vert 'OK' si 0, badge orange '0xXX'
si erreur. Inclus dans le download CSV.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Ajoute la colonne npm_status a data_NPM via ALTER TABLE.
Place dans set_config.py car c'est le seul script DB appele
par les scripts d'update (create_db.py n'est pas appele).
Liste de migrations extensible pour les futurs ajouts.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- get_data_modbus_v3.py: requete Modbus separee pour lire le registre
status (0x13) du NextPM apres les donnees. Stocke dans npm_status.
- create_db.py: ajout colonne npm_status (INTEGER DEFAULT 0) dans
data_NPM + migration ALTER TABLE pour bases existantes.
- En cas d'erreur de lecture status, garde 0xFF (toutes erreurs).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Definition des 8 bits d'erreur (RTC, BME280, NPM, Envea, bruit,
MPPT, vent), exemples de valeurs, implementation Python, parser
Miotiq mis a jour, et lecture cote serveur.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Detecte rtc_module_time='not connected', affiche un warning
avec icone attention + message 'Verifiez la pile et les cables I2C'.
Le champ RTC passe en bordure rouge. Distingue clairement
deconnexion hardware vs simple desynchronisation.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Le mDNS utilise le hostname systeme (aircarto), pas le deviceName
de la DB (NebuleAir-pro034). Ajout de /html/ dans l'URL aussi.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Coherent avec le changement fait sur la page Admin Clock.
Le self-test affiche l'ecart en minutes/secondes si desync.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Indique de faire d'abord une mise a jour via WiFi pour debloquer
l'upload hors-ligne (la MAJ en ligne corrige la config PHP).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Les capteurs deja deployes auront automatiquement la bonne config
Apache/PHP lors de la prochaine mise a jour (git pull ou upload zip).
Verifie si AllowOverride All est actif et si upload_max < 50M avant
de modifier. Pas de conflit avec installation_part1.sh (idempotent).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Configure Apache pour accepter les .htaccess (AllowOverride All)
et augmente les limites PHP (upload_max_filesize=50M, post_max_size=55M)
directement dans php.ini comme fallback. Necessaire pour l'upload
de firmware .zip via la page admin.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- RTC time mis en avant (label bold, input large, bordure bleue)
- Ajout champ Browser time (UTC) avec heure de l'appareil
- System time replie dans un details/summary (non utilise)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
L'heure du navigateur (PC/Mac/tablette) est fiable meme sans internet
grace a la pile interne. Plus pertinent que system time Linux qui
n'est pas utilise par le capteur et peut etre faux sans NTP.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Apres disconnect wlan0, l'interface a besoin de temps pour etre
prete a scanner. Ajout sleep 5 + nmcli wifi rescan + sleep 3
avant le scan. Log du contenu CSV pour debug.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Le fetch get_config_sqlite dans topbar-logo.js au DOMContentLoaded
saturait les 6 connexions par domaine du navigateur.
Retour au topbar-logo.js v1.4.4 d'origine. Le badge hotspot est
maintenant gere dans le window.onload de wifi.html.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Repart du code v1.4.4 qui fonctionne (elementsToLoad, config.json,
window.onload) et ajoute proprement: bouton oublier reseau, cards
contextuelles, infos WiFi detaillees, scan ameliore avec cache notice.
Ne touche PAS au systeme de chargement d'origine.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Retour a l'etat 408ab76. Les tentatives d'optimisation du nombre
de fetch (sidebar unique, config partagee, sequencement) causaient
des blocages sur Chrome/Firefox. On garde les features (forget wifi,
hotspot badge, UI wifi) mais on revient au chargement d'origine.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Deplace le fetch get_config_sqlite de DOMContentLoaded vers
window.onload dans topbar-logo.js. Les requetes sont maintenant
sequencees: DOMContentLoaded (sidebar+topbar+i18n) -> onload
(config) -> event (internet/scan). Max 3-4 requetes simultanees.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
window.onload attend que les ressources initiales soient chargees,
liberant les slots HTTP avant de lancer les AJAX (internet, scan).
Reutilise la config deja fetched par topbar-logo.js via window global.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
applyTranslations modifie le DOM -> declenche MutationObserver
-> re-appelle applyConfig + applyTranslations -> boucle infinie.
Le re-apply reste dans le callback fetch sidebar de chaque page.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Les textes data-i18n de la sidebar etaient vides car les traductions
s'appliquaient avant que la sidebar soit chargee via fetch.
topbar-logo.js re-applique maintenant les traductions via son
MutationObserver, ce qui corrige le probleme sur toutes les pages.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- topbar-logo.js expose la config via event 'nebuleair-config-ready'
- wifi.html ecoute l'event au lieu de re-fetcher get_config_sqlite
- Supprime le doublon load_ethernet_info (get_internet fait deja tout)
- Passe de ~9 requetes simultanees a ~5 au chargement
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Reduit de 3 a 2 les fetch au DOMContentLoaded, liberant un slot
de connexion HTTP. Corrige le blocage "pending" cause par la limite
de 6 connexions simultanees par domaine dans Chrome/Firefox.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
L'appel nmcli dans get_config_sqlite bloquait les workers Apache.
Le statut WiFi est maintenant gere uniquement par les scripts shell
(connexion.sh, forget_wifi.sh, boot_hotspot.sh).
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Si nmcli est lent ou bloque, on garde la valeur DB au lieu de
freezer toutes les pages.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Le WIFI_status en DB peut etre desynchronise (ex: reconnexion
manuelle via SSH). Maintenant get_config_sqlite detecte le vrai
etat de wlan0 via nmcli et corrige la DB si necessaire.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sans ce scan, le CSV est vide/perime et la page WiFi en hotspot
ne peut pas afficher les reseaux disponibles.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>