diff --git a/Batterie/module.php b/Batterie/module.php index fac55ee..b7ff109 100644 --- a/Batterie/module.php +++ b/Batterie/module.php @@ -28,6 +28,7 @@ class Batterie extends IPSModule $this->RegisterVariableInteger("PV_Prio", "PV_Prio"); $this->RegisterVariableInteger("Power", "Power"); $this->RegisterVariableBoolean("Is_Peak_Shaving", "Is_Peak_Shaving"); + $this->RegisterVariableBoolean("In_Hystere", "In_Hystere"); $this->RegisterVariableFloat("Bezogene_Energie", "Bezogene_Energie", "", 0); @@ -103,9 +104,8 @@ public function RequestAction($Ident, $Value) return; } - if($this->GetValue("Is_Peak_Shaving")==true){ - if ($power >= 0) { + if ($power > 0) { $this->SetValue("Ladeleistung", $power); $this->SetValue("Entladeleistung", 0); $this->SetValue("Laden3_Entladen4", 3); @@ -116,7 +116,7 @@ public function RequestAction($Ident, $Value) } }else{ - if ($power >= 0) { + if ($power > 0) { $this->SetValue("Ladeleistung", $power); $this->SetValue("Entladeleistung", 0); $this->SetValue("Laden3_Entladen4", 3); @@ -155,7 +155,7 @@ public function RequestAction($Ident, $Value) $minimumentladen = $this->ReadPropertyInteger("MinimumEntladen"); $maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung"); $dummy_array = []; - + $inhystere = $this->GetValue("In_Hystere"); $batterieManagement = $this->ReadPropertyInteger("Batteriemanagement"); @@ -182,48 +182,69 @@ public function RequestAction($Ident, $Value) }); $filtered_powersteps_laden = array_values($filtered_powersteps); $this->SetValue("PowerSteps", json_encode($filtered_powersteps_laden)); - + $this->SetValue("In_Hystere", 1); + IPS_LogMessage("Batterie", "Peak: unter minimum" ); - } elseif ($batterieladezustand < $aufdasnachladen && $batterieladezustand > $minimumentladen) { - $this->SetValue("PowerSteps", json_encode($array_powersteps)); - } - - - // Hier Modul auf Wechselrichter 1 stellen - elseif ($batterieladezustand >= $aufdasnachladen) { + } elseif ($batterieladezustand < $aufdasnachladen && $batterieladezustand > $minimumentladen && $inhystere == true) { + $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("In_Hystere", 1); + IPS_LogMessage("Batterie", "Peak: hysterese" ); + + } elseif ($batterieladezustand < $aufdasnachladen && $batterieladezustand > $minimumentladen == false) { + $this->SetValue("PowerSteps", json_encode($array_powersteps)); + $this->SetValue("In_Hystere", 0); + IPS_LogMessage("Batterie", "Peak: normal" ); + + } 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)); + $this->SetValue("In_Hystere", 0); + IPS_LogMessage("Batterie", "Peak: netzbezug" ); } else { - $dummy_array[] = 0; $this->SetValue("PowerSteps", json_encode($dummy_array)); + IPS_LogMessage("Batterie", "Peak: Kein Fall"); } } else { // Solar - - - if ($batterieladezustand < $aufdasnachladen) { + ////Hysterese + if ($batterieladezustand < $aufdasnachladen ) { + $nachladen = $this->ReadPropertyInteger("MaxNachladen"); + $dummy_array[] = $nachladen; + $this->SetValue("PowerSteps", json_encode($dummy_array)); + $this->SetValue("In_Hystere", 1); + IPS_LogMessage("Batterie", "Solar: unter aufdasladen" ); + + } elseif ($batterieladezustand <= $aufdasnachladen + 5 && $batterieladezustand >= $aufdasnachladen && $inhystere == true ) { $nachladen = $this->ReadPropertyInteger("MaxNachladen"); $dummy_array[] = $nachladen; - IPS_LogMessage("Batterie", ": MaxNachladen " .json_encode($dummy_array)); - $this->SetValue("PowerSteps", json_encode($dummy_array)); + $this->SetValue("PowerSteps", json_encode($dummy_array)); + $this->SetValue("In_Hystere", 1); + IPS_LogMessage("Batterie", "Solar: in hysterese" ); + }elseif ($batterieladezustand > $aufdasnachladen + 5) { + $this->SetValue("PowerSteps", json_encode($array_powersteps)); + $this->SetValue("In_Hystere", 0); + IPS_LogMessage("Batterie", "Solar: hystere laden abgeschlossen" ); + + ////Hysterese Ende }elseif ($batterieladezustand >= 100) { $filtered_powersteps_entladen = array_filter($array_powersteps, function ($value) use ($maxleistung) { - return $value < 0; // Tiefpass filtern + return $value <= 0; // Tiefpass filtern }); $this->SetValue("PowerSteps", json_encode($filtered_powersteps_entladen)); - }elseif ($batterieladezustand >= $aufdasnachladen) { - $this->SetValue("PowerSteps", json_encode($array_powersteps)); - - } else { + }else { $dummy_array[] = 0; $this->SetValue("PowerSteps", json_encode($dummy_array)); + IPS_LogMessage("Batterie", "Solar: Kein Fall" ); } } } diff --git a/library.json b/library.json index 6534e7d..99b50e5 100644 --- a/library.json +++ b/library.json @@ -6,7 +6,7 @@ "compatibility": { "version": "7.1" }, - "version": "1.089", + "version": "1.090", "build": 0, "date": 0 } \ No newline at end of file