From 40c6a17dd1c8653722bae75168c434fa544209e8 Mon Sep 17 00:00:00 2001 From: dh_Agent Date: Tue, 29 Sep 2026 06:24:29 +0000 Subject: [PATCH] fix(energiediagramm): Symcon-8-Darstellung korrigieren --- Energiediagramm/README.md | 17 ++++++++++++----- Energiediagramm/libs/EnergyChartCalculator.php | 16 +++++++++++++--- Energiediagramm/module.html | 4 ++-- Energiediagramm/module.php | 5 ++++- tests/EnergiediagrammModulstrukturTest.php | 10 ++++++++-- tests/EnergiediagrammTest.php | 14 +++++++++++++- 6 files changed, 52 insertions(+), 14 deletions(-) diff --git a/Energiediagramm/README.md b/Energiediagramm/README.md index aced640..dd3420a 100644 --- a/Energiediagramm/README.md +++ b/Energiediagramm/README.md @@ -24,14 +24,21 @@ zusaetzlich ein frei waehlbarer inklusiver Datumsbereich und die Navigation durch abgeschlossene Zeitraeume zur Verfuegung. Die Farben fuer Eigenverbrauchsquote und Autarkiegrad werden mit den beiden -Farbauswahlen in der Instanzkonfiguration festgelegt. +Farbauswahlen in der Instanzkonfiguration festgelegt. Das Modul verarbeitet +sowohl aktuelle Hex-Farbwerte als auch die von IP-Symcon 8.0 gespeicherten +dezimalen Farbwerte. ## Darstellung -Die Kachel und ihre vergroesserte Ansicht erhalten beim Aufbau sofort einen -vollstaendigen Datenstand. Beim Oeffnen und beim erneuten Sichtbarwerden wird -die Darstellung aktualisiert. Das Diagrammraster wechselt bei geringer Breite -automatisch von zwei Spalten auf eine Spalte. +Der Inhalt beginnt unterhalb des von Symcon eingeblendeten Kachelkopfs, damit +Zeitraum und Datum vollstaendig bedienbar bleiben. Beim Oeffnen und beim erneuten +Sichtbarwerden wird die Darstellung aktualisiert. Das Diagrammraster wechselt +bei geringer Breite automatisch von zwei Spalten auf eine Spalte. + +IP-Symcon 8.x unterstuetzt HTML-SDK-Darstellungen nur in der normalen Kachel. +Der vom Client angebotene Vergroesserungsdialog kann deshalb leer bleiben. +Ab IP-Symcon 9.0 aktiviert das Modul automatisch den zusaetzlichen +HTML-SDK-Vollbildmodus. ## Berechnung diff --git a/Energiediagramm/libs/EnergyChartCalculator.php b/Energiediagramm/libs/EnergyChartCalculator.php index fb6c0af..0400ee1 100644 --- a/Energiediagramm/libs/EnergyChartCalculator.php +++ b/Energiediagramm/libs/EnergyChartCalculator.php @@ -118,9 +118,19 @@ final class EnergyChartCalculator public static function normalizeColor(string $color, string $fallback): string { - return preg_match('/^#[0-9A-Fa-f]{6}$/', $color) === 1 - ? strtoupper($color) - : strtoupper($fallback); + $color = trim($color); + if (preg_match('/^#[0-9A-Fa-f]{6}$/', $color) === 1) { + return strtoupper($color); + } + + if (preg_match('/^[0-9]+$/', $color) === 1) { + $legacyColor = (int) $color; + if ($legacyColor >= 0 && $legacyColor <= 0xFFFFFF) { + return sprintf('#%06X', $legacyColor); + } + } + + return strtoupper($fallback); } private static function date(string $date): DateTimeImmutable diff --git a/Energiediagramm/module.html b/Energiediagramm/module.html index f6bb330..2491220 100644 --- a/Energiediagramm/module.html +++ b/Energiediagramm/module.html @@ -71,7 +71,7 @@ width: 100%; min-height: 100%; box-sizing: border-box; - padding: 14px; + padding: 58px 14px 14px; overflow: auto; font-family: system-ui, -apple-system, "Segoe UI", sans-serif; color: inherit; @@ -234,7 +234,7 @@ @media (max-width: 560px) { #energy-app { - padding: 10px; + padding: 58px 10px 10px; } .toolbar, diff --git a/Energiediagramm/module.php b/Energiediagramm/module.php index d17ff27..63d9eab 100644 --- a/Energiediagramm/module.php +++ b/Energiediagramm/module.php @@ -37,7 +37,10 @@ class Energiediagramm extends IPSModule $this->RegisterAttributeString(self::ATTR_CUSTOM_START, $today); $this->RegisterAttributeString(self::ATTR_CUSTOM_END, $today); - $this->SetVisualizationType(1); + $visualizationType = version_compare(IPS_GetKernelVersion(), '9.0', '>=') + ? 2 + : 1; + $this->SetVisualizationType($visualizationType); $this->RegisterTimer( 'Refresh', 0, diff --git a/tests/EnergiediagrammModulstrukturTest.php b/tests/EnergiediagrammModulstrukturTest.php index efa28ec..6b5c98a 100644 --- a/tests/EnergiediagrammModulstrukturTest.php +++ b/tests/EnergiediagrammModulstrukturTest.php @@ -49,11 +49,13 @@ final class EnergiediagrammModulstrukturTest extends TestCase self::assertStringContainsString('__ENELIX_INITIAL_STATE__', $html); self::assertStringContainsString('ResizeObserver', $html); self::assertStringContainsString('grid-template-columns: minmax(0, 1fr)', $html); + self::assertStringContainsString('padding: 58px 14px 14px', $html); + self::assertStringContainsString('padding: 58px 10px 10px', $html); self::assertStringContainsString('SetCustomRange', $html); self::assertStringNotContainsString("addEventListener('load'", $html); } - public function testModuleEmbedsInitialPayloadForTileAndPopup(): void + public function testModuleEmbedsInitialPayloadAndEnablesSupportedVisualization(): void { $module = file_get_contents(__DIR__ . '/../Energiediagramm/module.php'); self::assertNotFalse($module); @@ -61,7 +63,11 @@ final class EnergiediagrammModulstrukturTest extends TestCase "str_replace('__ENELIX_INITIAL_STATE__'", $module ); - self::assertStringContainsString('GetVisualizationPopup', $module); + self::assertStringContainsString( + "version_compare(IPS_GetKernelVersion(), '9.0', '>=')", + $module + ); + self::assertStringContainsString('SetVisualizationType($visualizationType)', $module); self::assertStringContainsString('Standardzeitraum', $module); self::assertStringContainsString('CustomStart', $module); self::assertStringContainsString('CustomEnd', $module); diff --git a/tests/EnergiediagrammTest.php b/tests/EnergiediagrammTest.php index 9064c08..64e600e 100644 --- a/tests/EnergiediagrammTest.php +++ b/tests/EnergiediagrammTest.php @@ -110,9 +110,21 @@ final class EnergiediagrammTest extends TestCase '#2F80ED', EnergyChartCalculator::normalizeColor('#2f80ed', '#000000') ); + self::assertSame( + '#00FF4C', + EnergyChartCalculator::normalizeColor('65356', '#000000') + ); + self::assertSame( + '#000000', + EnergyChartCalculator::normalizeColor('0', '#FFFFFF') + ); self::assertSame( '#22A06B', - EnergyChartCalculator::normalizeColor('transparent', '#22a06b') + EnergyChartCalculator::normalizeColor('16777216', '#22a06b') + ); + self::assertSame( + '#22A06B', + EnergyChartCalculator::normalizeColor('-1', '#22a06b') ); } }