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", "type": "Label",
"caption": "Konfiguration der nötigen Schaltkontakte und Nennleistungen" "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", "type": "NumberSpinner",
"name": "IdleCounterMax", "name": "IdleCounterMax",
@@ -24,8 +45,8 @@
}, },
{ {
"type": "SelectVariable", "type": "SelectVariable",
"name": "Boilertemperatur", "name": "Boilerfuehler_PT1",
"caption": "Variable für Boilertemperatur", "caption": "Variable für Boilerfühler PT1",
"test": true "test": true
}, },
{ {

View File

@@ -9,15 +9,23 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule
// Boiler spezifische Properties // Boiler spezifische Properties
$this->RegisterPropertyInteger("BoilerLeistungTeillast", 3000); $this->RegisterPropertyInteger("BoilerLeistungTeillast", 3000);
$this->RegisterPropertyInteger("BoilerLeistungVolllast", 6000); $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_Teillast", 0);
$this->RegisterPropertyInteger("Kontakt_Volllast", 0); $this->RegisterPropertyInteger("Kontakt_Volllast", 0);
$this->RegisterPropertyBoolean("Boilertemperatur_glätten", false);
// Boiler spezifische Variablen // Boiler spezifische Variablen
$this->RegisterVariableInteger("Mindesttemperatur","Mindesttemperatur","",45); $this->RegisterVariableInteger("Mindesttemperatur","Mindesttemperatur","",45);
$this->RegisterVariableInteger("Maximaltemperatur","Maximaltemperatur","",60); $this->RegisterVariableInteger("Maximaltemperatur","Maximaltemperatur","",60);
$this->RegisterVariableInteger("Legionellentemperatur","Legionellentemperatur","",65); $this->RegisterVariableInteger("Legionellentemperatur","Legionellentemperatur","",65);
$this->RegisterVariableInteger("LegioCounter", "LegioCounter", "", 0); $this->RegisterVariableInteger("LegioCounter", "LegioCounter", "", 0);
//$this->RegisterVariableInteger("Boilertemperatur", "Boilertemperatur", "", 0);
$this->RegisterVariableInteger("Boilertemperatur", "Boilertemperatur", "", 0);
// Variabeln für Kommunkation mit Manager // Variabeln für Kommunkation mit Manager
$this->RegisterVariableInteger("Sperre_Prio", "Sperre_Prio"); $this->RegisterVariableInteger("Sperre_Prio", "Sperre_Prio");
@@ -39,17 +47,25 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule
public function ApplyChanges() public function ApplyChanges()
{ {
parent::ApplyChanges(); parent::ApplyChanges();
} }
// Aktionen verarbeiten
public function RequestAction($Ident, $Value) public function RequestAction($Ident, $Value)
{ {
switch ($Ident) { switch ($Ident) {
case "SetAktuelle_Leistung": case "SetAktuelle_Leistung":
$this->SetAktuelle_Leistung($Value); $this->SetAktuelle_Leistung($Value);
break; break;
case "GetCurrentData": case "GetCurrentData":
return $this->GetCurrentData($Value);
$result = $this->GetCurrentData($Value);
return $result;
default: default:
throw new Exception("Invalid Ident"); throw new Exception("Invalid Ident");
} }
@@ -94,7 +110,50 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule
{ {
$LegioCounter = $this->GetValue("LegioCounter"); $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"); $minTemp = $this->GetValue("Mindesttemperatur");
$maxTemp = $this->GetValue("Maximaltemperatur"); $maxTemp = $this->GetValue("Maximaltemperatur");
$LegioTemp = $this->GetValue("Legionellentemperatur"); $LegioTemp = $this->GetValue("Legionellentemperatur");
@@ -124,10 +183,7 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule
if ($Peak) { if ($Peak) {
if ($boilerTemp < $minTemp) { if ($boilerTemp < $minTemp) {
$this->SetValue( $this->SetValue( "PowerSteps", json_encode([0, $teilLeistung, $vollLeistung]) );
"PowerSteps",
json_encode([0, $teilLeistung, $vollLeistung])
);
} elseif ( } elseif (
$boilerTemp < $minTemp + 5 && $boilerTemp < $minTemp + 5 &&
($AktuelleVollast || $AktuelleTeillast) ($AktuelleVollast || $AktuelleTeillast)
@@ -148,18 +204,10 @@ class Boiler_2_Stufig_Mit_Fueler extends IPSModule
) { ) {
$this->SetValue("PowerSteps", json_encode([$vollLeistung])); $this->SetValue("PowerSteps", json_encode([$vollLeistung]));
} elseif ($boilerTemp < $maxTemp - 5) { } elseif ($boilerTemp < $maxTemp - 5) {
$this->SetValue( $this->SetValue("PowerSteps", json_encode([0, $teilLeistung, $vollLeistung]));
"PowerSteps", } elseif ( $boilerTemp < $maxTemp && ($AktuelleVollast || $AktuelleTeillast)
json_encode([0, $teilLeistung, $vollLeistung])
);
} elseif (
$boilerTemp < $maxTemp &&
($AktuelleVollast || $AktuelleTeillast)
) { ) {
$this->SetValue( $this->SetValue( "PowerSteps", json_encode([0, $teilLeistung, $vollLeistung]));
"PowerSteps",
json_encode([0, $teilLeistung, $vollLeistung])
);
} else { } else {
$this->SetValue("PowerSteps", json_encode([0])); $this->SetValue("PowerSteps", json_encode([0]));
} }

View File

@@ -1,10 +1,23 @@
{ {
"elements": [ "elements": [
{ {
"type": "ValidationTextBox", "type": "Select",
"name": "IP_Adresse", "name": "Ladestation",
"caption": "IP-Adresse Go-E", "caption": "Ladestation",
"suffix": "" "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", "type": "NumberSpinner",
@@ -14,7 +27,7 @@
{ {
"type": "NumberSpinner", "type": "NumberSpinner",
"name": "MaxLeistung", "name": "MaxLeistung",
"caption": "Maximlalleistung Ladestation" "caption": "Maximalleistung Ladestation"
}, },
{ {
"type": "NumberSpinner", "type": "NumberSpinner",
@@ -24,18 +37,41 @@
{ {
"type": "NumberSpinner", "type": "NumberSpinner",
"name": "MaxLeistung_1ph", "name": "MaxLeistung_1ph",
"caption": "Maximlalleistung Ladestation 1-Phasig" "caption": "Maximalleistung Ladestation 1-Phasig"
}, },
{ {
"type": "NumberSpinner", "type": "NumberSpinner",
"name": "IdleCounterMax", "name": "IdleCounterMax",
"caption": "Zyklen zwischen zwei Leisutungsänderungen", "caption": "Zyklen zwischen zwei Leistungsänderungen",
"suffix": "" "suffix": ""
}, },
{ {
"type": "Label", "type": "ValidationTextBox",
"caption": "Aktuell wird nur Go-E ladestation unterstützt!" "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("MinLeistung_1ph", 1400);
$this->RegisterPropertyInteger("MaxLeistung_1ph", 7800); $this->RegisterPropertyInteger("MaxLeistung_1ph", 7800);
$this->RegisterPropertyString("IP_Adresse", "0.0.0.0"); $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 // Ladestationspezifische Variabeln
$this->RegisterVariableBoolean("Ladebereit", "Ladebereit", "~Switch", 1); $this->RegisterVariableBoolean("Ladebereit", "Ladebereit", "~Switch", 1);
@@ -61,8 +67,11 @@ class Ladestation_Universal extends IPSModule
} }
} }
public function SetAktuelle_Leistung(int $power) public function SetAktuelle_Leistung(int $power)
{ {
$internalPower = GetValue($this->GetIDForIdent("Aktuelle_Leistung")); $internalPower = GetValue($this->GetIDForIdent("Aktuelle_Leistung"));
// Aktuelle Leistungsvorgabe setzen // Aktuelle Leistungsvorgabe setzen
SetValue($this->GetIDForIdent("Aktuelle_Leistung"), $power); SetValue($this->GetIDForIdent("Aktuelle_Leistung"), $power);
@@ -154,11 +163,29 @@ class Ladestation_Universal extends IPSModule
$ch = curl_init(); $ch = curl_init();
// Setze die URL // Setze die URL
curl_setopt( if($this->ReadPropertyInteger("Ladestation")==2){
curl_setopt(
$ch, $ch,
CURLOPT_URL, CURLOPT_URL,
"http://" . $this->ReadPropertyString("IP_Adresse") . "/api/status" "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 // Setze die Option, die Antwort als String zurückzugeben
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
@@ -174,6 +201,7 @@ class Ladestation_Universal extends IPSModule
// Dekodiere die JSON-Antwort // Dekodiere die JSON-Antwort
$data = json_decode($response, true); $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 // Überprüfe, ob das JSON-Dekodieren erfolgreich war und der Schlüssel "car" existiert
if (json_last_error() === JSON_ERROR_NONE && isset($data["car"])) { if (json_last_error() === JSON_ERROR_NONE && isset($data["car"])) {
// Speichere den Wert von "car" in der Variable $status // 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 // Peak-Wert speichern
$this->SetValue("Peak", $Peak); $this->SetValue("Peak", $Peak);
@@ -233,9 +287,17 @@ class Ladestation_Universal extends IPSModule
public function sendPowerToStation($value) 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 // Base URL
$baseUrl =
"http://" . $this->ReadPropertyString("IP_Adresse") . "/api/set?";
IPS_LogMessage("Ladestation", "Aufgerufene ip" . $baseUrl); IPS_LogMessage("Ladestation", "Aufgerufene ip" . $baseUrl);
$value = $this->convertPowerToCurrent( $value = $this->convertPowerToCurrent(
$value, $value,
@@ -243,35 +305,124 @@ class Ladestation_Universal extends IPSModule
); );
// Initialize a cURL session // Initialize a cURL session
$ch = curl_init(); $ch = curl_init();
IPS_LogMessage("value", "nach konvertierung" . $value);
// If value is 0, make a single request // If value is 0, make a single request
if ($value == 0) { 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_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); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch); $response = curl_exec($ch);
curl_close($ch); curl_close($ch);
return $response; return $response;
}
}
}
// For value between 1 and 32, make two requests // For value between 1 and 32, make two requests
elseif ($value >= 1 && $value <= 32) { elseif ($value >= 1 && $value <= 32) {
// First request // First request
$url1 = $baseUrl . "frc=2"; if($this->ReadPropertyInteger("Ladestation")==2){
curl_setopt($ch, CURLOPT_URL, $url1); $url = $baseUrl . "frc=2";
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_URL, $url);
$response1 = curl_exec($ch); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response1 = curl_exec($ch);
// Check for errors
if (curl_errno($ch)) { // Check for errors
curl_close($ch); if (curl_errno($ch)) {
return "Error:" . curl_error($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 // 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_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); $response2 = curl_exec($ch);
IPS_LogMessage("Ladestation", "Antwort" . (curl_getinfo($ch, CURLINFO_HTTP_CODE)));
// Check for errors // Check for errors
if (curl_errno($ch)) { if (curl_errno($ch)) {
@@ -283,13 +434,17 @@ class Ladestation_Universal extends IPSModule
curl_close($ch); curl_close($ch);
// Return responses // Return responses
return [$response1, $response2]; return;
}
} }
// If value is out of range // If value is out of range
else { else {
return "Invalid value. Must be between 0 and 32."; return "Invalid value. Must be between 0 and 32.";
} }
} }
public function convertPowerToCurrent($value, $Lademodus) public function convertPowerToCurrent($value, $Lademodus)
@@ -297,57 +452,59 @@ class Ladestation_Universal extends IPSModule
if ($Lademodus == 1) { if ($Lademodus == 1) {
if ($value == 0) { if ($value == 0) {
return 0; return 0;
} elseif ($value == 4150) { } elseif ($value < 4150) {
return 0;
} elseif ($value < 4850) {
return 6; return 6;
} elseif ($value == 4850) { } elseif ($value < 5550) {
return 7; return 7;
} elseif ($value == 5550) { } elseif ($value < 6250) {
return 8; return 8;
} elseif ($value == 6250) { } elseif ($value < 6950) {
return 9; return 9;
} elseif ($value == 6950) { } elseif ($value < 7600) {
return 10; return 10;
} elseif ($value == 7600) { } elseif ($value < 8300) {
return 11; return 11;
} elseif ($value == 8300) { } elseif ($value < 9000) {
return 12; return 12;
} elseif ($value == 9000) { } elseif ($value < 9700) {
return 13; return 13;
} elseif ($value == 9700) { } elseif ($value < 10300) {
return 14; return 14;
} elseif ($value == 10300) { } elseif ($value < 11000) {
return 15; return 15;
} elseif ($value == 11000) { } elseif ($value < 11750) {
return 16; return 16;
} elseif ($value == 11750) { } elseif ($value < 12450) {
return 17; return 17;
} elseif ($value == 12450) { } elseif ($value < 13150) {
return 18; return 18;
} elseif ($value == 13150) { } elseif ($value < 13850) {
return 19; return 19;
} elseif ($value == 13850) { } elseif ($value < 14550) {
return 20; return 20;
} elseif ($value == 14550) { } elseif ($value < 15250) {
return 21; return 21;
} elseif ($value == 15250) { } elseif ($value < 15900) {
return 22; return 22;
} elseif ($value == 15900) { } elseif ($value < 16600) {
return 23; return 23;
} elseif ($value == 16600) { } elseif ($value < 17300) {
return 24; return 24;
} elseif ($value == 17300) { } elseif ($value < 18000) {
return 25; return 25;
} elseif ($value == 18000) { } elseif ($value < 18700) {
return 26; return 26;
} elseif ($value == 18700) { } elseif ($value < 19400) {
return 27; return 27;
} elseif ($value == 19400) { } elseif ($value < 20100) {
return 28; return 28;
} elseif ($value == 20100) { } elseif ($value < 20800) {
return 29; return 29;
} elseif ($value == 20800) { } elseif ($value < 21500) {
return 30; return 30;
} elseif ($value == 21500) { } elseif ($value < 22000) {
return 31; return 31;
} elseif ($value >= 22000) { } elseif ($value >= 22000) {
return 32; return 32;
@@ -356,57 +513,59 @@ class Ladestation_Universal extends IPSModule
} elseif ($Lademodus == 0) { } elseif ($Lademodus == 0) {
if ($value == 0) { if ($value == 0) {
return 0; return 0;
} elseif ($value == 1450) { } elseif ($value < 1450) {
return 0;
} elseif ($value < 1690) {
return 6; return 6;
} elseif ($value == 1690) { } elseif ($value < 1930) {
return 7; return 7;
} elseif ($value == 1930) { } elseif ($value < 2170) {
return 8; return 8;
} elseif ($value == 2170) { } elseif ($value < 2410) {
return 9; return 9;
} elseif ($value == 2410) { } elseif ($value < 2650) {
return 10; return 10;
} elseif ($value == 2650) { } elseif ($value < 2890) {
return 11; return 11;
} elseif ($value == 2890) { } elseif ($value < 3130) {
return 12; return 12;
} elseif ($value == 3130) { } elseif ($value < 3370) {
return 13; return 13;
} elseif ($value == 3370) { } elseif ($value < 3610) {
return 14; return 14;
} elseif ($value == 3610) { } elseif ($value < 3850) {
return 15; return 15;
} elseif ($value == 3850) { } elseif ($value < 4090) {
return 16; return 16;
} elseif ($value == 4090) { } elseif ($value < 4330) {
return 17; return 17;
} elseif ($value == 4330) { } elseif ($value < 4570) {
return 18; return 18;
} elseif ($value == 4570) { } elseif ($value < 4810) {
return 19; return 19;
} elseif ($value == 4810) { } elseif ($value < 5050) {
return 20; return 20;
} elseif ($value == 5050) { } elseif ($value < 5290) {
return 21; return 21;
} elseif ($value == 5290) { } elseif ($value < 5530) {
return 22; return 22;
} elseif ($value == 5530) { } elseif ($value < 5770) {
return 23; return 23;
} elseif ($value == 5770) { } elseif ($value < 6010) {
return 24; return 24;
} elseif ($value == 6010) { } elseif ($value < 6250) {
return 25; return 25;
} elseif ($value == 6250) { } elseif ($value < 6490) {
return 26; return 26;
} elseif ($value == 6490) { } elseif ($value < 6730) {
return 27; return 27;
} elseif ($value == 6730) { } elseif ($value < 6970) {
return 28; return 28;
} elseif ($value == 6970) { } elseif ($value < 7210) {
return 29; return 29;
} elseif ($value == 7210) { } elseif ($value < 7450) {
return 30; return 30;
} elseif ($value == 7450) { } elseif ($value < 7690) {
return 31; return 31;
} elseif ($value >= 7690) { } elseif ($value >= 7690) {
return 32; return 32;
@@ -489,5 +648,6 @@ class Ladestation_Universal extends IPSModule
return $result; return $result;
} }
} }
?> ?>

View File

@@ -189,8 +189,7 @@ class Manager extends IPSModule
$instanceID = $entry["InstanceID"]; $instanceID = $entry["InstanceID"];
$minPowerStep = min($entry["PowerSteps"]); $minPowerStep = min($entry["PowerSteps"]);
IPS_RequestAction($instanceID,"SetAktuelle_Leistung",$minPowerStep IPS_RequestAction($instanceID,"SetAktuelle_Leistung",$minPowerStep);
);
$remainingPower -= $entry["Aktuelle_Leistung"]; $remainingPower -= $entry["Aktuelle_Leistung"];
} }
} }

View File

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