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
|
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
@@ -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) {
|
||||||
|
|||||||
@@ -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.
|
||||||
|
|||||||
@@ -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."
|
||||||
|
|||||||
@@ -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();
|
$this->SubscribeToEaseeGateway();
|
||||||
|
} else {
|
||||||
|
$this->SetValue("Easee_Gateway_Connected", false);
|
||||||
|
}
|
||||||
} 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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user