diff --git a/Batterie/README.md b/Batterie/README.md new file mode 100644 index 0000000..e69de29 diff --git a/Batterie/form.json b/Batterie/form.json new file mode 100644 index 0000000..45af52e --- /dev/null +++ b/Batterie/form.json @@ -0,0 +1,52 @@ +{ + "elements": [ + { + "type": "Label", + "caption": "Konfiguration der Batterie für Peakshaving" + }, + { + "type": "NumberSpinner", + "name": "IdleCounterMax", + "caption": "Zyklen zwischen zwei Leisutungsänderungen", + "suffix": "" + }, + { + "type": "NumberSpinner", + "name": "MaxBatterieleistung", + "caption": "Maximale Batterieleistung", + "suffix": "" + }, + { + "type": "NumberSpinner", + "name": "AufdasNachladen", + "caption": "Auf so viel Prozent nachladen", + "suffix": "" + + }, + { + "type": "NumberSpinner", + "name": "MinimumEntladen", + "caption": "Minimum des Batterieladezustand", + "suffix": "" + }, + { + "type": "SelectVariable", + "name": "Entladestrom", + "caption": "Entladestrom", + "test": true + }, + { + "type": "SelectVariable", + "name": "Ladestrom", + "caption": "Ladestrom", + "test": true + }, + { + "type": "SelectVariable", + "name": "Batterieladezustand", + "caption": "Batterieladezustand", + "test": true + } + + ] +} diff --git a/Batterie/module.json b/Batterie/module.json new file mode 100644 index 0000000..468e0f8 --- /dev/null +++ b/Batterie/module.json @@ -0,0 +1,12 @@ +{ + "id": "{F6C6A4B2-C5BB-4D94-2629-01D8B0D4CAF5}", + "name": "Batterie", + "type": 3, + "vendor": "Belevo AG", + "aliases": [], + "parentRequirements": [], + "childRequirements": [], + "implemented": [], + "prefix": "GEF", + "url": "" +} \ No newline at end of file diff --git a/Batterie/module.php b/Batterie/module.php new file mode 100644 index 0000000..f79d789 --- /dev/null +++ b/Batterie/module.php @@ -0,0 +1,208 @@ +RegisterPropertyInteger("MaxBatterieleistung", 0); + $this->RegisterPropertyInteger("Batteriespannung", 50); + $this->RegisterPropertyInteger("AufdasNachladen",0); + $this->RegisterPropertyInteger("MinimumEntladen",0); + $this->RegisterPropertyInteger("Batterieladezustand",0); + $this->RegisterPropertyInteger("Ladestrom", 0); + $this->RegisterPropertyInteger("Entladestrom", 0); + + // Variabeln für Kommunkation mit Manager + $this->RegisterVariableProfile("Batterie.Leistung", 1, "W"); + $this->RegisterVariableProfile("Batterie.Strom", 1, "A"); + $this->RegisterVariableInteger("Aktuelle_Leistung", "Aktuelle_Leistung", "Batterie.Leistung", 0); + $this->RegisterVariableString("PowerSteps", "PowerSteps"); + $this->RegisterVariableBoolean("Idle", "Idle", "", 0); + $this->RegisterVariableInteger("Sperre_Prio", "Sperre_Prio"); + $this->RegisterVariableInteger("PV_Prio", "PV_Prio"); + $this->RegisterVariableFloat("Bezogene_Energie", "Bezogene_Energie", "Batterie.Leistung", 0); + + // Hilfsvariabeln für Idle zustand + $this->RegisterPropertyInteger("IdleCounterMax", 2); + $this->RegisterVariableInteger("IdleCounter", "IdleCounter", "", 0); + $this->SetValue("IdleCounter", 0); + + // Initialisiere Idle + $this->SetValue("Idle", true); + } + + public function ApplyChanges() + { + parent::ApplyChanges(); + + + } + + private function GeneratePowerSteps() +{ + $maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung"); + $array_powersteps = []; + $stepSize = 250; // Schrittgröße + + // Erstellen der PowerSteps + for ($i = 0; $i <= $maxleistung * 2; $i += $stepSize) { + $array_powersteps[] = $i; + } + + return $array_powersteps; +} + +private function RegisterVariableProfile(string $name, int $type, string $suffix) +{ + if (!IPS_VariableProfileExists($name)) { + IPS_CreateVariableProfile($name, $type); + IPS_SetVariableProfileText($name, "", $suffix); + } +} + + public function RequestAction($Ident, $Value) + { + + switch ($Ident) { + case "SetAktuelle_Leistung": + $this->SetAktuelle_Leistung($Value); + break; + case "GetCurrentData": + return $this->GetCurrentData($Value); + default: + throw new Exception("Invalid Ident"); + } + } + + public function SetAktuelle_Leistung(int $power) + { + $batterieladezustand = $this->ReadPropertyInteger("Batterieladezustand"); // Als Property gelesen + $maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung"); // Als Property gelesen + $spannung = $this->ReadPropertyInteger("Batteriespannung"); // Spannung ebenfalls als Property + $ladestrom = $this->ReadPropertyInteger("Ladestrom"); + $entladestrom = $this->ReadPropertyInteger("Entladestrom"); + + IPS_LogMessage("Batterie", "power: " . $power); + + if ($spannung <= 0) { + IPS_LogMessage("Batterie", "Fehler: Batteriespannung ist 0 oder ungültig."); + return; + } + // Batterie entladen oder laden basierend auf der Leistung + if ($power > $maxleistung) { + $ladestrom = ($power - $maxleistung) / $spannung; + $this->SetValue("Ladestrom", $ladestrom); + $this->SetValue("Entladestrom", 0); + //IPS_LogMessage("Batterie", "Ladestrom: " . $ladestrom); + } else { + $entladestrom = $power / $spannung; + $this->SetValue("Entladestrom", $entladestrom); + $this->SetValue("Ladestrom", 0); + //IPS_LogMessage("Batterie", "Entladestrom: " . $entladestrom); + } + + // Prüfe auf Änderung der Leistung im Vergleich zur letzten Einstellung + $lastPower = GetValue($this->GetIDForIdent("Aktuelle_Leistung")); + if ($power != $lastPower) { + $this->SetValue("Idle", false); + $this->SetValue( + "IdleCounter", + $this->ReadPropertyInteger("IdleCounterMax") + ); + } + + // Setze die neue aktuelle Leistung + $this->SetValue("Aktuelle_Leistung", $power); + + // IdleCounter verarbeiten + $this->ProcessIdleCounter(); + } + + + public function GetCurrentData(bool $Peak) + { + IPS_LogMessage("Batterie", "peak: " . ($Peak ? "true" : "false")); + + $array_powersteps = $this->GeneratePowerSteps(); + $aufdasnachladen = $this->ReadPropertyInteger("AufdasNachladen"); + $minimumentladen = $this->ReadPropertyInteger("MinimumEntladen"); + $batterieladezustand = GetValue($this->ReadPropertyInteger("Batterieladezustand")); + + $maxleistung = $this->ReadPropertyInteger("MaxBatterieleistung"); + + + if ($Peak) { + if ($batterieladezustand <= $minimumentladen) { + $filtered_powersteps = array_filter($array_powersteps, function ($value) use ($maxleistung) { + return $value > $maxleistung; // Hochpass filtern + }); + $filtered_powersteps_laden = array_values($filtered_powersteps); + $this->SetValue("PowerSteps", json_encode($filtered_powersteps_laden)); + IPS_LogMessage("Batterie", "Batterie laden: "); + + } elseif ($batterieladezustand >= $aufdasnachladen) { + $filtered_powersteps_entladen = array_filter($array_powersteps, function ($value) use ($maxleistung) { + return $value < $maxleistung; // Tiefpass filtern + }); + $this->SetValue("PowerSteps", json_encode($filtered_powersteps_entladen)); + IPS_LogMessage("Batterie", "Batterie entladen: " ); + + } elseif ($batterieladezustand < $aufdasnachladen && $batterieladezustand > $minimumentladen) { + $this->SetValue("PowerSteps", json_encode($array_powersteps)); + IPS_LogMessage("Batterie", "In Hysterese: "); + + } else { + $this->SetValue("PowerSteps", json_encode($array_powersteps[0])); + IPS_LogMessage("Batterie", "Weder noch: "); + } + + } else { // Solar + + $filtered_powersteps_solar = array_filter($array_powersteps, function ($value) use ($maxleistung) { + return $value > $maxleistung; // Hochpass filtern + }); + + $this->SetValue("PowerSteps", json_encode($filtered_powersteps_solar)); + IPS_LogMessage("Batterie", "Solarmodus"); + } + } + + + + private function CheckIdle($power) + { + $lastpower = GetValue("Aktuelle_Leistung"); + if ($lastpower != GetValue("Aktuelle_Leistung")) { + $this->SetValue("Idle", false); + $this->SetValue( + "IdleCounter", + $this->ReadPropertyInteger("IdleCounterMax") + ); + } + // IdleCounter auslesen und verarbeiten + $idleCounter = $this->GetValue("IdleCounter"); + if ($idleCounter > 0) { + $this->SetValue("Idle", false); + $this->SetValue("IdleCounter", $idleCounter - 1); + } else { + $this->SetValue("Idle", true); + } + } + + + private function ProcessIdleCounter() + { + // IdleCounter auslesen und verarbeiten + $idleCounter = $this->GetValue("IdleCounter"); + if ($idleCounter > 0) { + $this->SetValue("Idle", false); + $this->SetValue("IdleCounter", $idleCounter - 1); + } else { + $this->SetValue("Idle", true); + } + } +} +?> \ No newline at end of file diff --git a/Boiler_2_Stufig_Mit_Fueler/form.json b/Boiler_2_Stufig_Mit_Fueler/form.json index d9d8436..d6bd2a4 100644 --- a/Boiler_2_Stufig_Mit_Fueler/form.json +++ b/Boiler_2_Stufig_Mit_Fueler/form.json @@ -4,6 +4,27 @@ "type": "Label", "caption": "Konfiguration der nötigen Schaltkontakte und Nennleistungen" }, + { + "type":"Select", + "name":"Boilertemperatur_glätten", + "caption":"Boilertemperatur glätten Ja oder Nein", + "options":[ + { + "caption":"Ja", + "value":true + }, + { + "caption":"Nein", + "value":false + } + ] + }, + { + "type": "NumberSpinner", + "name": "ZeitKonstante", + "caption": "Zeit Konstante", + "suffix": "" + }, { "type": "NumberSpinner", "name": "IdleCounterMax", @@ -24,8 +45,8 @@ }, { "type": "SelectVariable", - "name": "Boilertemperatur", - "caption": "Variable für Boilertemperatur", + "name": "Boilerfuehler_PT1", + "caption": "Variable für Boilerfühler PT1", "test": true }, { diff --git a/Boiler_2_Stufig_Mit_Fueler/module.php b/Boiler_2_Stufig_Mit_Fueler/module.php index 742bbc8..cf08493 100644 --- a/Boiler_2_Stufig_Mit_Fueler/module.php +++ b/Boiler_2_Stufig_Mit_Fueler/module.php @@ -9,15 +9,23 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule // Boiler spezifische Properties $this->RegisterPropertyInteger("BoilerLeistungTeillast", 3000); $this->RegisterPropertyInteger("BoilerLeistungVolllast", 6000); - $this->RegisterPropertyInteger("Boilertemperatur", 0); + $this->RegisterPropertyInteger("ZeitKonstante", 120); + $this->RegisterPropertyInteger("Boilerfuehler_PT1", 0); $this->RegisterPropertyInteger("Kontakt_Teillast", 0); $this->RegisterPropertyInteger("Kontakt_Volllast", 0); + $this->RegisterPropertyBoolean("Boilertemperatur_glätten", false); + + // Boiler spezifische Variablen + $this->RegisterVariableInteger("Mindesttemperatur","Mindesttemperatur","",45); $this->RegisterVariableInteger("Maximaltemperatur","Maximaltemperatur","",60); $this->RegisterVariableInteger("Legionellentemperatur","Legionellentemperatur","",65); $this->RegisterVariableInteger("LegioCounter", "LegioCounter", "", 0); + //$this->RegisterVariableInteger("Boilertemperatur", "Boilertemperatur", "", 0); + $this->RegisterVariableInteger("Boilertemperatur", "Boilertemperatur", "", 0); + // Variabeln für Kommunkation mit Manager $this->RegisterVariableInteger("Sperre_Prio", "Sperre_Prio"); @@ -39,17 +47,25 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule public function ApplyChanges() { parent::ApplyChanges(); + } - // Aktionen verarbeiten public function RequestAction($Ident, $Value) { + + switch ($Ident) { + case "SetAktuelle_Leistung": + $this->SetAktuelle_Leistung($Value); break; + case "GetCurrentData": - return $this->GetCurrentData($Value); + + $result = $this->GetCurrentData($Value); + return $result; + default: throw new Exception("Invalid Ident"); } @@ -94,7 +110,50 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule { $LegioCounter = $this->GetValue("LegioCounter"); - $boilerTemp = GetValue($this->ReadPropertyInteger("Boilertemperatur")); + + $boilertemperatur_glätten = $this->ReadPropertyBoolean("Boilertemperatur_glätten"); + + if ($boilertemperatur_glätten) { + // Wenn Glättung aktiviert ist, führe das Glätten durch + $boilerFuehlerPT1ID = $this->ReadPropertyInteger("Boilerfuehler_PT1"); + + if (IPS_VariableExists($boilerFuehlerPT1ID)) { + $boilerPT1 = GetValue($boilerFuehlerPT1ID); + } else { + $boilerPT1 = 0.0; // Standardwert + } + + $boilerTempID = $this->GetIDForIdent("Boilertemperatur"); + if (IPS_VariableExists($boilerTempID)) { + $boilerTemp = $this->GetValue("Boilertemperatur"); + } else { + $boilerTemp = 0.0; // Standardwert + } + + // PT + $time_constant= $this->ReadPropertyInteger("ZeitKonstante"); + $delta_t = 30; // Zeitdifferenz zwischen den Messungen (30 Sekunden) + $alpha = $delta_t / ($time_constant + $delta_t); + $newBoilerTemp = $boilerTemp + $alpha * ($boilerPT1 - $boilerTemp); + $this->SetValue("Boilertemperatur", $newBoilerTemp); + } else { + // Wenn Glättung nicht aktiviert ist, setze die Boilertemperatur direkt auf den Wert des Boilerfühlers + $boilerFuehlerPT1ID = $this->ReadPropertyInteger("Boilerfuehler_PT1"); + + if (IPS_VariableExists($boilerFuehlerPT1ID)) { + $boilerPT1 = GetValue($boilerFuehlerPT1ID); + } else { + $boilerPT1 = 0.0; // Standardwert + } + + // Setze Boilertemperatur direkt auf den Wert des Boilerfühlers + $this->SetValue("Boilertemperatur", $boilerPT1); + } + + + + + $minTemp = $this->GetValue("Mindesttemperatur"); $maxTemp = $this->GetValue("Maximaltemperatur"); $LegioTemp = $this->GetValue("Legionellentemperatur"); @@ -124,10 +183,7 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule if ($Peak) { if ($boilerTemp < $minTemp) { - $this->SetValue( - "PowerSteps", - json_encode([0, $teilLeistung, $vollLeistung]) - ); + $this->SetValue( "PowerSteps", json_encode([0, $teilLeistung, $vollLeistung]) ); } elseif ( $boilerTemp < $minTemp + 5 && ($AktuelleVollast || $AktuelleTeillast) @@ -148,18 +204,10 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule ) { $this->SetValue("PowerSteps", json_encode([$vollLeistung])); } elseif ($boilerTemp < $maxTemp - 5) { - $this->SetValue( - "PowerSteps", - json_encode([0, $teilLeistung, $vollLeistung]) - ); - } elseif ( - $boilerTemp < $maxTemp && - ($AktuelleVollast || $AktuelleTeillast) + $this->SetValue("PowerSteps", json_encode([0, $teilLeistung, $vollLeistung])); + } elseif ( $boilerTemp < $maxTemp && ($AktuelleVollast || $AktuelleTeillast) ) { - $this->SetValue( - "PowerSteps", - json_encode([0, $teilLeistung, $vollLeistung]) - ); + $this->SetValue( "PowerSteps", json_encode([0, $teilLeistung, $vollLeistung])); } else { $this->SetValue("PowerSteps", json_encode([0])); } diff --git a/Ladestation_Universal/form.json b/Ladestation_Universal/form.json index f58ea37..96d720b 100644 --- a/Ladestation_Universal/form.json +++ b/Ladestation_Universal/form.json @@ -1,10 +1,23 @@ { "elements": [ { - "type": "ValidationTextBox", - "name": "IP_Adresse", - "caption": "IP-Adresse Go-E", - "suffix": "" + "type": "Select", + "name": "Ladestation", + "caption": "Ladestation", + "options": [ + { + "caption": "Go-E Wallbox (Alte Version)", + "value": 1 + }, + { + "caption": "Go-E Germini / Germini Flex", + "value": 2 + }, + { + "caption": "Smart-Me Pico", + "value": 3 + } + ] }, { "type": "NumberSpinner", @@ -14,7 +27,7 @@ { "type": "NumberSpinner", "name": "MaxLeistung", - "caption": "Maximlalleistung Ladestation" + "caption": "Maximalleistung Ladestation" }, { "type": "NumberSpinner", @@ -24,18 +37,41 @@ { "type": "NumberSpinner", "name": "MaxLeistung_1ph", - "caption": "Maximlalleistung Ladestation 1-Phasig" + "caption": "Maximalleistung Ladestation 1-Phasig" }, { "type": "NumberSpinner", "name": "IdleCounterMax", - "caption": "Zyklen zwischen zwei Leisutungsänderungen", + "caption": "Zyklen zwischen zwei Leistungsänderungen", "suffix": "" }, - { - "type": "Label", - "caption": "Aktuell wird nur Go-E ladestation unterstützt!" + "type": "ValidationTextBox", + "name": "IP_Adresse", + "caption": "IP-Adresse Ladestation" + }, + { + "type": "ValidationTextBox", + "name": "ID", + "caption": "ID" + + }, + { + "type": "ValidationTextBox", + "name": "Seriennummer", + "caption": "Seriennummer" + + }, + { + "type": "ValidationTextBox", + "name": "Username", + "caption": "Username" + + }, + { "type": "PasswordTextBox", + "name": "Password", + "caption": "Passwort" } + ] -} +} \ No newline at end of file diff --git a/Ladestation_Universal/module.php b/Ladestation_Universal/module.php index 9c36850..2f1edb3 100644 --- a/Ladestation_Universal/module.php +++ b/Ladestation_Universal/module.php @@ -12,6 +12,12 @@ class Ladestation_Universal extends IPSModule $this->RegisterPropertyInteger("MinLeistung_1ph", 1400); $this->RegisterPropertyInteger("MaxLeistung_1ph", 7800); $this->RegisterPropertyString("IP_Adresse", "0.0.0.0"); + $this->RegisterPropertyInteger("Ladestation", 2); + $this->RegisterPropertyString("ID", ""); + $this->RegisterPropertyString("Seriennummer", ""); + $this->RegisterPropertyString("Username", ""); + $this->RegisterPropertyString("Password", ""); + // Ladestationspezifische Variabeln $this->RegisterVariableBoolean("Ladebereit", "Ladebereit", "~Switch", 1); @@ -61,8 +67,11 @@ class Ladestation_Universal extends IPSModule } } + + public function SetAktuelle_Leistung(int $power) { + $internalPower = GetValue($this->GetIDForIdent("Aktuelle_Leistung")); // Aktuelle Leistungsvorgabe setzen SetValue($this->GetIDForIdent("Aktuelle_Leistung"), $power); @@ -154,11 +163,29 @@ class Ladestation_Universal extends IPSModule $ch = curl_init(); // Setze die URL - curl_setopt( + if($this->ReadPropertyInteger("Ladestation")==2){ + curl_setopt( $ch, CURLOPT_URL, "http://" . $this->ReadPropertyString("IP_Adresse") . "/api/status" - ); + ); + }elseif($this->ReadPropertyInteger("Ladestation")==1){ + curl_setopt( + $ch, + CURLOPT_URL, + "http://" . $this->ReadPropertyString("IP_Adresse") . "/mqtt?payload=" + ); + } + elseif($this->ReadPropertyInteger("Ladestation")==3){ + curl_setopt( + $ch, + CURLOPT_URL, + "https://api.smart-me.com/pico/charging/". $this->ReadPropertyString("ID") + ); + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + curl_setopt($ch, CURLOPT_USERPWD, $this->ReadPropertyString("Username") . ":" . $this->ReadPropertyString("Password")); + } + // Setze die Option, die Antwort als String zurückzugeben curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); @@ -174,6 +201,7 @@ class Ladestation_Universal extends IPSModule // Dekodiere die JSON-Antwort $data = json_decode($response, true); + if($this->ReadPropertyInteger("Ladestation")==2||$this->ReadPropertyInteger("Ladestation")==1){ // Überprüfe, ob das JSON-Dekodieren erfolgreich war und der Schlüssel "car" existiert if (json_last_error() === JSON_ERROR_NONE && isset($data["car"])) { // Speichere den Wert von "car" in der Variable $status @@ -192,7 +220,33 @@ class Ladestation_Universal extends IPSModule } } } + if($this->ReadPropertyInteger("Ladestation")==3){ + // Überprüfe, ob das JSON-Dekodieren erfolgreich war und der Schlüssel "car" existiert + if (json_last_error() === JSON_ERROR_NONE && isset($data["State"])) { + // Speichere den Wert von "car" in der Variable $status + SetValue( + $this->GetIDForIdent("Ladeleistung_Effektiv"), + round($data["ActiveChargingPower"]*1000) + ); + + SetValue($this->GetIDForIdent("Fahrzeugstatus"), $data["State"]); + + if($data["MaxAllowedChargingCurrent"]>0 && $data["State"] != 1){ + if ($data["ActiveChargingPower"]/$data["MaxAllowedChargingCurrent"] > 0.4/* && $data["State"] != 1*/) { + SetValue($this->GetIDForIdent("Lademodus"), 1); + } elseif ($data["State"] != 1) { + SetValue($this->GetIDForIdent("Lademodus"), 0); + } + }else{ + //SetValue($this->GetIDForIdent("Lademodus"), 1); + + } + } + } + + } + // Peak-Wert speichern $this->SetValue("Peak", $Peak); @@ -233,9 +287,17 @@ class Ladestation_Universal extends IPSModule public function sendPowerToStation($value) { + IPS_LogMessage("value", "bei sendpower" . $value); + + if($this->ReadPropertyInteger("Ladestation")==2){ + $baseUrl ="http://" . $this->ReadPropertyString("IP_Adresse") . "/api/set?"; + }elseif($this->ReadPropertyInteger("Ladestation")==1){ + $baseUrl ="http://" . $this->ReadPropertyString("IP_Adresse") . "/mqtt?payload="; + }elseif($this->ReadPropertyInteger("Ladestation")==3){ + $baseUrl ="https://api.smart-me.com/pico/loadmanagementgroup/current/" . $this->ReadPropertyString("Seriennummer") . "?current="; + } // Base URL - $baseUrl = - "http://" . $this->ReadPropertyString("IP_Adresse") . "/api/set?"; + IPS_LogMessage("Ladestation", "Aufgerufene ip" . $baseUrl); $value = $this->convertPowerToCurrent( $value, @@ -243,35 +305,124 @@ class Ladestation_Universal extends IPSModule ); // Initialize a cURL session $ch = curl_init(); + IPS_LogMessage("value", "nach konvertierung" . $value); // If value is 0, make a single request if ($value == 0) { - $url = $baseUrl . "frc=1"; + if($this->ReadPropertyInteger("Ladestation")==2){ + $url = $baseUrl . "frc=1"; + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($ch); + curl_close($ch); + return $response; + + }elseif($this->ReadPropertyInteger("Ladestation")==1){ + $url = $baseUrl . "alw=0"; + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response = curl_exec($ch); + curl_close($ch); + return $response; + + }elseif($this->ReadPropertyInteger("Ladestation")==3){ + $url = $baseUrl . "0"; curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + curl_setopt($ch, CURLOPT_USERPWD, $this->ReadPropertyString("Username") . ":" . $this->ReadPropertyString("Password")); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); $response = curl_exec($ch); curl_close($ch); return $response; - } + } + + + } // For value between 1 and 32, make two requests elseif ($value >= 1 && $value <= 32) { // First request - $url1 = $baseUrl . "frc=2"; - curl_setopt($ch, CURLOPT_URL, $url1); - curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); - $response1 = curl_exec($ch); - - // Check for errors - if (curl_errno($ch)) { - curl_close($ch); - return "Error:" . curl_error($ch); - } + if($this->ReadPropertyInteger("Ladestation")==2){ + $url = $baseUrl . "frc=2"; + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response1 = curl_exec($ch); + + // Check for errors + if (curl_errno($ch)) { + curl_close($ch); + return "Error:" . curl_error($ch); + } + }elseif($this->ReadPropertyInteger("Ladestation")==1){ + $url = $baseUrl . "alw=1"; + curl_setopt($ch, CURLOPT_URL, $url); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + $response1 = curl_exec($ch); + + // Check for errors + if (curl_errno($ch)) { + curl_close($ch); + return "Error:" . curl_error($ch); + } + + }elseif($this->ReadPropertyInteger("Ladestation")==3){ + // Nichts zu tun für Smart-Me station +} + // Second request - $url2 = $baseUrl . "amp=$value"; + + + if($this->ReadPropertyInteger("Ladestation")==2){ + $url2 = $baseUrl . "amp=$value"; + curl_setopt($ch, CURLOPT_URL, $url2); + $response2 = curl_exec($ch); + + // Check for errors + if (curl_errno($ch)) { + curl_close($ch); + return "Error:" . curl_error($ch); + } + + // Close cURL session + curl_close($ch); + + // Return responses + return ; + }elseif($this->ReadPropertyInteger("Ladestation")==1){ + $url2 = $baseUrl . "amp=$value"; + curl_setopt($ch, CURLOPT_URL, $url2); + $response2 = curl_exec($ch); + + // Check for errors + if (curl_errno($ch)) { + curl_close($ch); + return "Error:" . curl_error($ch); + } + + // Close cURL session + curl_close($ch); + + // Return responses + return; + + } + elseif($this->ReadPropertyInteger("Ladestation")==3){ + IPS_LogMessage("value", "value ist " . $value); + + $value2 = $value * 1000; + IPS_LogMessage("value", "value2 ist " . $value2); + + $url2 = $baseUrl . $value2; + IPS_LogMessage("Ladestation", "Aufgerufene ip" . $url2); + curl_setopt($ch, CURLOPT_URL, $url2); + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_BASIC); + curl_setopt($ch, CURLOPT_USERPWD, $this->ReadPropertyString("Username") . ":" . $this->ReadPropertyString("Password")); $response2 = curl_exec($ch); + IPS_LogMessage("Ladestation", "Antwort" . (curl_getinfo($ch, CURLINFO_HTTP_CODE))); // Check for errors if (curl_errno($ch)) { @@ -283,13 +434,17 @@ class Ladestation_Universal extends IPSModule curl_close($ch); // Return responses - return [$response1, $response2]; + return; + + } + } // If value is out of range else { return "Invalid value. Must be between 0 and 32."; } + } public function convertPowerToCurrent($value, $Lademodus) @@ -297,57 +452,59 @@ class Ladestation_Universal extends IPSModule if ($Lademodus == 1) { if ($value == 0) { return 0; - } elseif ($value == 4150) { + } elseif ($value < 4150) { + return 0; + } elseif ($value < 4850) { return 6; - } elseif ($value == 4850) { + } elseif ($value < 5550) { return 7; - } elseif ($value == 5550) { + } elseif ($value < 6250) { return 8; - } elseif ($value == 6250) { + } elseif ($value < 6950) { return 9; - } elseif ($value == 6950) { + } elseif ($value < 7600) { return 10; - } elseif ($value == 7600) { + } elseif ($value < 8300) { return 11; - } elseif ($value == 8300) { + } elseif ($value < 9000) { return 12; - } elseif ($value == 9000) { + } elseif ($value < 9700) { return 13; - } elseif ($value == 9700) { + } elseif ($value < 10300) { return 14; - } elseif ($value == 10300) { + } elseif ($value < 11000) { return 15; - } elseif ($value == 11000) { + } elseif ($value < 11750) { return 16; - } elseif ($value == 11750) { + } elseif ($value < 12450) { return 17; - } elseif ($value == 12450) { + } elseif ($value < 13150) { return 18; - } elseif ($value == 13150) { + } elseif ($value < 13850) { return 19; - } elseif ($value == 13850) { + } elseif ($value < 14550) { return 20; - } elseif ($value == 14550) { + } elseif ($value < 15250) { return 21; - } elseif ($value == 15250) { + } elseif ($value < 15900) { return 22; - } elseif ($value == 15900) { + } elseif ($value < 16600) { return 23; - } elseif ($value == 16600) { + } elseif ($value < 17300) { return 24; - } elseif ($value == 17300) { + } elseif ($value < 18000) { return 25; - } elseif ($value == 18000) { + } elseif ($value < 18700) { return 26; - } elseif ($value == 18700) { + } elseif ($value < 19400) { return 27; - } elseif ($value == 19400) { + } elseif ($value < 20100) { return 28; - } elseif ($value == 20100) { + } elseif ($value < 20800) { return 29; - } elseif ($value == 20800) { + } elseif ($value < 21500) { return 30; - } elseif ($value == 21500) { + } elseif ($value < 22000) { return 31; } elseif ($value >= 22000) { return 32; @@ -356,57 +513,59 @@ class Ladestation_Universal extends IPSModule } elseif ($Lademodus == 0) { if ($value == 0) { return 0; - } elseif ($value == 1450) { + } elseif ($value < 1450) { + return 0; + } elseif ($value < 1690) { return 6; - } elseif ($value == 1690) { + } elseif ($value < 1930) { return 7; - } elseif ($value == 1930) { + } elseif ($value < 2170) { return 8; - } elseif ($value == 2170) { + } elseif ($value < 2410) { return 9; - } elseif ($value == 2410) { + } elseif ($value < 2650) { return 10; - } elseif ($value == 2650) { + } elseif ($value < 2890) { return 11; - } elseif ($value == 2890) { + } elseif ($value < 3130) { return 12; - } elseif ($value == 3130) { + } elseif ($value < 3370) { return 13; - } elseif ($value == 3370) { + } elseif ($value < 3610) { return 14; - } elseif ($value == 3610) { + } elseif ($value < 3850) { return 15; - } elseif ($value == 3850) { + } elseif ($value < 4090) { return 16; - } elseif ($value == 4090) { + } elseif ($value < 4330) { return 17; - } elseif ($value == 4330) { + } elseif ($value < 4570) { return 18; - } elseif ($value == 4570) { + } elseif ($value < 4810) { return 19; - } elseif ($value == 4810) { + } elseif ($value < 5050) { return 20; - } elseif ($value == 5050) { + } elseif ($value < 5290) { return 21; - } elseif ($value == 5290) { + } elseif ($value < 5530) { return 22; - } elseif ($value == 5530) { + } elseif ($value < 5770) { return 23; - } elseif ($value == 5770) { + } elseif ($value < 6010) { return 24; - } elseif ($value == 6010) { + } elseif ($value < 6250) { return 25; - } elseif ($value == 6250) { + } elseif ($value < 6490) { return 26; - } elseif ($value == 6490) { + } elseif ($value < 6730) { return 27; - } elseif ($value == 6730) { + } elseif ($value < 6970) { return 28; - } elseif ($value == 6970) { + } elseif ($value < 7210) { return 29; - } elseif ($value == 7210) { + } elseif ($value < 7450) { return 30; - } elseif ($value == 7450) { + } elseif ($value < 7690) { return 31; } elseif ($value >= 7690) { return 32; @@ -489,5 +648,6 @@ class Ladestation_Universal extends IPSModule return $result; } + } ?> diff --git a/Manager/module.php b/Manager/module.php index 360c54b..053d582 100644 --- a/Manager/module.php +++ b/Manager/module.php @@ -189,8 +189,7 @@ class Manager extends IPSModule $instanceID = $entry["InstanceID"]; $minPowerStep = min($entry["PowerSteps"]); - IPS_RequestAction($instanceID,"SetAktuelle_Leistung",$minPowerStep - ); + IPS_RequestAction($instanceID,"SetAktuelle_Leistung",$minPowerStep); $remainingPower -= $entry["Aktuelle_Leistung"]; } } diff --git a/library.json b/library.json index 910ffee..3d8a4c1 100644 --- a/library.json +++ b/library.json @@ -6,7 +6,8 @@ "compatibility": { "version": "7.1" }, - "version": "0.172", + "version": "0.268", + "build": 0, "date": 0 } \ No newline at end of file