Hi Zusammen,
ich hatte das mit meiner P20 auch lange super am Laufen, allerdings kommen die UDP Pakete für die Anfrage „report 2“ und „report 3“ nicht mehr beim IPS an. Die Statusänderungen, wie Kabel eingesteckt, abgezogen, etc. funktioniert aber weiterhin ohne Probleme.
Ich bin mir nicht sicher ob es vielleicht mit dem Umzug von meinem Raspberry PI in eine Virtuelle Ubuntu Installation zusammenhängt.
Unter welchem OS habt Ihr das IPS laufen?
meine Scripte, falls es jemanden interessiert, sehen wie folgt aus:
Trigger:
<?
USCK_SendText(39479 /*[UDP Socket - Wallbox]*/, "report 2");
IPS_Sleep(1000);
USCK_SendText(39479 /*[UDP Socket - Wallbox]*/, "report 3");
?>
Auswertescript:
<?
// USCK_SendText(39479 /*[UDP Socket - Wallbox]*/, "report 2");
if ($_IPS['SENDER'] == "RegisterVariable") // über Register Var ausgeführt
{
$Data = RegVar_GetBuffer($_IPS['INSTANCE']); // im Puffer der Instanz vorhandene Daten in $data kopieren
$Data .= $_IPS['VALUE']; // neu empfangene Daten an $data anhängen
$CRLF = ",
";
if (strpos($Data, $CRLF)) // wenn das Trennzeichen CRLF in $data gefunden worden ist
{
$DataSets = explode($CRLF, $Data); // $data in durch CRLF separierte Datensätze zerlegen
for ($i = 0; $i < count($DataSets) - 1; $i++) // alle nicht durch CRLF terminierten Datensätze ausgeben
{
setValue(49276 /*[Scripts & Co\Wallbox xt]*/, $DataSets[$i]);
$DataSets[$i]=str_replace("\"", "", $DataSets[$i]);
$VarVal = explode(': ', $DataSets[$i]); // InVariable und Wert trennen
for ($k = 0; $k < count($VarVal) - 1; $k++){
switch ($VarVal[$k]){
case "State": SetValueifChanged(11893 /*[Scripts & Co\Wallbox\State]*/,(int)$VarVal[$k+1]);
break;
case "Plug": SetValueifChanged(48320 /*[Scripts & Co\Wallbox\Plug]*/,(int)$VarVal[$k+1]);
break;
case "Serial": SetValueifChanged(19818 /*[Scripts & Co\Wallbox\Serial]*/,$VarVal[$k+1]);
break;
case "E pres": {
$session=((float)$VarVal[1])/10000;
$diff=$session-GetValue(22116 /*[Scripts & Co\Wallbox\Session]*/); //Differenz immer auf die Summe rechnen
$SumSession=GetValue(28834 /*[Scripts & Co\Wallbox\Session - aktueller Monat]*/);
if ($diff>0) {
SetValue(28834 /*[Scripts & Co\Wallbox\Session - aktueller Monat]*/,$diff+$SumSession); //aber nur, wenn kine neue Session beginnt
SetValue(53752 /*[Scripts & Co\Wallbox\Kosten - aktueller Monat]*/,($diff+$SumSession)*GetValueFloat(20040 /*[IPS\Zählerstände\Strom\Arbeitspreis Ct/kWh]*/)/100); //aber nur, wenn kine neue Session beginnt
}
SetValue(22116 /*[Scripts & Co\Wallbox\Session]*/,$session);
SetValue(31584 /*[Scripts & Co\Wallbox\Kosten - Session]*/,$session*GetValue(20040 /*[IPS\Zählerstände\Strom\Arbeitspreis Ct/kWh]*/)/100);
}
break;
case "Curr user": SetValueifChanged(10043 /*[Scripts & Co\Wallbox\Current User]*/,$VarVal[$k+1]/1000);
break;
}
}
}
}
else //Statusdaten
{
$Data=str_replace("{", "", $Data);
$Data=str_replace("}", "", $Data);
$Data=str_replace("\"", "", $Data);
$VarVal = explode(': ', $Data); // InVariable und Wert trennen
If ($VarVal[0] == "E pres") {
$session=((float)$VarVal[1])/10000;
$diff=$session-GetValue(22116 /*[Scripts & Co\Wallbox\Session]*/); //Differenz immer auf die Summe rechnen
$SumSession=GetValue(28834 /*[Scripts & Co\Wallbox\Session - aktueller Monat]*/);
if ($diff>0) {
SetValue(28834 /*[Scripts & Co\Wallbox\Session - aktueller Monat]*/,$diff+$SumSession); //aber nur, wenn kine neue Session beginnt
SetValue(53752 /*[Scripts & Co\Wallbox\Kosten - aktueller Monat]*/,($diff+$SumSession)*GetValueFloat(20040 /*[IPS\Zählerstände\Strom\Arbeitspreis Ct/kWh]*/)/100); //aber nur, wenn kine neue Session beginnt
}
SetValue(22116 /*[Scripts & Co\Wallbox\Session]*/,$session);
SetValue(31584 /*[Scripts & Co\Wallbox\Kosten - Session]*/,$session*GetValue(20040 /*[IPS\Zählerstände\Strom\Arbeitspreis Ct/kWh]*/)/100);
}
If ($VarVal[0] == "State") IPS_RunScript(48662 /*[Scripts & Co\Wallbox\Wallbox - Trigger]*/); //Statusreport abrufen
}
}
function SetValueifChanged($id,$data) {
if ($data!=getValue($id)) SetValue($id,$data);
}
?>
LG Tommy