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>
En mode hotspot, le scan live est impossible (wlan0 occupée).
Utilise wifi_list.csv (scan au boot) avec notice explicative.
Ajout timeout 10s sur le scan live pour eviter blocage.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Extraction du code self-test dans des fichiers partagés (selftest.js +
selftest-modal.html) pour éviter la duplication. Ajout du bouton Run
Self Test sur les pages index, sensors et admin. Nouveau test RTC qui
vérifie la connexion du module DS3231 et la synchronisation horloge.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Empêche le téléchargement par dates si début/fin non renseignées
- Ajoute une carte "Télécharger toute la table" (bypass dates)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Corrige une desynchronisation serie qui causait l'envoi de la commande
AT+USOWR comme donnees UDP au lieu du payload capteurs. Ajout de flush
buffer serie, verification du prompt @, et abort propre a chaque etape.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Nouveau script sound_meter/read.py pour lecture à la demande (JSON)
- launcher.php: appel du script Python au lieu de l'ancien binaire C
- sensors.html: carte USB, suppression boutons start/stop, affichage JSON
- Traductions fr/en: I2C → USB, NSRT MK4
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Évite de lire des URCs résiduelles (ex: +USECMNG, AT+USECPRF) émises
par le modem SARA pendant son initialisation au démarrage.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Sépare le bouton SIM en deux : Get Data (ICCID) et Get Data (IMSI)
- Ajout fonction getImsiInfo() avec commande AT+CIMI
- Parse la réponse pour extraire le numéro IMSI (15 chiffres)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Capture l'IMSI dans une variable pour l'afficher dans le récap
- Affiche l'URL complète http://<ip>/html/admin.html (cliquable dans le terminal)
- Supprime la ligne eth0 (pas de connexion ethernet)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Les appels sara.py (ATI, LED, CCID) affichent désormais un warning
au lieu de faire échouer le script si le module SARA n'est pas détecté.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Le script get_data.py retourne maintenant toujours du JSON, meme en cas
d'erreur (port serie, absence de donnees). Cote web, les erreurs sont
affichees proprement dans la carte capteur.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Scripts MH-Z19/get_data.py (lecture standalone) et write_data.py (écriture SQLite)
- Table data_MHZ19, config MHZ19, cleanup et service systemd (120s)
- Web UI : carte test sensors, checkbox admin, boutons database + CSV download
- SARA_send_data_v2.py non modifié (sera fait dans un second temps)
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Le script dans topbar.html ne s'exécutait pas car innerHTML ignore les
balises <script>. Déplacé la logique dans un fichier JS séparé
(topbar-logo.js) avec MutationObserver pour détecter l'insertion du topbar.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Le logo ModuleAir n'était pas suivi par git, empêchant
l'affichage sur les capteurs configurés en ModuleAir Pro.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Each table row in the stats card now has a download button that exports
the entire table as CSV with proper column headers, generated server-side.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Show table info (entry count, oldest/newest dates, total DB size) in a
new card on the database page, with auto-refresh and i18n support.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add VERSION file (1.0.0) and changelog.json for firmware tracking
- Add device_type config param (nebuleair_pro default, backward compatible via INSERT OR IGNORE)
- Add device_type select in admin.html Protected Settings
- Add version badge and changelog modal in Updates section
- Add get_firmware_version and get_changelog PHP endpoints
- Display firmware version in update_firmware.sh after git pull
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>