Auf Testversion gebracht, V1.0

This commit is contained in:
2025-01-20 14:45:57 +01:00
parent 09fe380580
commit 278fafeca1
10 changed files with 642 additions and 105 deletions

0
Batterie/README.md Normal file
View File

52
Batterie/form.json Normal file
View File

@@ -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
}
]
}

12
Batterie/module.json Normal file
View File

@@ -0,0 +1,12 @@
{
"id": "{F6C6A4B2-C5BB-4D94-2629-01D8B0D4CAF5}",
"name": "Batterie",
"type": 3,
"vendor": "Belevo AG",
"aliases": [],
"parentRequirements": [],
"childRequirements": [],
"implemented": [],
"prefix": "GEF",
"url": ""
}

208
Batterie/module.php Normal file
View File

@@ -0,0 +1,208 @@
<?php
class Batterie extends IPSModule
{
public function Create()
{
parent::Create();
// Batterie spezifische Eigenschaften
$this->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);
}
}
}
?>

View File

@@ -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
},
{

View File

@@ -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]));
}

View File

@@ -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"
}
]
}
}

View File

@@ -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;
}
}
?>

View File

@@ -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"];
}
}

View File

@@ -6,7 +6,8 @@
"compatibility": {
"version": "7.1"
},
"version": "0.172",
"version": "0.268",
"build": 0,
"date": 0
}