no message

This commit is contained in:
dh
2026-08-06 10:42:23 +02:00
parent d8d3e2c998
commit d37fa96a31
2 changed files with 4 additions and 55 deletions
+3 -4
View File
@@ -11,10 +11,9 @@ Easee-Konto wird eine weitere Gateway-Instanz benötigt.
Stromvorgaben werden von den Ladestationsinstanzen an das Gateway übergeben und Stromvorgaben werden von den Ladestationsinstanzen an das Gateway übergeben und
von dort über die Easee-REST-API gesendet. von dort über die Easee-REST-API gesendet.
Bei 0 A setzt das Gateway das dynamische Stromlimit auf 0. Beim anschließenden Bei 0 A setzt das Gateway das dynamische Stromlimit auf 0. Positive Werte werden
Wechsel auf einen positiven Strom wird die Sitzung zuerst fortgesetzt und danach direkt als neues dynamisches Stromlimit gesendet. Positive Vorgaben unter 6 A
das neue dynamische Stromlimit gesetzt. Positive Vorgaben unter 6 A werden auf werden auf den technischen Mindestladestrom von 6 A angehoben.
den technischen Mindestladestrom von 6 A angehoben.
Der benötigte WebSocket-Client wird nach dem Speichern der Easee-Zugangsdaten Der benötigte WebSocket-Client wird nach dem Speichern der Easee-Zugangsdaten
automatisch erstellt und konfiguriert. Im WebSocket-Client muss keine URL automatisch erstellt und konfiguriert. Im WebSocket-Client muss keine URL
+1 -51
View File
@@ -50,7 +50,6 @@ class EaseeGateway extends IPSModule
$this->SetBuffer("Subscriptions", "{}"); $this->SetBuffer("Subscriptions", "{}");
$this->SetBuffer("SubscribedThisConnection", "{}"); $this->SetBuffer("SubscribedThisConnection", "{}");
$this->SetBuffer("PendingInvocations", "{}"); $this->SetBuffer("PendingInvocations", "{}");
$this->SetBuffer("LastCommandedCurrents", "{}");
$this->SetValue("SubscriptionCount", 0); $this->SetValue("SubscriptionCount", 0);
$this->SetConnected(false); $this->SetConnected(false);
@@ -553,11 +552,6 @@ class EaseeGateway extends IPSModule
return ["success" => false, "error" => "Strom muss zwischen 0 und 32 A liegen"]; return ["success" => false, "error" => "Strom muss zwischen 0 und 32 A liegen"];
} }
$lastCurrents = $this->ReadBufferArray("LastCommandedCurrents");
$previousAmps = isset($lastCurrents[$serialNumber])
? (float)$lastCurrents[$serialNumber]
: null;
$requestedAmps = $amps; $requestedAmps = $amps;
if ($amps > 0 && $amps < 6) { if ($amps > 0 && $amps < 6) {
$amps = 6; $amps = 6;
@@ -569,60 +563,16 @@ class EaseeGateway extends IPSModule
"serialNumber" => $serialNumber, "serialNumber" => $serialNumber,
"requestedAmps" => $requestedAmps, "requestedAmps" => $requestedAmps,
"effectiveAmps" => $amps, "effectiveAmps" => $amps,
"previousAmps" => $previousAmps,
]), ]),
0 0
); );
if ($amps <= 0) { return $this->AuthorizedApiRequest(
// Den angeforderten Zustand sofort merken. Damit wird beim nächsten
// positiven Sollwert immer ein Resume ausgelöst, auch wenn die
// HTTP-Antwort des 0-A-Befehls verloren geht.
$lastCurrents[$serialNumber] = 0;
$this->SetBuffer("LastCommandedCurrents", json_encode($lastCurrents));
$result = $this->AuthorizedApiRequest(
"POST",
"/api/chargers/" . rawurlencode($serialNumber) .
"/commands/set_dynamic_charger_current",
json_encode(["amps" => 0, "minutes" => 0])
);
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", "POST",
"/api/chargers/" . rawurlencode($serialNumber) . "/api/chargers/" . rawurlencode($serialNumber) .
"/commands/set_dynamic_charger_current", "/commands/set_dynamic_charger_current",
json_encode(["amps" => $amps, "minutes" => 0]) 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 private function AuthorizedApiRequest(string $method, string $path, string $body): array