Auf Testversion gebracht, V1.0
This commit is contained in:
0
Batterie/README.md
Normal file
0
Batterie/README.md
Normal file
52
Batterie/form.json
Normal file
52
Batterie/form.json
Normal 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
12
Batterie/module.json
Normal 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
208
Batterie/module.php
Normal 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);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
||||||
@@ -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
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -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]));
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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"
|
||||||
}
|
}
|
||||||
|
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
@@ -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;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
?>
|
?>
|
||||||
|
|||||||
@@ -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"];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -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
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user