v1.7.7: Fix 'Plus recente' = 'not connected' sur page database

Les requetes MIN/MAX(timestamp) sur les tables capteur etaient
faussees par les lignes accumulees pendant le bug RTC (v1.7.4):
la chaine 'not connected' > toute date ISO en tri ASCII, donc
MAX() retournait 'not connected' au lieu de la vraie date la
plus recente.

Fix: WHERE timestamp != 'not connected' dans les requetes MIN/MAX.
Les lignes 'not connected' restent en base, elles sont juste
ignorees pour le calcul des bornes temporelles affichees.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
PaulVua
2026-05-12 17:47:27 +02:00
parent d34b029d48
commit 5d7aac38e1
3 changed files with 21 additions and 3 deletions

View File

@@ -1 +1 @@
1.7.6 1.7.7

View File

@@ -1,5 +1,20 @@
{ {
"versions": [ "versions": [
{
"version": "1.7.7",
"date": "2026-05-12",
"changes": {
"features": [],
"improvements": [],
"fixes": [
"Page database (Informations sur la base): la colonne 'Plus récente' affichait 'not connected' a cause d'un tri lexicographique mixant des chaines 'not connected' et des dates ISO. Les requetes MIN/MAX excluent maintenant 'not connected'."
],
"compatibility": [
"Aucun impact sur les donnees: les lignes 'not connected' restent en base, elles sont juste ignorees pour le calcul des bornes temporelles affichees"
]
},
"notes": "Effet de bord du bug RTC corrige en v1.7.4: les capteurs deployes avec un rtc_save_to_db.service inactif ont accumule des lignes avec timestamp='not connected'. En tri ASCII, 'n' > '2' donc MAX(timestamp) renvoyait 'not connected' au lieu de la vraie date la plus recente."
},
{ {
"version": "1.7.6", "version": "1.7.6",
"date": "2026-05-12", "date": "2026-05-12",

View File

@@ -675,8 +675,11 @@ if ($type == "db_table_stats") {
$oldest = null; $oldest = null;
$newest = null; $newest = null;
if ($count > 0) { if ($count > 0) {
$oldestResult = $db->query("SELECT MIN(timestamp) as ts FROM $tableName")->fetch(); // Exclude 'not connected' rows: these are sensor readings collected
$newestResult = $db->query("SELECT MAX(timestamp) as ts FROM $tableName")->fetch(); // while the RTC service was down. They are lexicographically > real
// timestamps so they corrupt MAX() (and MIN() too, less obviously).
$oldestResult = $db->query("SELECT MIN(timestamp) as ts FROM $tableName WHERE timestamp != 'not connected'")->fetch();
$newestResult = $db->query("SELECT MAX(timestamp) as ts FROM $tableName WHERE timestamp != 'not connected'")->fetch();
$oldest = $oldestResult['ts']; $oldest = $oldestResult['ts'];
$newest = $newestResult['ts']; $newest = $newestResult['ts'];
} }