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

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