no message

This commit is contained in:
belevo\mh
2026-01-27 13:24:58 +01:00
parent 9bbbad260a
commit 8c5a9c5e61
2 changed files with 102 additions and 19 deletions

View File

@@ -61,6 +61,25 @@
"type":"SelectVariable"
}
}
,
{
"caption":"Register Laden",
"name":"register_laden",
"width":"200px",
"add":0,
"edit":{
"type":"SelectVariable"
}
},
{
"caption":"Register Entladen",
"name":"register_entladen",
"width":"200px",
"add":0,
"edit":{
"type":"SelectVariable"
}
}
]
},

View File

@@ -502,10 +502,8 @@ class Bat_EV_SDL_V2 extends IPSModule
}
private function WriteBatteryPowerSetpoints(array $distribution): void
{
// chargeW und dischargeW sind in W. Wenn good hat muss in kW umrechnen
// Batteries-Config laden (für Variable-IDs + typ)
{
// Batteries-Config laden (enthält register_laden / register_entladen)
$batteriesCfg = json_decode($this->ReadPropertyString("Batteries"), true);
if (!is_array($batteriesCfg) || empty($batteriesCfg)) {
return;
@@ -520,6 +518,8 @@ class Bat_EV_SDL_V2 extends IPSModule
}
$cfg = $batteriesCfg[$idx];
// typ aus distribution bevorzugen, sonst aus Config
$typ = (string)($d["typ"] ?? ($cfg["typ"] ?? ("Bat " . ($idx + 1))));
// --- Sollwerte (Watt) ---
@@ -528,32 +528,96 @@ class Bat_EV_SDL_V2 extends IPSModule
// Sicherheitsnetz: nie gleichzeitig laden & entladen
if ($chargeW > 0.0 && $dischargeW > 0.0) {
// Debug-Hinweis, falls Strategie Mist gebaut hat
$this->SendDebug(
"WriteBatteryPowerSetpoints",
"WARN: charge & discharge gleichzeitig > 0 bei $typ (idx=$idx)",
"WARN: charge & discharge gleichzeitig > 0 bei $typ (idx=$idx) -> setze beides 0",
0
);
$chargeW = 0.0;
$dischargeW = 0.0;
}
// --- Ziel-Variablen ---
$varCharge = (int)($cfg["powerbat_laden"] ?? 0);
$varDischarge = (int)($cfg["powerbat_entladen"] ?? 0);
// --- Schreiben ---
if ($varCharge > 0 && IPS_VariableExists($varCharge)) {
SetValue($varCharge, (int)round($chargeW, 0));
}
if ($varDischarge > 0 && IPS_VariableExists($varDischarge)) {
SetValue($varDischarge, (int)round($dischargeW, 0));
}
// --- Vendor-/Default-Handling über Register schreiben ---
$this->WriteByVendorRegisters($typ, $cfg, $chargeW, $dischargeW);
// Optionales Debug
$this->SendDebug(
"Setpoints",
"$typ (idx=$idx): charge={$chargeW}W discharge={$dischargeW}W",
0
);
}
}
private function WriteByVendorRegisters(string $typ, array $cfg, float $chargeW, float $dischargeW): void
{
$typLower = mb_strtolower($typ);
// Register aus Formular
$regCharge = (int)($cfg["register_laden"] ?? 0);
$regDisch = (int)($cfg["register_entladen"] ?? 0);
// -----------------------------
// GOODWE → ein Register, signed
// -----------------------------
if (strpos($typLower, "goodwe") !== false) {
if ($regCharge > 0 && IPS_VariableExists($regCharge)) {
$signedW = 0.0;
if ($chargeW > 0.0) {
$signedW = $chargeW; // Laden → +
} elseif ($dischargeW > 0.0) {
$signedW = -1.0 * $dischargeW; // Entladen → -
}
SetValue($regCharge, (int)round($signedW, 0));
}
// optional: zweites Register auf 0 halten
if ($regDisch > 0 && IPS_VariableExists($regDisch)) {
SetValue($regDisch, 0);
}
return;
}
// --------------------------------
// SOLAREDGE → getrennte Register
// --------------------------------
if (strpos($typLower, "solaredge") !== false) {
if ($regCharge > 0 && IPS_VariableExists($regCharge)) {
SetValue($regCharge, (int)round($chargeW, 0));
}
if ($regDisch > 0 && IPS_VariableExists($regDisch)) {
SetValue($regDisch, (int)round($dischargeW, 0));
}
return;
}
// --------------------------------
// DEFAULT → getrennt, fest: 1 / 2
// --------------------------------
// Laden = Register 1, Entladen = Register 2
if (IPS_VariableExists(1)) {
SetValue(1, (int)round($chargeW, 0));
}
if (IPS_VariableExists(2)) {
SetValue(2, (int)round($dischargeW, 0));
}
$this->SendDebug(
"WriteByVendorRegisters",
"DEFAULT ($typ): charge={$chargeW}W -> Reg1, discharge={$dischargeW}W -> Reg2",
0
);
}
}
?>