no message
This commit is contained in:
@@ -16,12 +16,6 @@ Jeder Aufruf der Ladestationsinstanz wird sofort als
|
|||||||
Version wird dabei `minutes: 0` gesendet. Das Gateway puffert, begrenzt oder
|
Version wird dabei `minutes: 0` gesendet. Das Gateway puffert, begrenzt oder
|
||||||
wiederholt die Stromvorgabe nicht selbst.
|
wiederholt die Stromvorgabe nicht selbst.
|
||||||
|
|
||||||
Im Debug der Ladestations- und Gateway-Instanz werden der vollständige
|
|
||||||
Strombefehl, URL und Payload sowie HTTP-Status und Easee-Antwort ausgegeben.
|
|
||||||
Zusätzlich werden die Observations 48, 96, 111 bis 114 protokolliert. Damit ist
|
|
||||||
erkennbar, ob der Sollwert übernommen wurde und welches weitere Limit das Laden
|
|
||||||
verhindert.
|
|
||||||
|
|
||||||
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
|
||||||
eingetragen werden.
|
eingetragen werden.
|
||||||
|
|||||||
+2
-53
@@ -499,7 +499,7 @@ class EaseeGateway extends IPSModule
|
|||||||
if (
|
if (
|
||||||
$serialNumber !== "" &&
|
$serialNumber !== "" &&
|
||||||
$valueExists &&
|
$valueExists &&
|
||||||
in_array($observationID, [48, 96, 109, 111, 112, 113, 114, 120], true)
|
($observationID === 109 || $observationID === 120)
|
||||||
) {
|
) {
|
||||||
$this->PublishObservation($serialNumber, $observationID, $value);
|
$this->PublishObservation($serialNumber, $observationID, $value);
|
||||||
}
|
}
|
||||||
@@ -513,17 +513,6 @@ class EaseeGateway extends IPSModule
|
|||||||
|
|
||||||
private function PublishObservation(string $serialNumber, int $observationID, $value)
|
private function PublishObservation(string $serialNumber, int $observationID, $value)
|
||||||
{
|
{
|
||||||
$names = [
|
|
||||||
48 => "DynamicChargerCurrent",
|
|
||||||
96 => "ReasonForNoCurrent",
|
|
||||||
109 => "ChargerOpMode",
|
|
||||||
111 => "DynamicCircuitCurrentP1",
|
|
||||||
112 => "DynamicCircuitCurrentP2",
|
|
||||||
113 => "DynamicCircuitCurrentP3",
|
|
||||||
114 => "OutputCurrent",
|
|
||||||
120 => "TotalPower",
|
|
||||||
];
|
|
||||||
|
|
||||||
$cache = $this->ReadAttributeArray("ObservationCache");
|
$cache = $this->ReadAttributeArray("ObservationCache");
|
||||||
if (!isset($cache[$serialNumber]) || !is_array($cache[$serialNumber])) {
|
if (!isset($cache[$serialNumber]) || !is_array($cache[$serialNumber])) {
|
||||||
$cache[$serialNumber] = [];
|
$cache[$serialNumber] = [];
|
||||||
@@ -532,17 +521,6 @@ class EaseeGateway extends IPSModule
|
|||||||
$cache[$serialNumber]["updated"] = time();
|
$cache[$serialNumber]["updated"] = time();
|
||||||
$this->WriteAttributeString("ObservationCache", json_encode($cache));
|
$this->WriteAttributeString("ObservationCache", json_encode($cache));
|
||||||
|
|
||||||
$this->SendDebug(
|
|
||||||
"Easee Observation RX",
|
|
||||||
json_encode([
|
|
||||||
"serialNumber" => $serialNumber,
|
|
||||||
"id" => $observationID,
|
|
||||||
"name" => $names[$observationID] ?? "Unknown",
|
|
||||||
"value" => $value,
|
|
||||||
]),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
$this->SendDataToChildren(json_encode([
|
$this->SendDataToChildren(json_encode([
|
||||||
"DataID" => self::CHILD_EVENT_DATA_ID,
|
"DataID" => self::CHILD_EVENT_DATA_ID,
|
||||||
"Buffer" => json_encode([
|
"Buffer" => json_encode([
|
||||||
@@ -578,37 +556,11 @@ class EaseeGateway extends IPSModule
|
|||||||
"/commands/set_dynamic_charger_current";
|
"/commands/set_dynamic_charger_current";
|
||||||
$body = '{"amps":' . $amps . ',"minutes":0}';
|
$body = '{"amps":' . $amps . ',"minutes":0}';
|
||||||
|
|
||||||
$this->SendDebug(
|
return $this->AuthorizedApiRequest(
|
||||||
"Easee Command TX",
|
|
||||||
json_encode([
|
|
||||||
"method" => "POST",
|
|
||||||
"url" => self::API_BASE_URL . $path,
|
|
||||||
"contentType" => "application/*+json",
|
|
||||||
"body" => $body,
|
|
||||||
]),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
$result = $this->AuthorizedApiRequest(
|
|
||||||
"POST",
|
"POST",
|
||||||
$path,
|
$path,
|
||||||
$body
|
$body
|
||||||
);
|
);
|
||||||
|
|
||||||
$this->SendDebug(
|
|
||||||
"Easee Command RX",
|
|
||||||
json_encode([
|
|
||||||
"serialNumber" => $serialNumber,
|
|
||||||
"requestedAmps" => $amps,
|
|
||||||
"success" => (bool)($result["success"] ?? false),
|
|
||||||
"httpCode" => (int)($result["httpCode"] ?? 0),
|
|
||||||
"responseBody" => (string)($result["body"] ?? ""),
|
|
||||||
"error" => (string)($result["error"] ?? ""),
|
|
||||||
]),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
return $result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function AuthorizedApiRequest(string $method, string $path, string $body): array
|
private function AuthorizedApiRequest(string $method, string $path, string $body): array
|
||||||
@@ -782,9 +734,6 @@ class EaseeGateway extends IPSModule
|
|||||||
private function SetLastError(string $message)
|
private function SetLastError(string $message)
|
||||||
{
|
{
|
||||||
$this->SetValue("LastError", $message);
|
$this->SetValue("LastError", $message);
|
||||||
if ($message !== "") {
|
|
||||||
$this->SendDebug("EaseeGateway", $message, 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private function IsSubscribedSerial(string $candidate): bool
|
private function IsSubscribedSerial(string $candidate): bool
|
||||||
|
|||||||
@@ -505,7 +505,7 @@ class Ladestation_v2 extends IPSModule
|
|||||||
}
|
}
|
||||||
|
|
||||||
$updated = (int)($response["state"]["updated"] ?? time());
|
$updated = (int)($response["state"]["updated"] ?? time());
|
||||||
foreach ([48, 96, 109, 111, 112, 113, 114, 120] as $observationID) {
|
foreach ([109, 120] as $observationID) {
|
||||||
$key = (string)$observationID;
|
$key = (string)$observationID;
|
||||||
if (array_key_exists($key, $response["state"])) {
|
if (array_key_exists($key, $response["state"])) {
|
||||||
$this->StoreEaseeObservation(
|
$this->StoreEaseeObservation(
|
||||||
@@ -519,17 +519,7 @@ class Ladestation_v2 extends IPSModule
|
|||||||
|
|
||||||
private function StoreEaseeObservation(int $observationID, $value, int $timestamp)
|
private function StoreEaseeObservation(int $observationID, $value, int $timestamp)
|
||||||
{
|
{
|
||||||
$names = [
|
if ($observationID !== 109 && $observationID !== 120) {
|
||||||
48 => "DynamicChargerCurrent",
|
|
||||||
96 => "ReasonForNoCurrent",
|
|
||||||
109 => "ChargerOpMode",
|
|
||||||
111 => "DynamicCircuitCurrentP1",
|
|
||||||
112 => "DynamicCircuitCurrentP2",
|
|
||||||
113 => "DynamicCircuitCurrentP3",
|
|
||||||
114 => "OutputCurrent",
|
|
||||||
120 => "TotalPower",
|
|
||||||
];
|
|
||||||
if (!isset($names[$observationID])) {
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -541,17 +531,6 @@ class Ladestation_v2 extends IPSModule
|
|||||||
$state["updated"] = $timestamp;
|
$state["updated"] = $timestamp;
|
||||||
$this->SetBuffer("EaseeGatewayState", json_encode($state));
|
$this->SetBuffer("EaseeGatewayState", json_encode($state));
|
||||||
|
|
||||||
$this->SendDebug(
|
|
||||||
"Easee Observation",
|
|
||||||
json_encode([
|
|
||||||
"id" => $observationID,
|
|
||||||
"name" => $names[$observationID],
|
|
||||||
"value" => $value,
|
|
||||||
"timestamp" => $timestamp,
|
|
||||||
]),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
if ($observationID === 109) {
|
if ($observationID === 109) {
|
||||||
$this->SetValue("Fahrzeugstatus", (int)$value);
|
$this->SetValue("Fahrzeugstatus", (int)$value);
|
||||||
} elseif ($observationID === 120) {
|
} elseif ($observationID === 120) {
|
||||||
@@ -591,31 +570,16 @@ class Ladestation_v2 extends IPSModule
|
|||||||
|
|
||||||
private function SendEaseeCurrentToGateway(float $value)
|
private function SendEaseeCurrentToGateway(float $value)
|
||||||
{
|
{
|
||||||
$request = [
|
$response = $this->SendEaseeGatewayRequest([
|
||||||
"action" => "SetDynamicChargerCurrent",
|
"action" => "SetDynamicChargerCurrent",
|
||||||
"serialNumber" => strtoupper(trim($this->ReadPropertyString("Seriennummer"))),
|
"serialNumber" => strtoupper(trim($this->ReadPropertyString("Seriennummer"))),
|
||||||
"amps" => $value,
|
"amps" => $value,
|
||||||
];
|
]);
|
||||||
|
|
||||||
$this->SendDebug(
|
|
||||||
"Easee Station TX",
|
|
||||||
json_encode($request),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
$response = $this->SendEaseeGatewayRequest($request);
|
|
||||||
|
|
||||||
$this->SendDebug(
|
|
||||||
"Easee Station RX",
|
|
||||||
json_encode($response),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
if (!is_array($response) || !($response["success"] ?? false)) {
|
if (!is_array($response) || !($response["success"] ?? false)) {
|
||||||
$error = is_array($response)
|
$error = is_array($response)
|
||||||
? (string)($response["error"] ?? "Unbekannter Gateway-Fehler")
|
? (string)($response["error"] ?? "Unbekannter Gateway-Fehler")
|
||||||
: "Easee Gateway nicht erreichbar";
|
: "Easee Gateway nicht erreichbar";
|
||||||
IPS_LogMessage("Ladestation_v2", $error);
|
|
||||||
return $error;
|
return $error;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1125,45 +1089,10 @@ class Ladestation_v2 extends IPSModule
|
|||||||
$stationType = $this->ReadPropertyInteger("Ladestation");
|
$stationType = $this->ReadPropertyInteger("Ladestation");
|
||||||
|
|
||||||
if ($stationType === 5 || $stationType === 6) {
|
if ($stationType === 5 || $stationType === 6) {
|
||||||
$lastValue = $this->GetBuffer("LastEaseeRequestedAmps");
|
|
||||||
$transition = "unchanged";
|
|
||||||
if ($lastValue === "") {
|
|
||||||
$transition = "initial";
|
|
||||||
} elseif ((float)$lastValue <= 0 && $value > 0) {
|
|
||||||
$transition = "zero_to_positive";
|
|
||||||
} elseif ((float)$lastValue > 0 && $value <= 0) {
|
|
||||||
$transition = "positive_to_zero";
|
|
||||||
} elseif (abs((float)$lastValue - $value) > 0.01) {
|
|
||||||
$transition = "changed";
|
|
||||||
}
|
|
||||||
$this->SetBuffer("LastEaseeRequestedAmps", (string)$value);
|
|
||||||
|
|
||||||
$this->SendDebug(
|
|
||||||
"Easee Current Decision",
|
|
||||||
json_encode([
|
|
||||||
"stationType" => $stationType,
|
|
||||||
"serialNumber" => strtoupper(trim($this->ReadPropertyString("Seriennummer"))),
|
|
||||||
"previousAmps" => $lastValue === "" ? null : (float)$lastValue,
|
|
||||||
"requestedAmps" => $value,
|
|
||||||
"transition" => $transition,
|
|
||||||
"powerWatts" => $this->GetValue("Aktuelle_Leistung"),
|
|
||||||
"isSinglePhase" => $this->GetValue("Is_1_ph"),
|
|
||||||
"chargerReady" => $this->GetValue("Ladebereit"),
|
|
||||||
"carDetected" => $this->GetValue("Car_detected"),
|
|
||||||
"chargerOpMode" => $this->GetValue("Fahrzeugstatus"),
|
|
||||||
]),
|
|
||||||
0
|
|
||||||
);
|
|
||||||
|
|
||||||
if (
|
if (
|
||||||
$stationType === 5 &&
|
$stationType === 5 &&
|
||||||
$this->ReadPropertyString("Username") != $this->GetValue("Letzer_User")
|
$this->ReadPropertyString("Username") != $this->GetValue("Letzer_User")
|
||||||
) {
|
) {
|
||||||
$this->SendDebug(
|
|
||||||
"Easee Current Blocked",
|
|
||||||
"Benutzerkennung stimmt nicht mit Letzer_User überein",
|
|
||||||
0
|
|
||||||
);
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
return $this->SendEaseeCurrentToGateway($value);
|
return $this->SendEaseeCurrentToGateway($value);
|
||||||
@@ -1185,8 +1114,6 @@ class Ladestation_v2 extends IPSModule
|
|||||||
}
|
}
|
||||||
|
|
||||||
$ch = curl_init();
|
$ch = curl_init();
|
||||||
IPS_LogMessage("value", "nach konvertierung" . $value);
|
|
||||||
|
|
||||||
if ($value == 0) {
|
if ($value == 0) {
|
||||||
switch ($stationType) {
|
switch ($stationType) {
|
||||||
case 1:
|
case 1:
|
||||||
|
|||||||
Reference in New Issue
Block a user