no message

This commit is contained in:
dh
2026-08-06 16:09:06 +02:00
parent c9ca9661cf
commit 9da468f89f
4 changed files with 63 additions and 53 deletions
+6 -2
View File
@@ -31,6 +31,9 @@ und zusätzlich durch `Max_Current_abs` begrenzt. Die Typen 1 bis 4 verwenden
weiterhin unverändert die bisherige zeit- und leistungsbasierte Erkennung. weiterhin unverändert die bisherige zeit- und leistungsbasierte Erkennung.
Die Fahrzeugphasen werden anhand der tatsächlich gemessenen Leiterströme Die Fahrzeugphasen werden anhand der tatsächlich gemessenen Leiterströme
erkannt; alte Phasenwerte werden beim Trennen oder Neuverbinden verworfen. erkannt; alte Phasenwerte werden beim Trennen oder Neuverbinden verworfen.
Während einer Ladepause mit 0 W bleibt die zuletzt erkannte Phasenanzahl
erhalten. Sie ändert sich erst bei einer eindeutigen Strommessung oder beim
Abstecken des Fahrzeugs.
Stromvorgaben von 0 bis 32 A werden ebenfalls über das Gateway gesendet. Stromvorgaben von 0 bis 32 A werden ebenfalls über das Gateway gesendet.
@@ -59,8 +62,9 @@ Ladestrom fließt. Beim Abstecken werden die erkannten Phasen zurückgesetzt.
Typ 4 bleibt unverändert. Typ 4 bleibt unverändert.
Beim Update bestehender Instanzen wird die frühere Eigenschaft `Token_Easee` Beim Update bestehender Instanzen wird die frühere Eigenschaft `Token_Easee`
automatisch entfernt und durch die Gateway-Zuordnung ersetzt. Die vorhandene aus Kompatibilitätsgründen intern beibehalten, aber nicht mehr verwendet oder
Modul- und Instanzidentität bleibt erhalten. im Formular angezeigt. Auch der frühere Token-Timer wird deaktiviert. Die
vorhandene Modul- und Instanzidentität bleibt erhalten.
## Einrichtung ## Einrichtung
+37 -42
View File
@@ -103,6 +103,12 @@ class Ladestation extends IPSModule
IPS_SetHidden($this->GetIDForIdent("Easee_Gateway_Connected"), true); IPS_SetHidden($this->GetIDForIdent("Easee_Gateway_Connected"), true);
$this->SetBuffer("EaseeGatewayState", "{}"); $this->SetBuffer("EaseeGatewayState", "{}");
// Kompatibilität mit bestehenden Instanzen der ursprünglichen Version.
// Der Inhalt wird nicht mehr verwendet; die Easee-Anmeldung übernimmt
// ausschließlich das SignalR-Gateway.
$this->RegisterVariableString("Token_Intern", "Internes Token Easee");
IPS_SetHidden($this->GetIDForIdent("Token_Intern"), true);
// Hilfsvariabeln für Idle zustand // Hilfsvariabeln für Idle zustand
$this->RegisterPropertyInteger("IdleCounterMax", 2); $this->RegisterPropertyInteger("IdleCounterMax", 2);
$this->RegisterVariableInteger("IdleCounter", "IdleCounter", "", 0); $this->RegisterVariableInteger("IdleCounter", "IdleCounter", "", 0);
@@ -113,44 +119,12 @@ class Ladestation extends IPSModule
$this->SetValue("Idle", true); $this->SetValue("Idle", true);
$this->RegisterTimer("Timer_Do_UserCalc_EVC",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");'); $this->RegisterTimer("Timer_Do_UserCalc_EVC",$this->ReadPropertyInteger("Interval")*1000,"IPS_RequestAction(" .$this->InstanceID .', "Do_UserCalc", "");');
$this->RegisterTimer("Timer_Refresh_Token", 0, "IPS_RequestAction(" .$this->InstanceID .', "Refresh_Token", "");');
$this->RegisterVariableInteger("Mindestaldestrom", "Mindestaldestrom", "", 0); $this->RegisterVariableInteger("Mindestaldestrom", "Mindestaldestrom", "", 0);
$this->EnableAction("Mindestaldestrom"); $this->EnableAction("Mindestaldestrom");
} }
public function Migrate($JSONData)
{
parent::Migrate($JSONData);
$data = json_decode($JSONData, true);
if (!is_array($data)) {
return "";
}
if (!isset($data["configuration"]) || !is_array($data["configuration"])) {
$data["configuration"] = [];
}
$changed = false;
// Nur das frühere Ladestation-Modul besaß diese Easee-Eigenschaft.
// Sie muss vor dem Aufbau der neuen V2-kompatiblen Instanz entfernt
// werden, weil die Zugangsdaten jetzt ausschließlich im Gateway liegen.
if (array_key_exists("Token_Easee", $data["configuration"])) {
unset($data["configuration"]["Token_Easee"]);
$changed = true;
}
if (!array_key_exists("EaseeGatewayID", $data["configuration"])) {
// In Migrate keine Instanzfunktionen aufrufen: Die
// Instanzschnittstelle wird zu diesem Zeitpunkt erst aufgebaut.
$data["configuration"]["EaseeGatewayID"] = 0;
$changed = true;
}
return $changed ? json_encode($data) : "";
}
public function GetConfigurationForm() public function GetConfigurationForm()
{ {
$form = json_decode(file_get_contents(__DIR__ . "/form.json"), true); $form = json_decode(file_get_contents(__DIR__ . "/form.json"), true);
@@ -294,6 +268,8 @@ class Ladestation extends IPSModule
false false
); );
$this->SetTimerInterval("Timer_Do_UserCalc_EVC",$this->ReadPropertyInteger("Interval")*1000); $this->SetTimerInterval("Timer_Do_UserCalc_EVC",$this->ReadPropertyInteger("Interval")*1000);
// Einen noch vorhandenen Token-Timer aus Altinstanzen sicher stilllegen.
$this->SetTimerInterval("Timer_Refresh_Token", 0);
$stationType = $this->ReadPropertyInteger("Ladestation"); $stationType = $this->ReadPropertyInteger("Ladestation");
$usesEaseeGateway = $this->UsesEaseeGateway($stationType); $usesEaseeGateway = $this->UsesEaseeGateway($stationType);
IPS_SetHidden( IPS_SetHidden(
@@ -365,6 +341,10 @@ class Ladestation extends IPSModule
$this->ResetNullTimer(); $this->ResetNullTimer();
break; break;
case "Refresh_Token":
$this->Refresh_Token();
break;
case "Mindestaldestrom": case "Mindestaldestrom":
$this->SetValue("Mindestaldestrom", (int)$Value); $this->SetValue("Mindestaldestrom", (int)$Value);
break; break;
@@ -637,10 +617,12 @@ class Ladestation extends IPSModule
{ {
$outputPhase = (int)($state["110"] ?? 0); $outputPhase = (int)($state["110"] ?? 0);
// Ein explizit einphasiger Easee-Ausgang ist auch in IT-Netzen // Bei Ladepause bzw. 0 W die zuletzt erkannte Fahrzeugphase behalten.
// einphasig, obwohl dort Strom auf zwei Leitern gemessen wird. // Die Phasenvariable darf erst durch eine echte Strommessung wechseln.
if ($outputPhase >= 10 && $outputPhase <= 15) { if (
$this->SetValue("Is_1_ph", true); array_key_exists("120", $state) &&
abs((float)$state["120"]) < 0.1
) {
return; return;
} }
@@ -651,6 +633,17 @@ class Ladestation extends IPSModule
} }
} }
if ($activePhaseConductors === 0) {
return;
}
// Ein explizit einphasiger Easee-Ausgang ist auch in IT-Netzen
// einphasig, obwohl dort Strom auf zwei Leitern gemessen wird.
if ($outputPhase >= 10 && $outputPhase <= 15) {
$this->SetValue("Is_1_ph", true);
return;
}
// Bei einem dreiphasig freigegebenen Ausgang kann ein einphasiges Auto // Bei einem dreiphasig freigegebenen Ausgang kann ein einphasiges Auto
// trotzdem nur auf einem Leiter Strom beziehen. Observation 110 allein // trotzdem nur auf einem Leiter Strom beziehen. Observation 110 allein
// kann diesen Fahrzeugwechsel deshalb nicht erkennen. // kann diesen Fahrzeugwechsel deshalb nicht erkennen.
@@ -658,11 +651,6 @@ class Ladestation extends IPSModule
$this->SetValue("Is_1_ph", true); $this->SetValue("Is_1_ph", true);
} elseif ($activePhaseConductors >= 2) { } elseif ($activePhaseConductors >= 2) {
$this->SetValue("Is_1_ph", false); $this->SetValue("Is_1_ph", false);
} elseif (
($outputPhase >= 20 && $outputPhase <= 22) ||
$outputPhase === 30
) {
$this->SetValue("Is_1_ph", false);
} }
} }
@@ -1068,6 +1056,13 @@ class Ladestation extends IPSModule
// Timer-Status auf false setzen // Timer-Status auf false setzen
$this->SetValue("IsTimerActive_Null_Timer", false); $this->SetValue("IsTimerActive_Null_Timer", false);
} }
public function Refresh_Token()
{
// Kompatibilitätsfunktion für bestehende Instanzen. Das Gateway
// verwaltet die Easee-Anmeldung und benötigt diesen Timer nicht mehr.
$this->SetTimerInterval("Timer_Refresh_Token", 0);
}
+3
View File
@@ -31,6 +31,9 @@ und zusätzlich durch `Max_Current_abs` begrenzt. Die Typen 1 bis 4 verwenden
weiterhin unverändert die bisherige zeit- und leistungsbasierte Erkennung. weiterhin unverändert die bisherige zeit- und leistungsbasierte Erkennung.
Die Fahrzeugphasen werden anhand der tatsächlich gemessenen Leiterströme Die Fahrzeugphasen werden anhand der tatsächlich gemessenen Leiterströme
erkannt; alte Phasenwerte werden beim Trennen oder Neuverbinden verworfen. erkannt; alte Phasenwerte werden beim Trennen oder Neuverbinden verworfen.
Während einer Ladepause mit 0 W bleibt die zuletzt erkannte Phasenanzahl
erhalten. Sie ändert sich erst bei einer eindeutigen Strommessung oder beim
Abstecken des Fahrzeugs.
Stromvorgaben von 0 bis 32 A werden ebenfalls über das Gateway gesendet. Stromvorgaben von 0 bis 32 A werden ebenfalls über das Gateway gesendet.
+17 -9
View File
@@ -635,10 +635,12 @@ class Ladestation_v2 extends IPSModule
{ {
$outputPhase = (int)($state["110"] ?? 0); $outputPhase = (int)($state["110"] ?? 0);
// Ein explizit einphasiger Easee-Ausgang ist auch in IT-Netzen // Bei Ladepause bzw. 0 W die zuletzt erkannte Fahrzeugphase behalten.
// einphasig, obwohl dort Strom auf zwei Leitern gemessen wird. // Die Phasenvariable darf erst durch eine echte Strommessung wechseln.
if ($outputPhase >= 10 && $outputPhase <= 15) { if (
$this->SetValue("Is_1_ph", true); array_key_exists("120", $state) &&
abs((float)$state["120"]) < 0.1
) {
return; return;
} }
@@ -649,6 +651,17 @@ class Ladestation_v2 extends IPSModule
} }
} }
if ($activePhaseConductors === 0) {
return;
}
// Ein explizit einphasiger Easee-Ausgang ist auch in IT-Netzen
// einphasig, obwohl dort Strom auf zwei Leitern gemessen wird.
if ($outputPhase >= 10 && $outputPhase <= 15) {
$this->SetValue("Is_1_ph", true);
return;
}
// Bei einem dreiphasig freigegebenen Ausgang kann ein einphasiges Auto // Bei einem dreiphasig freigegebenen Ausgang kann ein einphasiges Auto
// trotzdem nur auf einem Leiter Strom beziehen. Observation 110 allein // trotzdem nur auf einem Leiter Strom beziehen. Observation 110 allein
// kann diesen Fahrzeugwechsel deshalb nicht erkennen. // kann diesen Fahrzeugwechsel deshalb nicht erkennen.
@@ -656,11 +669,6 @@ class Ladestation_v2 extends IPSModule
$this->SetValue("Is_1_ph", true); $this->SetValue("Is_1_ph", true);
} elseif ($activePhaseConductors >= 2) { } elseif ($activePhaseConductors >= 2) {
$this->SetValue("Is_1_ph", false); $this->SetValue("Is_1_ph", false);
} elseif (
($outputPhase >= 20 && $outputPhase <= 22) ||
$outputPhase === 30
) {
$this->SetValue("Is_1_ph", false);
} }
} }