v1.10.1: OTA installe les deps pip + filtre lectures parasites CCS811

Découvert en vérif SSH sur nebuleair-pro100 : le timer CCS811 échouait en
ModuleNotFoundError car l'OTA fait git pull mais ne réinstallait jamais les
dépendances pip (installation_part1.sh ne tourne qu'à l'install neuve).

- requirements.txt: source unique de vérité des deps Python
- installation_part1.sh: install via requirements.txt (chemin relatif au script,
  le repo n'est pas encore cloné dans /var/www à cette étape)
- update_firmware.sh: nouvelle étape 2a, pip install -r requirements.txt
  (idempotent) -> les capteurs déjà déployés récupèrent les libs manquantes à l'OTA
- CCS811/write_data.py + get_data.py: skip des lectures eCO2 < 400 ppm
  (échantillon 0/0 parasite juste après init du driver, plancher physique = 400)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
PaulVua
2026-06-02 15:51:58 +02:00
parent 4f3d273981
commit 46c73acb7e
7 changed files with 65 additions and 5 deletions

View File

@@ -62,6 +62,21 @@ if [ -f "/var/www/nebuleair_pro_4g/VERSION" ]; then
print_status "Firmware version: $(cat /var/www/nebuleair_pro_4g/VERSION)"
fi
# Step 2a: Install/update Python dependencies (self-heal)
# OTA does a git pull but historically never (re)installed pip deps, so a new
# sensor lib introduced by an update (e.g. adafruit-circuitpython-ccs811) was
# missing on already-deployed sensors and the timer failed with ModuleNotFound.
# requirements.txt is the single source of truth; pip skips already-satisfied
# packages so this is idempotent and only pulls newly-added libs.
print_status ""
print_status "Step 2a: Installing/updating Python dependencies..."
if [ -f "/var/www/nebuleair_pro_4g/requirements.txt" ]; then
sudo pip3 install -r /var/www/nebuleair_pro_4g/requirements.txt --break-system-packages
check_status "Python dependencies install"
else
print_status "⚠ requirements.txt not found, skipping dependency install"
fi
# Step 2: Update database (schema migration + config keys)
# create_db.py is idempotent (CREATE TABLE IF NOT EXISTS + ALTER TABLE ADD COLUMN
# wrapped in try/except). Required to add tables introduced after the sensor was