no message

This commit is contained in:
dh
2026-08-06 08:35:38 +02:00
parent 650ea80e2b
commit 9200e2bc51
5 changed files with 82 additions and 5 deletions
+4
View File
@@ -10,3 +10,7 @@ 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.
Der benötigte WebSocket-Client wird nach dem Speichern der Easee-Zugangsdaten
automatisch erstellt und konfiguriert. Im WebSocket-Client muss keine URL
eingetragen werden.
+38 -1
View File
@@ -37,7 +37,6 @@ class EaseeGateway extends IPSModule
'IPS_RequestAction(' . $this->InstanceID . ', "RefreshToken", 0);'
);
$this->RequireParent(self::WEBSOCKET_MODULE_ID);
}
public function ApplyChanges()
@@ -68,6 +67,11 @@ class EaseeGateway extends IPSModule
return;
}
if (!$this->EnsureWebSocketParent()) {
$this->SetStatus(203);
return;
}
$this->SetTimerInterval("MaintainConnectionTimer", 10000);
$this->SetTimerInterval("TokenRefreshTimer", 1800000);
@@ -79,6 +83,39 @@ class EaseeGateway extends IPSModule
$this->ConnectSignalR();
}
private function EnsureWebSocketParent(): bool
{
$instance = IPS_GetInstance($this->InstanceID);
$parentID = (int)$instance["ConnectionID"];
if ($parentID > 0) {
$parent = IPS_GetInstance($parentID);
if ($parent["ModuleInfo"]["ModuleID"] === self::WEBSOCKET_MODULE_ID) {
return true;
}
IPS_DisconnectInstance($this->InstanceID);
}
$parentID = IPS_CreateInstance(self::WEBSOCKET_MODULE_ID);
if ($parentID <= 0) {
$this->SetLastError("WebSocket-Client konnte nicht erstellt werden");
return false;
}
IPS_SetName($parentID, "Easee SignalR WebSocket");
$objectParentID = IPS_GetParent($this->InstanceID);
if ($objectParentID > 0) {
IPS_SetParent($parentID, $objectParentID);
}
if (!IPS_ConnectInstance($this->InstanceID, $parentID)) {
$this->SetLastError("WebSocket-Client konnte nicht verbunden werden");
return false;
}
return true;
}
public function RequestAction($Ident, $Value)
{
switch ($Ident) {
+1 -1
View File
@@ -29,6 +29,6 @@ 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. Die Ladestationsinstanz mit dem gewünschten Gateway verbinden.
4. Im Feld `Easee SignalR Gateway` die gewünschte Gateway-Instanz auswählen.
Mehrere Easee-Ladestationen desselben Kontos verwenden gemeinsam ein Gateway.
+8
View File
@@ -98,6 +98,14 @@
"caption": "Variable API-Token für eCarUp",
"suffix": ""
},
{
"type": "SelectInstance",
"name": "EaseeGatewayID",
"caption": "Easee SignalR Gateway",
"validModules": [
"{7A1F1D4B-3E7D-4A3B-9E54-61C8C3B7F201}"
]
},
{
"type": "Label",
"caption": "Die Typen 5 und 6 verwenden das verbundene Easee SignalR Gateway. Easee-Zugangsdaten werden im Gateway konfiguriert."
+31 -3
View File
@@ -24,6 +24,7 @@ class Ladestation_v2 extends IPSModule
$this->RegisterPropertyInteger("Ein_Zeit", 0); // Recheninterval
$this->RegisterPropertyInteger("Aus_Zeit", 0); // Recheninterval
$this->RegisterPropertyInteger("Token_ECarUp", 0); // Recheninterval
$this->RegisterPropertyInteger("EaseeGatewayID", 0);
// Ladestationspezifische Variabeln
@@ -129,10 +130,37 @@ class Ladestation_v2 extends IPSModule
$parentID = (int)$instance["ConnectionID"];
if ($usesEaseeGateway) {
if ($parentID <= 0) {
$this->ConnectParent(self::EASEE_GATEWAY_MODULE_ID);
$gatewayID = $this->ReadPropertyInteger("EaseeGatewayID");
if ($gatewayID > 0 && IPS_InstanceExists($gatewayID)) {
$gateway = IPS_GetInstance($gatewayID);
if ($gateway["ModuleInfo"]["ModuleID"] !== self::EASEE_GATEWAY_MODULE_ID) {
IPS_LogMessage("Ladestation_v2", "Ausgewählte Instanz ist kein Easee Gateway");
$gatewayID = 0;
}
} else {
$gatewayID = 0;
}
if ($gatewayID > 0 && $parentID !== $gatewayID) {
if ($parentID > 0) {
IPS_DisconnectInstance($this->InstanceID);
}
IPS_ConnectInstance($this->InstanceID, $gatewayID);
$parentID = $gatewayID;
} elseif ($gatewayID === 0 && $parentID > 0) {
$parent = IPS_GetInstance($parentID);
if ($parent["ModuleInfo"]["ModuleID"] === self::EASEE_GATEWAY_MODULE_ID) {
IPS_DisconnectInstance($this->InstanceID);
$parentID = 0;
}
}
if ($parentID > 0) {
$this->SubscribeToEaseeGateway();
} else {
$this->SetValue("Easee_Gateway_Connected", false);
}
$this->SubscribeToEaseeGateway();
} elseif ($parentID > 0) {
$parent = IPS_GetInstance($parentID);
if ($parent["ModuleInfo"]["ModuleID"] === self::EASEE_GATEWAY_MODULE_ID) {