From 43623376e48bbb128a1ad70b56147ef5c1bb0f4f Mon Sep 17 00:00:00 2001 From: DanielHaefliger Date: Thu, 6 Aug 2026 10:18:42 +0200 Subject: [PATCH] no message --- EaseeGateway/README.md | 4 ++++ EaseeGateway/module.php | 50 ++++++++++++++++++++++++++++++++++++++++- 2 files changed, 53 insertions(+), 1 deletion(-) diff --git a/EaseeGateway/README.md b/EaseeGateway/README.md index d7151cc..34007f7 100644 --- a/EaseeGateway/README.md +++ b/EaseeGateway/README.md @@ -11,6 +11,10 @@ Easee-Konto wird eine weitere Gateway-Instanz benötigt. Stromvorgaben werden von den Ladestationsinstanzen an das Gateway übergeben und von dort über die Easee-REST-API gesendet. +Bei 0 A pausiert das Gateway die aktuelle Ladesitzung. Beim anschließenden +Wechsel auf einen positiven Strom wird die Sitzung zuerst fortgesetzt und danach +das neue dynamische Stromlimit gesetzt. + Der benötigte WebSocket-Client wird nach dem Speichern der Easee-Zugangsdaten automatisch erstellt und konfiguriert. Im WebSocket-Client muss keine URL eingetragen werden. diff --git a/EaseeGateway/module.php b/EaseeGateway/module.php index c34ef20..c1bdd16 100644 --- a/EaseeGateway/module.php +++ b/EaseeGateway/module.php @@ -50,6 +50,7 @@ class EaseeGateway extends IPSModule $this->SetBuffer("Subscriptions", "{}"); $this->SetBuffer("SubscribedThisConnection", "{}"); $this->SetBuffer("PendingInvocations", "{}"); + $this->SetBuffer("LastCommandedCurrents", "{}"); $this->SetValue("SubscriptionCount", 0); $this->SetConnected(false); @@ -551,12 +552,59 @@ class EaseeGateway extends IPSModule return ["success" => false, "error" => "Strom muss zwischen 0 und 32 A liegen"]; } - return $this->AuthorizedApiRequest( + $lastCurrents = $this->ReadBufferArray("LastCommandedCurrents"); + $previousAmps = isset($lastCurrents[$serialNumber]) + ? (float)$lastCurrents[$serialNumber] + : null; + + if ($amps <= 0) { + $result = $this->AuthorizedApiRequest( + "POST", + "/api/chargers/" . rawurlencode($serialNumber) . + "/commands/pause_charging", + "" + ); + + if ($result["success"] ?? false) { + $lastCurrents[$serialNumber] = 0; + $this->SetBuffer("LastCommandedCurrents", json_encode($lastCurrents)); + } + + return $result; + } + + // Easee behandelt 0 A als pausierte Sitzung. Beim ersten positiven + // Sollwert nach 0 A muss die Sitzung vor dem Setzen des Stromlimits + // explizit fortgesetzt werden. Resume setzt das dynamische Limit zurueck. + if ($previousAmps === null || $previousAmps <= 0) { + $resumeResult = $this->AuthorizedApiRequest( + "POST", + "/api/chargers/" . rawurlencode($serialNumber) . + "/commands/resume_charging", + "" + ); + + if (!($resumeResult["success"] ?? false)) { + $resumeResult["error"] = + "Ladevorgang konnte nicht fortgesetzt werden: " . + (string)($resumeResult["error"] ?? "Unbekannter Fehler"); + return $resumeResult; + } + } + + $result = $this->AuthorizedApiRequest( "POST", "/api/chargers/" . rawurlencode($serialNumber) . "/commands/set_dynamic_charger_current", json_encode(["amps" => $amps, "minutes" => 0]) ); + + if ($result["success"] ?? false) { + $lastCurrents[$serialNumber] = $amps; + $this->SetBuffer("LastCommandedCurrents", json_encode($lastCurrents)); + } + + return $result; } private function AuthorizedApiRequest(string $method, string $path, string $body): array