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 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.
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);' 'IPS_RequestAction(' . $this->InstanceID . ', "RefreshToken", 0);'
); );
$this->RequireParent(self::WEBSOCKET_MODULE_ID);
} }
public function ApplyChanges() public function ApplyChanges()
@@ -68,6 +67,11 @@ class EaseeGateway extends IPSModule
return; return;
} }
if (!$this->EnsureWebSocketParent()) {
$this->SetStatus(203);
return;
}
$this->SetTimerInterval("MaintainConnectionTimer", 10000); $this->SetTimerInterval("MaintainConnectionTimer", 10000);
$this->SetTimerInterval("TokenRefreshTimer", 1800000); $this->SetTimerInterval("TokenRefreshTimer", 1800000);
@@ -79,6 +83,39 @@ class EaseeGateway extends IPSModule
$this->ConnectSignalR(); $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) public function RequestAction($Ident, $Value)
{ {
switch ($Ident) { 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. 1. Eine Instanz `Easee SignalR Gateway` anlegen.
2. Easee-Benutzername und Passwort im Gateway eintragen. 2. Easee-Benutzername und Passwort im Gateway eintragen.
3. In `Ladestation_v2` Typ 5 oder 6 sowie die Easee-Seriennummer wählen. 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. Mehrere Easee-Ladestationen desselben Kontos verwenden gemeinsam ein Gateway.
+8
View File
@@ -98,6 +98,14 @@
"caption": "Variable API-Token für eCarUp", "caption": "Variable API-Token für eCarUp",
"suffix": "" "suffix": ""
}, },
{
"type": "SelectInstance",
"name": "EaseeGatewayID",
"caption": "Easee SignalR Gateway",
"validModules": [
"{7A1F1D4B-3E7D-4A3B-9E54-61C8C3B7F201}"
]
},
{ {
"type": "Label", "type": "Label",
"caption": "Die Typen 5 und 6 verwenden das verbundene Easee SignalR Gateway. Easee-Zugangsdaten werden im Gateway konfiguriert." "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("Ein_Zeit", 0); // Recheninterval
$this->RegisterPropertyInteger("Aus_Zeit", 0); // Recheninterval $this->RegisterPropertyInteger("Aus_Zeit", 0); // Recheninterval
$this->RegisterPropertyInteger("Token_ECarUp", 0); // Recheninterval $this->RegisterPropertyInteger("Token_ECarUp", 0); // Recheninterval
$this->RegisterPropertyInteger("EaseeGatewayID", 0);
// Ladestationspezifische Variabeln // Ladestationspezifische Variabeln
@@ -129,10 +130,37 @@ class Ladestation_v2 extends IPSModule
$parentID = (int)$instance["ConnectionID"]; $parentID = (int)$instance["ConnectionID"];
if ($usesEaseeGateway) { if ($usesEaseeGateway) {
if ($parentID <= 0) { $gatewayID = $this->ReadPropertyInteger("EaseeGatewayID");
$this->ConnectParent(self::EASEE_GATEWAY_MODULE_ID);
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) { } elseif ($parentID > 0) {
$parent = IPS_GetInstance($parentID); $parent = IPS_GetInstance($parentID);
if ($parent["ModuleInfo"]["ModuleID"] === self::EASEE_GATEWAY_MODULE_ID) { if ($parent["ModuleInfo"]["ModuleID"] === self::EASEE_GATEWAY_MODULE_ID) {