From 3a9da82421ac2db4ec8a4b4b0d442c5846513c84 Mon Sep 17 00:00:00 2001 From: "belevo\\mh" Date: Wed, 5 Mar 2025 10:39:44 +0100 Subject: [PATCH] Batteriemodul Peak erweitert --- Batterie/module.php | 123 +++++++++++++++++++++++--------------------- library.json | 2 +- 2 files changed, 64 insertions(+), 61 deletions(-) diff --git a/Batterie/module.php b/Batterie/module.php index bc6a376..201b919 100644 --- a/Batterie/module.php +++ b/Batterie/module.php @@ -28,8 +28,9 @@ 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", "Hysterese_solar","",0); - $this->RegisterVariableBoolean("Hysterese_peak", "Hysterese_peak","",0); + $this->RegisterVariableBoolean("Hysterese", "Hysterese","",0); + $this->RegisterVariableBoolean("Hysterese_Netz", "Hysterese_Netz","",0); + $this->RegisterVariableFloat("Bezogene_Energie", "Bezogene_Energie", "", 0); @@ -150,24 +151,20 @@ public function RequestAction($Ident, $Value) public function GetCurrentData(bool $Peak) { - - $array_powersteps = $this->GeneratePowerSteps(); $aufdasnachladen = $this->ReadPropertyInteger("AufdasNachladen"); $minimumentladen = $this->ReadPropertyInteger("MinimumEntladen"); $maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung"); $dummy_array = []; - $inhystere_solar = $this->GetValue("Hysterese_solar"); - $inhystere_peak = $this->GetValue("Hysterese_peak"); - - + $inhystere = $this->GetValue("Hysterese"); + $inhystere_netz = $this->GetValue("Hysterese_Netz"); + $batterieManagement = $this->ReadPropertyInteger("Batteriemanagement"); if ($batterieManagement == 1) { $dummy_array[] = 0; return $this->SetValue("PowerSteps", json_encode($dummy_array)); } - - + $batterieladezustandID = $this->ReadPropertyInteger("Batterieladezustand"); if ($batterieladezustandID > 0) { $batterieladezustand = GetValue($batterieladezustandID); @@ -175,85 +172,90 @@ public function RequestAction($Ident, $Value) IPS_LogMessage("Batterie", "Fehler: Ungültige Batterieladezustand-ID."); return; } - - + if ($Peak) { - - if($batterieladezustand >= $aufdasnachladen){ - $this->SetValue("Hysterese_peak", false); - } - + if ($batterieladezustand >= 5 + $aufdasnachladen) { + $this->SetValue("Hysterese", false); + $this->SetValue("Hysterese_Netz", true); + } + + if ($batterieladezustand < $aufdasnachladen) { + $this->SetValue("Hysterese_Netz", false); + } + if ($batterieladezustand <= $minimumentladen) { - $filtered_powersteps = array_filter($array_powersteps, function ($value) use ($maxleistung) { - return $value >= 0; // Hochpass filtern + $filtered_powersteps = array_filter($array_powersteps, function ($value) { + return $value >= 0; }); $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" ); + $this->SetValue("Hysterese", true); + IPS_LogMessage("Batterie", "Peak: unter minimum"); - } elseif ($batterieladezustand > $minimumentladen) { + } elseif ($batterieladezustand > $minimumentladen) { - if ($inhystere_peak == true){ - $filtered_powersteps = array_filter($array_powersteps, function ($value) use ($maxleistung) { - return $value >= 0; + if ($inhystere == true && $inhystere_netz == false) { + $filtered_powersteps = array_filter($array_powersteps, function ($value) { + return $value >= 0; }); $filtered_powersteps_laden = array_values($filtered_powersteps); $this->SetValue("PowerSteps", json_encode($filtered_powersteps_laden)); - IPS_LogMessage("Batterie", ": peak: Hysterese " ); - }else{ + IPS_LogMessage("Batterie", ": peak: Hysterese"); + + } elseif ($inhystere_netz == true && $inhystere == false) { $netzbezug = GetValue($this->ReadPropertyInteger("Netzbezug")); - if (abs($netzbezug)>$maxleistung){ - $dummy_array[] = $maxleistung*(-1); - } else{ + if (abs($netzbezug) > $maxleistung) { + $dummy_array[] = $maxleistung * (-1); + } else { $dummy_array[] = $netzbezug; } $this->SetValue("PowerSteps", json_encode($dummy_array)); - IPS_LogMessage("Batterie", "Peak: netzbezug, keine hysterese" ); - } - } - - else { - - $dummy_array[] = 0; - $this->SetValue("PowerSteps", json_encode($dummy_array)); - IPS_LogMessage("Batterie", ": peak: Keine Hysterese " ); + IPS_LogMessage("Batterie", "Peak: netzbezug, keine hysterese"); + + } elseif ($inhystere_netz == false && $inhystere == false) { + $this->SetValue("PowerSteps", json_encode($array_powersteps)); + IPS_LogMessage("Batterie", "Peak: alle Werte, keine hysterese"); + + } else { + $dummy_array[] = 0; + $this->SetValue("PowerSteps", json_encode($dummy_array)); + IPS_LogMessage("Batterie", ": peak: Keine Hysterese"); + } } } else { // Solar - - if($batterieladezustand >= 5 + $aufdasnachladen){ - $this->SetValue("Hysterese_solar", false); - } - + if ($batterieladezustand >= 5 + $aufdasnachladen) { + $this->SetValue("Hysterese", false); + $this->SetValue("Hysterese_Netz", true); + } + if ($batterieladezustand < $aufdasnachladen) { - $this->SetValue("Hysterese_solar", true); + $this->SetValue("Hysterese", true); + $this->SetValue("Hysterese_Netz", false); $nachladen = $this->ReadPropertyInteger("MaxNachladen"); $dummy_array[] = $nachladen; - IPS_LogMessage("Batterie", ": MaxNachladen " .json_encode($dummy_array)); - $this->SetValue("PowerSteps", json_encode($dummy_array)); + IPS_LogMessage("Batterie", ": MaxNachladen " . json_encode($dummy_array)); + $this->SetValue("PowerSteps", json_encode($dummy_array)); - }elseif ($batterieladezustand >= $aufdasnachladen) { - - if ($inhystere_solar == true){ - $filtered_powersteps= array_filter($array_powersteps, function ($value) use ($maxleistung) { - return $value >= 0; + } elseif ($batterieladezustand >= $aufdasnachladen) { + if ($inhystere == true) { + $filtered_powersteps = array_filter($array_powersteps, function ($value) { + return $value >= 0; }); $filtered_powersteps_laden = array_values($filtered_powersteps); $this->SetValue("PowerSteps", json_encode($filtered_powersteps_laden)); - IPS_LogMessage("Batterie", ": solar: Hysterese " ); - }else{ + IPS_LogMessage("Batterie", ": solar: Hysterese"); + } else { $this->SetValue("PowerSteps", json_encode($array_powersteps)); - IPS_LogMessage("Batterie", ": solar: Keine Hysterese " ); - } + IPS_LogMessage("Batterie", ": solar: Keine Hysterese"); + } - }elseif ($batterieladezustand >= 100) { - $filtered_powersteps_entladen = array_filter($array_powersteps, function ($value) use ($maxleistung) { - return $value < 0; // Tiefpass filtern + } elseif ($batterieladezustand >= 100) { + $filtered_powersteps_entladen = array_filter($array_powersteps, function ($value) { + return $value < 0; }); $this->SetValue("PowerSteps", json_encode($filtered_powersteps_entladen)); - } else { $dummy_array[] = 0; $this->SetValue("PowerSteps", json_encode($dummy_array)); @@ -263,6 +265,7 @@ public function RequestAction($Ident, $Value) + private function CheckIdle($power) { $lastpower = GetValue("Aktuelle_Leistung"); diff --git a/library.json b/library.json index 93c4005..3663182 100644 --- a/library.json +++ b/library.json @@ -6,7 +6,7 @@ "compatibility": { "version": "7.1" }, - "version": "1.230", + "version": "1.231", "build": 0, "date": 0 } \ No newline at end of file