diff --git a/Ladestation_v2/README.md b/Ladestation_v2/README.md index f7a428d..69ef14d 100644 --- a/Ladestation_v2/README.md +++ b/Ladestation_v2/README.md @@ -2,6 +2,9 @@ Das Modul steuert verschiedene Ladestationstypen. +Das Konfigurationsformular zeigt die Verbindungsdaten abhängig vom gewählten +Ladestationstyp an. Allgemeine Regel- und Zeitparameter bleiben immer sichtbar. + ## Easee Die Ladestationstypen 5 und 6 verwenden das oben als Schnittstelle ausgewählte diff --git a/Ladestation_v2/form.json b/Ladestation_v2/form.json index 270d6a3..4722992 100644 --- a/Ladestation_v2/form.json +++ b/Ladestation_v2/form.json @@ -3,7 +3,8 @@ { "type": "Select", "name": "Ladestation", - "caption": "Ladestation", + "caption": "Ladestationstyp", + "onChange": "IPS_RequestAction($id, \"UpdateStationForm\", $Ladestation);", "options": [ { "caption": "Go-E Wallbox (Alte Version)", @@ -34,13 +35,13 @@ { "type": "NumberSpinner", "name": "IdleCounterMax", - "caption": "Zyklen zwischen zwei Leistungsänderungen (multipliziert mit Intervall)", - "suffix": "" + "caption": "Wartezyklen nach einer Leistungsänderung", + "suffix": "Zyklen" }, { "type": "NumberSpinner", "name": "Interval", - "caption": "Intervall Neuberechnung der Werte", + "caption": "Berechnungsintervall", "suffix": "Sekunden" }, { @@ -52,55 +53,63 @@ { "type": "NumberSpinner", "name": "Zeit_Zwischen_Zustandswechseln", - "caption": "(Veraltet, auf 0 lassen) Mindestlaufzeit des Verbrauchers bei Lastschaltung", - "suffix": "" + "caption": "Mindestzeit zwischen Leistungsänderungen", + "suffix": "Minuten" }, { "type": "NumberSpinner", "name": "Ein_Zeit", - "caption": "Mindestlaufzeit Ladestation wenn Ein", - "suffix": "" + "caption": "Mindestlaufzeit nach dem Einschalten", + "suffix": "Minuten" }, { "type": "NumberSpinner", "name": "Aus_Zeit", - "caption": "Mindestlaufzeit Ladestation wenn Aus", - "suffix": "" + "caption": "Mindeststillstandszeit nach dem Ausschalten", + "suffix": "Minuten" }, { "type": "ValidationTextBox", "name": "IP_Adresse", - "caption": "IP-Adresse Ladestation" + "caption": "IP-Adresse", + "visible": false }, { "type": "ValidationTextBox", "name": "ID", - "caption": "Geräte-ID Smart-Me / eCarUp / Easee" + "caption": "Geräte-ID", + "visible": false }, { "type": "ValidationTextBox", "name": "Seriennummer", - "caption": "Seriennummer Smart-Me / eCarUp / Easee" + "caption": "Seriennummer", + "visible": false }, { "type": "ValidationTextBox", "name": "Username", - "caption": "Benutzername Smart-Me / Benutzerkennung Solarladen" + "caption": "Benutzername", + "visible": false }, { "type": "PasswordTextBox", "name": "Password", - "caption": "Passwort Smart-Me" + "caption": "Passwort", + "visible": false }, { "type": "SelectVariable", "name": "Token_ECarUp", - "caption": "Variable API-Token für eCarUp", - "suffix": "" + "caption": "Variable mit eCarUp API-Token", + "suffix": "", + "visible": false }, { "type": "Label", - "caption": "Das Easee SignalR Gateway wird oben über Schnittstelle konfigurieren/ändern ausgewählt. Die Typen 5 und 6 verwenden diese Schnittstelle." + "name": "EaseeGatewayHint", + "caption": "Das Easee SignalR Gateway wird oben über Schnittstelle konfigurieren/ändern ausgewählt.", + "visible": false } ] } diff --git a/Ladestation_v2/module.php b/Ladestation_v2/module.php index 9444ecb..3490bec 100644 --- a/Ladestation_v2/module.php +++ b/Ladestation_v2/module.php @@ -152,6 +152,132 @@ class Ladestation_v2 extends IPSModule return json_encode($data); } + public function GetConfigurationForm() + { + $form = json_decode(file_get_contents(__DIR__ . "/form.json"), true); + $fieldConfiguration = $this->GetStationFormConfiguration( + $this->ReadPropertyInteger("Ladestation") + ); + + foreach ($form["elements"] as &$element) { + $name = (string)($element["name"] ?? ""); + if (!isset($fieldConfiguration[$name])) { + continue; + } + + foreach ($fieldConfiguration[$name] as $parameter => $value) { + $element[$parameter] = $value; + } + } + unset($element); + + return json_encode($form); + } + + private function GetStationFormConfiguration(int $stationType): array + { + $configuration = [ + "IP_Adresse" => [ + "visible" => false, + "caption" => "IP-Adresse", + ], + "ID" => [ + "visible" => false, + "caption" => "Geräte-ID", + ], + "Seriennummer" => [ + "visible" => false, + "caption" => "Seriennummer", + ], + "Username" => [ + "visible" => false, + "caption" => "Benutzername", + ], + "Password" => [ + "visible" => false, + "caption" => "Passwort", + ], + "Token_ECarUp" => [ + "visible" => false, + "caption" => "Variable mit eCarUp API-Token", + ], + "EaseeGatewayHint" => [ + "visible" => false, + ], + ]; + + switch ($stationType) { + case 1: + $configuration["IP_Adresse"] = [ + "visible" => true, + "caption" => "IP-Adresse der Go-E Wallbox", + ]; + break; + + case 2: + $configuration["IP_Adresse"] = [ + "visible" => true, + "caption" => "IP-Adresse der Go-E Gemini / Gemini Flex", + ]; + break; + + case 3: + $configuration["ID"] = [ + "visible" => true, + "caption" => "Smart-Me Geräte-ID", + ]; + $configuration["Seriennummer"] = [ + "visible" => true, + "caption" => "Smart-Me Seriennummer", + ]; + $configuration["Username"] = [ + "visible" => true, + "caption" => "Smart-Me Benutzername", + ]; + $configuration["Password"] = [ + "visible" => true, + "caption" => "Smart-Me Passwort", + ]; + break; + + case 5: + $configuration["ID"] = [ + "visible" => true, + "caption" => "eCarUp Stations-/Connector-ID", + ]; + $configuration["Seriennummer"] = [ + "visible" => true, + "caption" => "Easee Seriennummer", + ]; + $configuration["Username"] = [ + "visible" => true, + "caption" => "eCarUp Benutzerkennung für Solarladen", + ]; + $configuration["Token_ECarUp"]["visible"] = true; + $configuration["EaseeGatewayHint"]["visible"] = true; + break; + + case 6: + $configuration["Seriennummer"] = [ + "visible" => true, + "caption" => "Easee Seriennummer", + ]; + $configuration["EaseeGatewayHint"]["visible"] = true; + break; + } + + return $configuration; + } + + private function UpdateStationForm(int $stationType) + { + foreach ($this->GetStationFormConfiguration($stationType) as $field => $parameters) { + foreach ($parameters as $parameter => $value) { + $this->UpdateFormField($field, $parameter, $value); + } + } + } + public function ApplyChanges() { parent::ApplyChanges(); @@ -199,6 +325,10 @@ class Ladestation_v2 extends IPSModule { switch ($Ident) { + case "UpdateStationForm": + $this->UpdateStationForm((int)$Value); + break; + case "SetAktuelle_Leistung": $this->SetValue("Power", (int)$Value); break;