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.
Die Fahrzeugphasen werden anhand der tatsächlich gemessenen Leiterströme
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.
@@ -59,8 +62,9 @@ Ladestrom fließt. Beim Abstecken werden die erkannten Phasen zurückgesetzt.
Typ 4 bleibt unverändert.
Beim Update bestehender Instanzen wird die frühere Eigenschaft `Token_Easee`
automatisch entfernt und durch die Gateway-Zuordnung ersetzt. Die vorhandene
Modul- und Instanzidentität bleibt erhalten.
aus Kompatibilitätsgründen intern beibehalten, aber nicht mehr verwendet oder
im Formular angezeigt. Auch der frühere Token-Timer wird deaktiviert. Die
vorhandene Modul- und Instanzidentität bleibt erhalten.
## Einrichtung
+37 -42
View File
@@ -103,6 +103,12 @@ class Ladestation extends IPSModule
IPS_SetHidden($this->GetIDForIdent("Easee_Gateway_Connected"), true);
$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
$this->RegisterPropertyInteger("IdleCounterMax", 2);
$this->RegisterVariableInteger("IdleCounter", "IdleCounter", "", 0);
@@ -113,44 +119,12 @@ class Ladestation extends IPSModule
$this->SetValue("Idle", true);
$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->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()
{
$form = json_decode(file_get_contents(__DIR__ . "/form.json"), true);
@@ -294,6 +268,8 @@ class Ladestation extends IPSModule
false
);
$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");
$usesEaseeGateway = $this->UsesEaseeGateway($stationType);
IPS_SetHidden(
@@ -365,6 +341,10 @@ class Ladestation extends IPSModule
$this->ResetNullTimer();
break;
case "Refresh_Token":
$this->Refresh_Token();
break;
case "Mindestaldestrom":
$this->SetValue("Mindestaldestrom", (int)$Value);
break;
@@ -637,10 +617,12 @@ class Ladestation extends IPSModule
{
$outputPhase = (int)($state["110"] ?? 0);
// 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);
// Bei Ladepause bzw. 0 W die zuletzt erkannte Fahrzeugphase behalten.
// Die Phasenvariable darf erst durch eine echte Strommessung wechseln.
if (
array_key_exists("120", $state) &&
abs((float)$state["120"]) < 0.1
) {
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
// trotzdem nur auf einem Leiter Strom beziehen. Observation 110 allein
// kann diesen Fahrzeugwechsel deshalb nicht erkennen.
@@ -658,11 +651,6 @@ class Ladestation extends IPSModule
$this->SetValue("Is_1_ph", true);
} elseif ($activePhaseConductors >= 2) {
$this->SetValue("Is_1_ph", false);
} elseif (
($outputPhase >= 20 && $outputPhase <= 22) ||
$outputPhase === 30
) {
$this->SetValue("Is_1_ph", false);
}
}
@@ -1069,6 +1057,13 @@ class Ladestation extends IPSModule
$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);
}
public function Get_Car_Status(int $carType)
+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.
Die Fahrzeugphasen werden anhand der tatsächlich gemessenen Leiterströme
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.
+17 -9
View File
@@ -635,10 +635,12 @@ class Ladestation_v2 extends IPSModule
{
$outputPhase = (int)($state["110"] ?? 0);
// 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);
// Bei Ladepause bzw. 0 W die zuletzt erkannte Fahrzeugphase behalten.
// Die Phasenvariable darf erst durch eine echte Strommessung wechseln.
if (
array_key_exists("120", $state) &&
abs((float)$state["120"]) < 0.1
) {
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
// trotzdem nur auf einem Leiter Strom beziehen. Observation 110 allein
// kann diesen Fahrzeugwechsel deshalb nicht erkennen.
@@ -656,11 +669,6 @@ class Ladestation_v2 extends IPSModule
$this->SetValue("Is_1_ph", true);
} elseif ($activePhaseConductors >= 2) {
$this->SetValue("Is_1_ph", false);
} elseif (
($outputPhase >= 20 && $outputPhase <= 22) ||
$outputPhase === 30
) {
$this->SetValue("Is_1_ph", false);
}
}