v1.12.1: S88 ecrit toujours + code d'etat, plus de CO2 perime transmis

Probleme vu sur pro100: sonde S88 muette (panne cablage) mais write_data.py
n'ecrivait rien -> la base gardait la derniere valeur (487 ppm d'hier) et la
loop d'envoi la transmettait en boucle.

- data_S88: nouvelle colonne s88_status (0=OK, 0xFF=sonde muette), comme
  npm_status/noise_status. Migration via create_db.py + set_config.py + self-heal.
- S88/write_data.py: ecrit DESORMAIS une ligne a chaque cycle (CO2=0 + 0xFF si
  pas de reponse). Connexion SQLite timeout=10 (anti database-is-locked).
- SARA_send_data_v2.py: lit s88_status; si 0xFF -> bytes 81-82 restent 0xFFFF
  (CO2 absent) au lieu d'envoyer une valeur perimee. Compatible bases non migrees.
- database.html + launcher.php: badge statut + colonne dans les exports CSV.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
PaulVua
2026-06-02 17:10:32 +02:00
parent dad953acdc
commit d554f03195
8 changed files with 101 additions and 34 deletions

View File

@@ -323,7 +323,7 @@ function buildTableHeader(table) {
data_MPPT: ['Timestamp','Battery Voltage','Battery Current','solar_voltage','solar_power','charger_status'],
data_NOISE: ['Timestamp','Curent LEQ','DB_A_value','Status'],
data_MHZ19: ['Timestamp','CO2 (ppm)'],
data_S88: ['Timestamp','CO2 (ppm)'],
data_S88: ['Timestamp','CO2 (ppm)','Status'],
data_CCS811: ['Timestamp','eCO2 (ppm)','TVOC (ppb)']
};
return (headers[table] || ['Data']).map(h => `<th>${h}</th>`).join('');
@@ -343,11 +343,16 @@ function buildTableRow(table, columns) {
const nStatusLabel = nStatus === 255 ? '❌ Déconnecté' : '✅ OK';
return `<td>${columns[0]}</td><td>${columns[1]}</td><td>${columns[2]}</td><td>${nStatusLabel}</td>`;
}
if (table === "data_S88") {
const sStatus = parseInt(columns[2]) || 0;
const sStatusLabel = sStatus === 255 ? '❌ Déconnecté' : '✅ OK';
return `<td>${columns[0]}</td><td>${columns[1]}</td><td>${sStatusLabel}</td>`;
}
if (table === "timestamp_table") {
return `<td>${columns[1]}</td>`;
}
// Default: render all available columns
const colCount = { data_BME280: 4, data_NPM_5channels: 6, data_envea: 6, data_WIND: 3, data_MPPT: 6, data_MHZ19: 2, data_S88: 2, data_CCS811: 3 };
const colCount = { data_BME280: 4, data_NPM_5channels: 6, data_envea: 6, data_WIND: 3, data_MPPT: 6, data_MHZ19: 2, data_S88: 3, data_CCS811: 3 };
const n = colCount[table] || columns.length;
return columns.slice(0, n).map(c => `<td>${c}</td>`).join('');
}
@@ -487,7 +492,7 @@ function downloadCSV(response, table) {
csvContent += "TimestampUTC,CO2_ppm\n";
}
else if (table === "data_S88") {
csvContent += "TimestampUTC,CO2_ppm\n";
csvContent += "TimestampUTC,CO2_ppm,s88_status\n";
}
else if (table === "data_CCS811") {
csvContent += "TimestampUTC,eCO2_ppm,TVOC_ppb\n";