no message
This commit is contained in:
+84
-10
@@ -278,7 +278,7 @@ class Ladestation extends IPSModule
|
|||||||
// zurückgesetzt.
|
// zurückgesetzt.
|
||||||
if (
|
if (
|
||||||
$stationType === 3 &&
|
$stationType === 3 &&
|
||||||
$this->GetBuffer("SmartMeFullDetectionVersion") !== "3"
|
$this->GetBuffer("SmartMeFullDetectionVersion") !== "4"
|
||||||
) {
|
) {
|
||||||
$this->SetValue("Car_is_full", false);
|
$this->SetValue("Car_is_full", false);
|
||||||
$this->SetValue("Pending_Counter", 0);
|
$this->SetValue("Pending_Counter", 0);
|
||||||
@@ -287,7 +287,13 @@ class Ladestation extends IPSModule
|
|||||||
(float)$this->ReadPropertyInteger("Max_Current_abs")
|
(float)$this->ReadPropertyInteger("Max_Current_abs")
|
||||||
);
|
);
|
||||||
$this->SetBuffer("SmartMeChargingEnabled", "0");
|
$this->SetBuffer("SmartMeChargingEnabled", "0");
|
||||||
$this->SetBuffer("SmartMeFullDetectionVersion", "3");
|
$this->SetBuffer("SmartMeLearnedMaxCurrent", "0");
|
||||||
|
$this->SetBuffer(
|
||||||
|
"SmartMeStationMaxCurrent",
|
||||||
|
(string)$this->ReadPropertyInteger("Max_Current_abs")
|
||||||
|
);
|
||||||
|
$this->SetBuffer("SmartMeMinStationCurrent", "6");
|
||||||
|
$this->SetBuffer("SmartMeFullDetectionVersion", "4");
|
||||||
}
|
}
|
||||||
|
|
||||||
$usesEaseeGateway = $this->UsesEaseeGateway($stationType);
|
$usesEaseeGateway = $this->UsesEaseeGateway($stationType);
|
||||||
@@ -987,6 +993,10 @@ class Ladestation extends IPSModule
|
|||||||
$minStationCurrent = is_numeric($minStationCurrent)
|
$minStationCurrent = is_numeric($minStationCurrent)
|
||||||
? max(1.0, (float)$minStationCurrent)
|
? max(1.0, (float)$minStationCurrent)
|
||||||
: 6.0;
|
: 6.0;
|
||||||
|
$this->SetBuffer(
|
||||||
|
"SmartMeMinStationCurrent",
|
||||||
|
(string)$minStationCurrent
|
||||||
|
);
|
||||||
|
|
||||||
$maxDynamicCurrent = $chargingData["MaxDynamicCurrent"] ??
|
$maxDynamicCurrent = $chargingData["MaxDynamicCurrent"] ??
|
||||||
$chargingData["maxDynamicCurrent"] ?? null;
|
$chargingData["maxDynamicCurrent"] ?? null;
|
||||||
@@ -1037,24 +1047,44 @@ class Ladestation extends IPSModule
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->SetBuffer("SmartMeStationMaxCurrent", (string)$maxCurrent);
|
||||||
|
|
||||||
$carDetected = in_array($stationState, [2, 3, 4, 6], true);
|
$carDetected = in_array($stationState, [2, 3, 4, 6], true);
|
||||||
|
$wasDetected = $this->GetValue("Car_detected");
|
||||||
|
$wasOnePhase = $this->GetValue("Is_1_ph");
|
||||||
|
$phaseChanged = is_bool($isOnePhase) &&
|
||||||
|
$wasDetected &&
|
||||||
|
$wasOnePhase !== $isOnePhase;
|
||||||
|
|
||||||
|
// Beim Abstecken, bei einem neuen Fahrzeug oder bei einem echten
|
||||||
|
// Phasenwechsel wird die zuvor gelernte Fahrzeug-/Kabelgrenze verworfen.
|
||||||
|
if (!$carDetected || !$wasDetected || $phaseChanged) {
|
||||||
|
$this->SetBuffer("SmartMeLearnedMaxCurrent", "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
$learnedMaxCurrent = (float)$this->GetBuffer(
|
||||||
|
"SmartMeLearnedMaxCurrent"
|
||||||
|
);
|
||||||
|
$effectiveMaxCurrent = $maxCurrent;
|
||||||
|
if ($learnedMaxCurrent >= $minStationCurrent) {
|
||||||
|
$effectiveMaxCurrent = min($maxCurrent, $learnedMaxCurrent);
|
||||||
|
}
|
||||||
|
|
||||||
$wasFull = $this->GetValue("Car_is_full");
|
$wasFull = $this->GetValue("Car_is_full");
|
||||||
$carIsCharging = is_numeric($chargingPowerWatts) &&
|
$carIsCharging = is_numeric($chargingPowerWatts) &&
|
||||||
abs((float)$chargingPowerWatts) >= 100;
|
abs((float)$chargingPowerWatts) >= 100;
|
||||||
$carIsFull = $carDetected && $wasFull && !$carIsCharging;
|
$carIsFull = $carDetected && $wasFull && !$carIsCharging;
|
||||||
|
|
||||||
// Pico liefert die verfügbare Stations-/Gruppenobergrenze direkt über
|
// Die API-Grenze bleibt die absolute Obergrenze. Eine bestätigte
|
||||||
// die API. Ein zuvor über den Soll-/Istvergleich gelernter Fahrzeugwert
|
// Fahrzeug-/Kabelgrenze darf darunter liegen und bleibt erhalten,
|
||||||
// darf deshalb den möglichen Ladestrom nicht dauerhaft begrenzen.
|
// solange dasselbe Fahrzeug mit derselben Phasenart angeschlossen ist.
|
||||||
if (!$carIsFull) {
|
$this->SetValue("Max_Current", $effectiveMaxCurrent);
|
||||||
$this->SetValue("Max_Current", $maxCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->ApplyDirectStationDetection(
|
return $this->ApplyDirectStationDetection(
|
||||||
$carDetected,
|
$carDetected,
|
||||||
$carIsFull,
|
$carIsFull,
|
||||||
$isOnePhase,
|
$isOnePhase,
|
||||||
$maxCurrent,
|
$effectiveMaxCurrent,
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1572,6 +1602,14 @@ class Ladestation extends IPSModule
|
|||||||
? max($availableSteps)
|
? max($availableSteps)
|
||||||
: 0;
|
: 0;
|
||||||
$maxPowerStep = count($powerSteps) > 0 ? max($powerSteps) : 0;
|
$maxPowerStep = count($powerSteps) > 0 ? max($powerSteps) : 0;
|
||||||
|
$picoAtMaximumRequest = $stationType !== 3 ||
|
||||||
|
(
|
||||||
|
$maxAvailablePower > 0 &&
|
||||||
|
$requestedPower >= (0.95 * $maxAvailablePower)
|
||||||
|
);
|
||||||
|
$picoCanEvaluate = $stationType !== 3 ||
|
||||||
|
$actualPower < 100 ||
|
||||||
|
$picoAtMaximumRequest;
|
||||||
$goEEnabled = !in_array($stationType, [1, 2], true) ||
|
$goEEnabled = !in_array($stationType, [1, 2], true) ||
|
||||||
$this->GetBuffer("GoEChargingEnabledFromStatus") === "1";
|
$this->GetBuffer("GoEChargingEnabledFromStatus") === "1";
|
||||||
$smartMeEnabled = $stationType !== 3 ||
|
$smartMeEnabled = $stationType !== 3 ||
|
||||||
@@ -1582,7 +1620,8 @@ class Ladestation extends IPSModule
|
|||||||
$requestedPower > 0 &&
|
$requestedPower > 0 &&
|
||||||
$maxPowerStep > 0 &&
|
$maxPowerStep > 0 &&
|
||||||
$goEEnabled &&
|
$goEEnabled &&
|
||||||
$smartMeEnabled;
|
$smartMeEnabled &&
|
||||||
|
$picoCanEvaluate;
|
||||||
|
|
||||||
$requestedMismatch = $requestedPower > (1.11 * $actualPower);
|
$requestedMismatch = $requestedPower > (1.11 * $actualPower);
|
||||||
$availableMismatch = $maxAvailablePower < (1.11 * $actualPower);
|
$availableMismatch = $maxAvailablePower < (1.11 * $actualPower);
|
||||||
@@ -1614,6 +1653,41 @@ class Ladestation extends IPSModule
|
|||||||
$this->SetValue("Car_is_full", true);
|
$this->SetValue("Car_is_full", true);
|
||||||
$this->ResetTimer();
|
$this->ResetTimer();
|
||||||
$this->ResetNullTimer();
|
$this->ResetNullTimer();
|
||||||
|
} elseif ($picoAtMaximumRequest) {
|
||||||
|
$minStationCurrent = max(
|
||||||
|
1.0,
|
||||||
|
(float)$this->GetBuffer(
|
||||||
|
"SmartMeMinStationCurrent"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$phaseDivisor = $this->GetValue("Is_1_ph")
|
||||||
|
? 230
|
||||||
|
: 1.71 * 400;
|
||||||
|
$actualCurrent = $actualPower / $phaseDivisor;
|
||||||
|
|
||||||
|
// Erst eine stabile Stromaufnahme mindestens
|
||||||
|
// nahe dem Stationsminimum darf als Kabel- oder
|
||||||
|
// Fahrzeuggrenze gespeichert werden.
|
||||||
|
if ($actualCurrent >= 0.9 * $minStationCurrent) {
|
||||||
|
$stationMaxCurrent = max(
|
||||||
|
$minStationCurrent,
|
||||||
|
(float)$this->GetBuffer(
|
||||||
|
"SmartMeStationMaxCurrent"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$learnedMaxCurrent = min(
|
||||||
|
$stationMaxCurrent,
|
||||||
|
$learnedMaxCurrent
|
||||||
|
);
|
||||||
|
$this->SetBuffer(
|
||||||
|
"SmartMeLearnedMaxCurrent",
|
||||||
|
(string)$learnedMaxCurrent
|
||||||
|
);
|
||||||
|
$this->SetValue(
|
||||||
|
"Max_Current",
|
||||||
|
$learnedMaxCurrent
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->Calc_Max_Current($this->GetValue("Is_1_ph"));
|
$this->Calc_Max_Current($this->GetValue("Is_1_ph"));
|
||||||
|
|||||||
+84
-10
@@ -288,7 +288,7 @@ class Ladestation_v2 extends IPSModule
|
|||||||
// zurückgesetzt.
|
// zurückgesetzt.
|
||||||
if (
|
if (
|
||||||
$stationType === 3 &&
|
$stationType === 3 &&
|
||||||
$this->GetBuffer("SmartMeFullDetectionVersion") !== "3"
|
$this->GetBuffer("SmartMeFullDetectionVersion") !== "4"
|
||||||
) {
|
) {
|
||||||
$this->SetValue("Car_is_full", false);
|
$this->SetValue("Car_is_full", false);
|
||||||
$this->SetValue("Pending_Counter", 0);
|
$this->SetValue("Pending_Counter", 0);
|
||||||
@@ -297,7 +297,13 @@ class Ladestation_v2 extends IPSModule
|
|||||||
(float)$this->ReadPropertyInteger("Max_Current_abs")
|
(float)$this->ReadPropertyInteger("Max_Current_abs")
|
||||||
);
|
);
|
||||||
$this->SetBuffer("SmartMeChargingEnabled", "0");
|
$this->SetBuffer("SmartMeChargingEnabled", "0");
|
||||||
$this->SetBuffer("SmartMeFullDetectionVersion", "3");
|
$this->SetBuffer("SmartMeLearnedMaxCurrent", "0");
|
||||||
|
$this->SetBuffer(
|
||||||
|
"SmartMeStationMaxCurrent",
|
||||||
|
(string)$this->ReadPropertyInteger("Max_Current_abs")
|
||||||
|
);
|
||||||
|
$this->SetBuffer("SmartMeMinStationCurrent", "6");
|
||||||
|
$this->SetBuffer("SmartMeFullDetectionVersion", "4");
|
||||||
}
|
}
|
||||||
|
|
||||||
$usesEaseeGateway = $this->UsesEaseeGateway($stationType);
|
$usesEaseeGateway = $this->UsesEaseeGateway($stationType);
|
||||||
@@ -1007,6 +1013,10 @@ class Ladestation_v2 extends IPSModule
|
|||||||
$minStationCurrent = is_numeric($minStationCurrent)
|
$minStationCurrent = is_numeric($minStationCurrent)
|
||||||
? max(1.0, (float)$minStationCurrent)
|
? max(1.0, (float)$minStationCurrent)
|
||||||
: 6.0;
|
: 6.0;
|
||||||
|
$this->SetBuffer(
|
||||||
|
"SmartMeMinStationCurrent",
|
||||||
|
(string)$minStationCurrent
|
||||||
|
);
|
||||||
|
|
||||||
$maxDynamicCurrent = $chargingData["MaxDynamicCurrent"] ??
|
$maxDynamicCurrent = $chargingData["MaxDynamicCurrent"] ??
|
||||||
$chargingData["maxDynamicCurrent"] ?? null;
|
$chargingData["maxDynamicCurrent"] ?? null;
|
||||||
@@ -1057,24 +1067,44 @@ class Ladestation_v2 extends IPSModule
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
$this->SetBuffer("SmartMeStationMaxCurrent", (string)$maxCurrent);
|
||||||
|
|
||||||
$carDetected = in_array($stationState, [2, 3, 4, 6], true);
|
$carDetected = in_array($stationState, [2, 3, 4, 6], true);
|
||||||
|
$wasDetected = $this->GetValue("Car_detected");
|
||||||
|
$wasOnePhase = $this->GetValue("Is_1_ph");
|
||||||
|
$phaseChanged = is_bool($isOnePhase) &&
|
||||||
|
$wasDetected &&
|
||||||
|
$wasOnePhase !== $isOnePhase;
|
||||||
|
|
||||||
|
// Beim Abstecken, bei einem neuen Fahrzeug oder bei einem echten
|
||||||
|
// Phasenwechsel wird die zuvor gelernte Fahrzeug-/Kabelgrenze verworfen.
|
||||||
|
if (!$carDetected || !$wasDetected || $phaseChanged) {
|
||||||
|
$this->SetBuffer("SmartMeLearnedMaxCurrent", "0");
|
||||||
|
}
|
||||||
|
|
||||||
|
$learnedMaxCurrent = (float)$this->GetBuffer(
|
||||||
|
"SmartMeLearnedMaxCurrent"
|
||||||
|
);
|
||||||
|
$effectiveMaxCurrent = $maxCurrent;
|
||||||
|
if ($learnedMaxCurrent >= $minStationCurrent) {
|
||||||
|
$effectiveMaxCurrent = min($maxCurrent, $learnedMaxCurrent);
|
||||||
|
}
|
||||||
|
|
||||||
$wasFull = $this->GetValue("Car_is_full");
|
$wasFull = $this->GetValue("Car_is_full");
|
||||||
$carIsCharging = is_numeric($chargingPowerWatts) &&
|
$carIsCharging = is_numeric($chargingPowerWatts) &&
|
||||||
abs((float)$chargingPowerWatts) >= 100;
|
abs((float)$chargingPowerWatts) >= 100;
|
||||||
$carIsFull = $carDetected && $wasFull && !$carIsCharging;
|
$carIsFull = $carDetected && $wasFull && !$carIsCharging;
|
||||||
|
|
||||||
// Pico liefert die verfügbare Stations-/Gruppenobergrenze direkt über
|
// Die API-Grenze bleibt die absolute Obergrenze. Eine bestätigte
|
||||||
// die API. Ein zuvor über den Soll-/Istvergleich gelernter Fahrzeugwert
|
// Fahrzeug-/Kabelgrenze darf darunter liegen und bleibt erhalten,
|
||||||
// darf deshalb den möglichen Ladestrom nicht dauerhaft begrenzen.
|
// solange dasselbe Fahrzeug mit derselben Phasenart angeschlossen ist.
|
||||||
if (!$carIsFull) {
|
$this->SetValue("Max_Current", $effectiveMaxCurrent);
|
||||||
$this->SetValue("Max_Current", $maxCurrent);
|
|
||||||
}
|
|
||||||
|
|
||||||
return $this->ApplyDirectStationDetection(
|
return $this->ApplyDirectStationDetection(
|
||||||
$carDetected,
|
$carDetected,
|
||||||
$carIsFull,
|
$carIsFull,
|
||||||
$isOnePhase,
|
$isOnePhase,
|
||||||
$maxCurrent,
|
$effectiveMaxCurrent,
|
||||||
false
|
false
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
@@ -1585,6 +1615,14 @@ class Ladestation_v2 extends IPSModule
|
|||||||
? max($availableSteps)
|
? max($availableSteps)
|
||||||
: 0;
|
: 0;
|
||||||
$maxPowerStep = count($powerSteps) > 0 ? max($powerSteps) : 0;
|
$maxPowerStep = count($powerSteps) > 0 ? max($powerSteps) : 0;
|
||||||
|
$picoAtMaximumRequest = $stationType !== 3 ||
|
||||||
|
(
|
||||||
|
$maxAvailablePower > 0 &&
|
||||||
|
$requestedPower >= (0.95 * $maxAvailablePower)
|
||||||
|
);
|
||||||
|
$picoCanEvaluate = $stationType !== 3 ||
|
||||||
|
$actualPower < 100 ||
|
||||||
|
$picoAtMaximumRequest;
|
||||||
$goEEnabled = !in_array($stationType, [1, 2], true) ||
|
$goEEnabled = !in_array($stationType, [1, 2], true) ||
|
||||||
$this->GetBuffer("GoEChargingEnabledFromStatus") === "1";
|
$this->GetBuffer("GoEChargingEnabledFromStatus") === "1";
|
||||||
$smartMeEnabled = $stationType !== 3 ||
|
$smartMeEnabled = $stationType !== 3 ||
|
||||||
@@ -1595,7 +1633,8 @@ class Ladestation_v2 extends IPSModule
|
|||||||
$requestedPower > 0 &&
|
$requestedPower > 0 &&
|
||||||
$maxPowerStep > 0 &&
|
$maxPowerStep > 0 &&
|
||||||
$goEEnabled &&
|
$goEEnabled &&
|
||||||
$smartMeEnabled;
|
$smartMeEnabled &&
|
||||||
|
$picoCanEvaluate;
|
||||||
|
|
||||||
$requestedMismatch = $requestedPower > (1.11 * $actualPower);
|
$requestedMismatch = $requestedPower > (1.11 * $actualPower);
|
||||||
$availableMismatch = $maxAvailablePower < (1.11 * $actualPower);
|
$availableMismatch = $maxAvailablePower < (1.11 * $actualPower);
|
||||||
@@ -1627,6 +1666,41 @@ class Ladestation_v2 extends IPSModule
|
|||||||
$this->SetValue("Car_is_full", true);
|
$this->SetValue("Car_is_full", true);
|
||||||
$this->ResetTimer();
|
$this->ResetTimer();
|
||||||
$this->ResetNullTimer();
|
$this->ResetNullTimer();
|
||||||
|
} elseif ($picoAtMaximumRequest) {
|
||||||
|
$minStationCurrent = max(
|
||||||
|
1.0,
|
||||||
|
(float)$this->GetBuffer(
|
||||||
|
"SmartMeMinStationCurrent"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$phaseDivisor = $this->GetValue("Is_1_ph")
|
||||||
|
? 230
|
||||||
|
: 1.71 * 400;
|
||||||
|
$actualCurrent = $actualPower / $phaseDivisor;
|
||||||
|
|
||||||
|
// Erst eine stabile Stromaufnahme mindestens
|
||||||
|
// nahe dem Stationsminimum darf als Kabel- oder
|
||||||
|
// Fahrzeuggrenze gespeichert werden.
|
||||||
|
if ($actualCurrent >= 0.9 * $minStationCurrent) {
|
||||||
|
$stationMaxCurrent = max(
|
||||||
|
$minStationCurrent,
|
||||||
|
(float)$this->GetBuffer(
|
||||||
|
"SmartMeStationMaxCurrent"
|
||||||
|
)
|
||||||
|
);
|
||||||
|
$learnedMaxCurrent = min(
|
||||||
|
$stationMaxCurrent,
|
||||||
|
$learnedMaxCurrent
|
||||||
|
);
|
||||||
|
$this->SetBuffer(
|
||||||
|
"SmartMeLearnedMaxCurrent",
|
||||||
|
(string)$learnedMaxCurrent
|
||||||
|
);
|
||||||
|
$this->SetValue(
|
||||||
|
"Max_Current",
|
||||||
|
$learnedMaxCurrent
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
$this->Calc_Max_Current($this->GetValue("Is_1_ph"));
|
$this->Calc_Max_Current($this->GetValue("Is_1_ph"));
|
||||||
|
|||||||
Reference in New Issue
Block a user