From d34b029d483d5b0ab7c14e1a97ed50ef0a69a69c Mon Sep 17 00:00:00 2001 From: PaulVua Date: Tue, 12 May 2026 17:42:58 +0200 Subject: [PATCH] v1.7.6: Tableau SystemD Services - ajout des 3 services manquants Ajout dans le tableau admin et dans les listes allowed restart/toggle: - rtc_save_to_db.service - nebuleair-wifi-powersave.timer - nebuleair-cpu-power.service Aussi: nebuleair-noise-data.timer etait dans get_systemd_services mais absent des listes restart/toggle (les boutons n'auraient pas fonctionne). Corrige. Nouveau: support d'un display_name explicite par service (override optionnel) pour les noms qui ne suivent pas la convention 'nebuleair-*-data.timer'. Co-Authored-By: Claude Opus 4.7 (1M context) --- VERSION | 2 +- changelog.json | 15 ++++++++++++ html/launcher.php | 60 ++++++++++++++++++++++++++++++++++------------- 3 files changed, 60 insertions(+), 17 deletions(-) diff --git a/VERSION b/VERSION index 6a126f4..de28578 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -1.7.5 +1.7.6 diff --git a/changelog.json b/changelog.json index 77b73fd..5331832 100644 --- a/changelog.json +++ b/changelog.json @@ -1,5 +1,20 @@ { "versions": [ + { + "version": "1.7.6", + "date": "2026-05-12", + "changes": { + "features": [], + "improvements": [ + "Page admin (tableau SystemD Services): ajout de 3 services manquants — rtc_save_to_db, nebuleair-wifi-powersave.timer, nebuleair-cpu-power.service", + "Page admin: support d'un display_name explicite par service (sinon auto-cleanup) — affichage propre pour les services .service en plus des .timer", + "Page admin: nebuleair-noise-data.timer ajoute aux listes allowed pour restart/toggle (etait dans get_systemd_services mais pas dans les 2 autres)" + ], + "fixes": [], + "compatibility": [] + }, + "notes": "Le tableau SystemD Services affiche maintenant la liste complete des 11 services NebuleAir. Cohérence des 3 listes hardcodees (display, restart, toggle)." + }, { "version": "1.7.5", "date": "2026-05-12", diff --git a/html/launcher.php b/html/launcher.php index 1bcf394..1682a28 100755 --- a/html/launcher.php +++ b/html/launcher.php @@ -1476,6 +1476,7 @@ if ($type == "execute_command") { if ($type == "get_systemd_services") { try { // List of NebuleAir services to monitor with descriptions and frequencies + // Optional 'display_name' overrides the auto-generated cleaned-up name. $services = [ 'nebuleair-npm-data.timer' => [ 'description' => 'Collects particulate matter data from NextPM sensor', @@ -1508,26 +1509,45 @@ if ($type == "get_systemd_services") { 'nebuleair-db-cleanup-data.timer' => [ 'description' => 'Cleans up old data from database', 'frequency' => 'Daily' + ], + 'nebuleair-wifi-powersave.timer' => [ + 'display_name' => 'Wifi powersave', + 'description' => 'Enables WiFi power-saving mode to reduce battery consumption', + 'frequency' => '10 min after boot' + ], + 'nebuleair-cpu-power.service' => [ + 'display_name' => 'Cpu power', + 'description' => 'Applies CPU power mode from DB config at boot', + 'frequency' => 'At boot' + ], + 'rtc_save_to_db.service' => [ + 'display_name' => 'Rtc save to db', + 'description' => 'Reads DS3231 RTC over I2C and saves timestamp to DB', + 'frequency' => 'Continuous (1Hz)' ] ]; - + $serviceStatus = []; - + foreach ($services as $service => $serviceInfo) { // Get service active status $activeCmd = "systemctl is-active " . escapeshellarg($service) . " 2>/dev/null"; $activeStatus = trim(shell_exec($activeCmd)); $isActive = ($activeStatus === 'active'); - + // Get service enabled status $enabledCmd = "systemctl is-enabled " . escapeshellarg($service) . " 2>/dev/null"; $enabledStatus = trim(shell_exec($enabledCmd)); $isEnabled = ($enabledStatus === 'enabled'); - - // Clean up service name for display - $displayName = str_replace(['.timer', 'nebuleair-', '-data'], '', $service); - $displayName = ucfirst(str_replace('-', ' ', $displayName)); - + + // Display name: explicit override if provided, otherwise auto-cleanup + if (isset($serviceInfo['display_name'])) { + $displayName = $serviceInfo['display_name']; + } else { + $displayName = str_replace(['.timer', '.service', 'nebuleair-', '-data'], '', $service); + $displayName = ucfirst(str_replace('-', ' ', $displayName)); + } + $serviceStatus[] = [ 'name' => $service, 'display_name' => $displayName, @@ -1566,14 +1586,18 @@ if ($type == "restart_systemd_service") { // Validate service name (security check) $allowedServices = [ 'nebuleair-npm-data.timer', - 'nebuleair-envea-data.timer', + 'nebuleair-envea-data.timer', 'nebuleair-sara-data.timer', 'nebuleair-bme280-data.timer', 'nebuleair-mppt-data.timer', + 'nebuleair-noise-data.timer', 'nebuleair-mhz19-data.timer', - 'nebuleair-db-cleanup-data.timer' + 'nebuleair-db-cleanup-data.timer', + 'nebuleair-wifi-powersave.timer', + 'nebuleair-cpu-power.service', + 'rtc_save_to_db.service' ]; - + if (!in_array($service, $allowedServices)) { echo json_encode([ 'success' => false, @@ -1581,7 +1605,7 @@ if ($type == "restart_systemd_service") { ]); exit; } - + try { // Restart the service $command = "sudo systemctl restart " . escapeshellarg($service) . " 2>&1"; @@ -1627,14 +1651,18 @@ if ($type == "toggle_systemd_service") { // Validate service name (security check) $allowedServices = [ 'nebuleair-npm-data.timer', - 'nebuleair-envea-data.timer', + 'nebuleair-envea-data.timer', 'nebuleair-sara-data.timer', 'nebuleair-bme280-data.timer', 'nebuleair-mppt-data.timer', + 'nebuleair-noise-data.timer', 'nebuleair-mhz19-data.timer', - 'nebuleair-db-cleanup-data.timer' + 'nebuleair-db-cleanup-data.timer', + 'nebuleair-wifi-powersave.timer', + 'nebuleair-cpu-power.service', + 'rtc_save_to_db.service' ]; - + if (!in_array($service, $allowedServices)) { echo json_encode([ 'success' => false, @@ -1642,7 +1670,7 @@ if ($type == "toggle_systemd_service") { ]); exit; } - + try { $enable = filter_var($enable, FILTER_VALIDATE_BOOLEAN); $action = $enable ? 'enable' : 'disable';