From bf59fbebbbf4e493515f6b6260e67ed284f0dfa9 Mon Sep 17 00:00:00 2001 From: "belevo\\mh" Date: Wed, 26 Feb 2025 14:57:12 +0100 Subject: [PATCH] =?UTF-8?q?hysterese=202.0=20hinzugef=C3=BCgt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Batterie/module.php | 60 +++++++++++++++++++++++++++++++++------------ library.json | 2 +- 2 files changed, 45 insertions(+), 17 deletions(-) diff --git a/Batterie/module.php b/Batterie/module.php index ae61feb..c7f9f3f 100644 --- a/Batterie/module.php +++ b/Batterie/module.php @@ -28,6 +28,8 @@ class Batterie extends IPSModule $this->RegisterVariableInteger("PV_Prio", "PV_Prio"); $this->RegisterVariableInteger("Power", "Power"); $this->RegisterVariableBoolean("Is_Peak_Shaving", "Is_Peak_Shaving"); + $this->RegisterVariableBoolean("Hysterese_solar", "","",0); + $this->RegisterVariableBoolean("Hysterese_peak", "","",0); $this->RegisterVariableFloat("Bezogene_Energie", "Bezogene_Energie", "", 0); @@ -155,7 +157,8 @@ public function RequestAction($Ident, $Value) $minimumentladen = $this->ReadPropertyInteger("MinimumEntladen"); $maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung"); $dummy_array = []; - + $inhystere_solar = $this->GetValue("Hysterese_solar"); + $inhystere_peak = $this->GetValue("Hysterese_peak"); $batterieManagement = $this->ReadPropertyInteger("Batteriemanagement"); @@ -176,27 +179,40 @@ public function RequestAction($Ident, $Value) if ($Peak) { + if($batterieladezustand >= $aufdasnachladen){ + $this->SetValue("Hysterese_peak", false); + $netzbezug = GetValue($this->ReadPropertyInteger("Netzbezug")); + if (abs($netzbezug)>$maxleistung){ + $dummy_array[] = $maxleistung*(-1); + } else{ + $dummy_array[] = $netzbezug; + } + $this->SetValue("PowerSteps", json_encode($dummy_array)); + $this->SetValue("Hysterese_peak", 0); + IPS_LogMessage("Batterie", "Peak: netzbezug" ); + } + if ($batterieladezustand <= $minimumentladen) { $filtered_powersteps = array_filter($array_powersteps, function ($value) use ($maxleistung) { return $value >= 0; // Hochpass filtern }); $filtered_powersteps_laden = array_values($filtered_powersteps); $this->SetValue("PowerSteps", json_encode($filtered_powersteps_laden)); - + $this->SetValue("Hysterese_peak", true); + IPS_LogMessage("Batterie", "Peak: unter minimum" ); - } elseif ($batterieladezustand < $aufdasnachladen && $batterieladezustand > $minimumentladen) { - $this->SetValue("PowerSteps", json_encode($array_powersteps)); + } elseif ($batterieladezustand > $minimumentladen) { + if ($inhystere_peak == true){ + $filtered_powersteps_laden = array_filter($array_powersteps, function ($value) use ($maxleistung) { + return $value >= 0; + }); + $this->SetValue("PowerSteps", json_encode($filtered_powersteps_laden)); + }else{ + $this->SetValue("PowerSteps", json_encode($array_powersteps)); + } } - - // Hier Modul auf Wechselrichter 1 stellen - elseif ($batterieladezustand >= $aufdasnachladen) { - $netzbezug = GetValue($this->ReadPropertyInteger("Netzbezug")); - $dummy_array[] = $netzbezug*(-1); - IPS_LogMessage("Batterie", "Dummy Array: " . json_encode($dummy_array)); - $this->SetValue("PowerSteps", json_encode($dummy_array)); - - } else { + else { $dummy_array[] = 0; $this->SetValue("PowerSteps", json_encode($dummy_array)); @@ -205,22 +221,34 @@ public function RequestAction($Ident, $Value) } else { // Solar + if($batterieladezustand >= 5 + $aufdasnachladen){ + $this->SetValue("Hysterese_solar", false); + } if ($batterieladezustand < $aufdasnachladen) { + $this->SetValue("Hysterese_solar", true); $nachladen = $this->ReadPropertyInteger("MaxNachladen"); $dummy_array[] = $nachladen; IPS_LogMessage("Batterie", ": MaxNachladen " .json_encode($dummy_array)); $this->SetValue("PowerSteps", json_encode($dummy_array)); + }elseif ($batterieladezustand >= $aufdasnachladen) { + + if ($inhystere_solar == true){ + $filtered_powersteps_laden = array_filter($array_powersteps, function ($value) use ($maxleistung) { + return $value >= 0; + }); + $this->SetValue("PowerSteps", json_encode($filtered_powersteps_laden)); + }else{ + $this->SetValue("PowerSteps", json_encode($array_powersteps)); + } + }elseif ($batterieladezustand >= 100) { $filtered_powersteps_entladen = array_filter($array_powersteps, function ($value) use ($maxleistung) { return $value < 0; // Tiefpass filtern }); $this->SetValue("PowerSteps", json_encode($filtered_powersteps_entladen)); - }elseif ($batterieladezustand >= $aufdasnachladen) { - $this->SetValue("PowerSteps", json_encode($array_powersteps)); - } else { $dummy_array[] = 0; $this->SetValue("PowerSteps", json_encode($dummy_array)); diff --git a/library.json b/library.json index 7857601..49c54f8 100644 --- a/library.json +++ b/library.json @@ -6,7 +6,7 @@ "compatibility": { "version": "7.1" }, - "version": "1.094", + "version": "1.095", "build": 0, "date": 0 } \ No newline at end of file