no message
This commit is contained in:
@@ -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
@@ -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) {
|
||||
|
||||
@@ -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.
|
||||
|
||||
@@ -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."
|
||||
|
||||
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user