From 875a961afb3a6ac158ca09dde4c0eb3569a3c4c0 Mon Sep 17 00:00:00 2001 From: DanielHaefliger Date: Thu, 6 Aug 2026 09:27:07 +0200 Subject: [PATCH] no message --- Ladestation_v2/README.md | 9 +++-- Ladestation_v2/form.json | 10 +---- Ladestation_v2/module.json | 4 +- Ladestation_v2/module.php | 83 ++++++++++++-------------------------- 4 files changed, 34 insertions(+), 72 deletions(-) diff --git a/Ladestation_v2/README.md b/Ladestation_v2/README.md index 907eee4..f7a428d 100644 --- a/Ladestation_v2/README.md +++ b/Ladestation_v2/README.md @@ -4,9 +4,9 @@ Das Modul steuert verschiedene Ladestationstypen. ## Easee -Die Ladestationstypen 5 und 6 verwenden das ausgewählte -`Easee SignalR Gateway`. Bei den Typen 1 bis 4 wird die Gateway-Auswahl -ausgeblendet und keine Gateway-Verbindung verwendet. +Die Ladestationstypen 5 und 6 verwenden das oben als Schnittstelle ausgewählte +`Easee SignalR Gateway`. Die Schnittstellenauswahl wird bei allen +Stationstypen angezeigt. - Typ 5: Easee mit zusätzlicher eCarUp-Benutzerprüfung für Solarladen - Typ 6: Easee ohne eCarUp-Benutzerprüfung @@ -30,6 +30,7 @@ Die Typen 1 bis 4 arbeiten unverändert und benötigen kein Easee-Gateway. 1. Eine Instanz `Easee SignalR Gateway` anlegen. 2. Easee-Benutzername und Passwort im Gateway eintragen. 3. In `Ladestation_v2` Typ 5 oder 6 sowie die Easee-Seriennummer wählen. -4. Im Feld `Easee SignalR Gateway` die gewünschte Gateway-Instanz auswählen. +4. Oben über `Schnittstelle konfigurieren` beziehungsweise + `Schnittstelle ändern` die gewünschte Gateway-Instanz auswählen. Mehrere Easee-Ladestationen desselben Kontos verwenden gemeinsam ein Gateway. diff --git a/Ladestation_v2/form.json b/Ladestation_v2/form.json index 06473b9..270d6a3 100644 --- a/Ladestation_v2/form.json +++ b/Ladestation_v2/form.json @@ -4,7 +4,6 @@ "type": "Select", "name": "Ladestation", "caption": "Ladestation", - "onChange": "IPS_RequestAction($id, \"UpdateEaseeGatewayVisibility\", $Ladestation);", "options": [ { "caption": "Go-E Wallbox (Alte Version)", @@ -99,16 +98,9 @@ "caption": "Variable API-Token für eCarUp", "suffix": "" }, - { - "type": "Select", - "name": "EaseeGatewayID", - "caption": "Easee SignalR Gateway", - "visible": false, - "options": [] - }, { "type": "Label", - "caption": "Die Typen 5 und 6 verwenden das ausgewählte Easee SignalR Gateway. Easee-Zugangsdaten werden im Gateway konfiguriert." + "caption": "Das Easee SignalR Gateway wird oben über Schnittstelle konfigurieren/ändern ausgewählt. Die Typen 5 und 6 verwenden diese Schnittstelle." } ] } diff --git a/Ladestation_v2/module.json b/Ladestation_v2/module.json index 6cc721e..0dba1f7 100644 --- a/Ladestation_v2/module.json +++ b/Ladestation_v2/module.json @@ -4,7 +4,9 @@ "type": 3, "vendor": "Belevo AG", "aliases": [], - "parentRequirements": [], + "parentRequirements": [ + "{BC4E9B83-9C9B-44C3-A902-5CEB45B0E5B1}" + ], "childRequirements": [], "implemented": [ "{A8EF2E37-6B35-4E92-A7D1-4F8172790BA2}" diff --git a/Ladestation_v2/module.php b/Ladestation_v2/module.php index c2e0538..9444ecb 100644 --- a/Ladestation_v2/module.php +++ b/Ladestation_v2/module.php @@ -152,37 +152,6 @@ class Ladestation_v2 extends IPSModule return json_encode($data); } - public function GetConfigurationForm() - { - $form = json_decode(file_get_contents(__DIR__ . "/form.json"), true); - $showGateway = $this->UsesEaseeGateway($this->ReadPropertyInteger("Ladestation")); - $gatewayOptions = [ - ["caption" => "Kein Gateway", "value" => 0], - ]; - - foreach (IPS_GetInstanceListByModuleID(self::EASEE_GATEWAY_MODULE_ID) as $gatewayID) { - $name = trim(IPS_GetName($gatewayID)); - if ($name === "") { - $name = "Easee SignalR Gateway #" . $gatewayID; - } - $gatewayOptions[] = [ - "caption" => $name . " (#" . $gatewayID . ")", - "value" => $gatewayID, - ]; - } - - foreach ($form["elements"] as &$element) { - if (($element["name"] ?? "") === "EaseeGatewayID") { - $element["visible"] = $showGateway; - $element["options"] = $gatewayOptions; - break; - } - } - unset($element); - - return json_encode($form); - } - public function ApplyChanges() { parent::ApplyChanges(); @@ -205,16 +174,17 @@ class Ladestation_v2 extends IPSModule $instance = IPS_GetInstance($this->InstanceID); $parentID = (int)$instance["ConnectionID"]; - // Alte Parent-Verbindungen aus Version 1.1 entfernen. Ab Version 1.2 - // wird das Gateway optional ueber EaseeGatewayID angesprochen. - if ($parentID > 0) { - $parent = IPS_GetInstance($parentID); - if ($parent["ModuleInfo"]["ModuleID"] === self::EASEE_GATEWAY_MODULE_ID) { - IPS_DisconnectInstance($this->InstanceID); + // Eine in Version 1.2/1.3 gespeicherte Gateway-Auswahl wieder als + // normale IP-Symcon-Schnittstelle verbinden. + if ($parentID <= 0) { + $storedGatewayID = $this->GetConfiguredEaseeGatewayID(); + if ($storedGatewayID > 0) { + IPS_ConnectInstance($this->InstanceID, $storedGatewayID); + $parentID = $storedGatewayID; } } - if ($usesEaseeGateway && $this->GetConfiguredEaseeGatewayID() > 0) { + if ($usesEaseeGateway && $this->IsEaseeGatewayInstance($parentID)) { $this->SubscribeToEaseeGateway(); } else { $this->SetValue("Easee_Gateway_Connected", false); @@ -229,14 +199,6 @@ class Ladestation_v2 extends IPSModule { switch ($Ident) { - case "UpdateEaseeGatewayVisibility": - $this->UpdateFormField( - "EaseeGatewayID", - "visible", - $this->UsesEaseeGateway((int)$Value) - ); - break; - case "SetAktuelle_Leistung": $this->SetValue("Power", (int)$Value); break; @@ -358,22 +320,17 @@ class Ladestation_v2 extends IPSModule private function SendEaseeGatewayRequest(array $request) { - $gatewayID = $this->GetConfiguredEaseeGatewayID(); - if ($gatewayID <= 0) { + $instance = IPS_GetInstance($this->InstanceID); + $parentID = (int)$instance["ConnectionID"]; + if (!$this->IsEaseeGatewayInstance($parentID)) { $this->SetValue("Easee_Gateway_Connected", false); return null; } - try { - $response = EASEEGW_ProcessStationRequest( - $gatewayID, - json_encode($request) - ); - } catch (Throwable $error) { - $this->SetValue("Easee_Gateway_Connected", false); - IPS_LogMessage("Ladestation_v2", $error->getMessage()); - return null; - } + $response = $this->SendDataToParent(json_encode([ + "DataID" => self::EASEE_GATEWAY_REQUEST_ID, + "Buffer" => json_encode($request), + ])); if (!is_string($response) || $response === "") { return null; @@ -398,6 +355,16 @@ class Ladestation_v2 extends IPSModule return $gatewayID; } + private function IsEaseeGatewayInstance(int $instanceID): bool + { + if ($instanceID <= 0 || !IPS_InstanceExists($instanceID)) { + return false; + } + + $instance = IPS_GetInstance($instanceID); + return $instance["ModuleInfo"]["ModuleID"] === self::EASEE_GATEWAY_MODULE_ID; + } + private function UsesEaseeGateway(int $stationType): bool { return $stationType === 5 || $stationType === 6;