ich habe einen Weg gefunden, zwar über einen kleinen Umweg, aber doch, die Leistungswerte meines Piko Solar (4.2) Wechselrichters auszulesen. Bezogen auf diese Werte kann ich nun unter Anderem meine Poolpumpe oder auch im Winter eine elektrische Zusatzheizung ansteuern um den Eigenverbrauch der Anlage zu steigern.
Man braucht dazu:
- XML API auf der CCU2 installiert
- Einen Server, in meinem Fall mein Media PC, auf welchem ein Webserver, der auch PHP kann, zum Beispiel XAMPP (https://www.apachefriends.org/de/index.html), ich bin mir sicher, dass es auch ein Raspi tut, leider kenne ich mich da überhaupt nicht aus.
- Ein PHP Skript, welches die Werte vom Wechselrichter ausliest und als Beispiel alle 2min ausgeführt wird, zum Beispiel als CROWN Job. Bei mir wird es mit Chrome und dem AddOn "Auto Reload Plus" jede Minute ausgeführt. Als Zusatz schreibt das Skript noch für jeden Tag ein eigenes File, in dem die Leistungswerte eingetragen werden und noch ein zweites, in dem alle Werte permanent angehängt werden. Das kann man aber weglassen. Ich frage auch ab, ob der Piko und die CCU online sind.
Code: Alles auswählen
<?php
error_reporting(0);
//----------------TEST PIKO
$url = "http://pvserver:xyzabc@192.168.0.21/index.fhtml"; // Hier die Webseite vom Websever eintragen pvserver = user und pvwr = Password
$Ausgabe = file_get_contents("$url", "r");
//AC-Leistung_Aktuell
$pikozeit = date("H:i", time());
if ($pikozeit == "23:59"){
SetValueFloat('Energie_Gesamtertrag_Tag', 0);
}
$pos1 = strpos($Ausgabe,"aktuell</td>");
$pos2 = strpos($Ausgabe,"</td>",$pos1+20);
$data = substr($Ausgabe,($pos1+65),$pos2-$pos1-65);
$data1 = (float) $data;
//PIKO ON/OFFLINE
$Con_ip = "192.168.0.21";
$Con_port = "80";
if (!@$fp = fsockopen($Con_ip, $Con_port, $errno, $errstr, 1)){
echo "PIKO Offline <br />";
} else {
echo "PIKO Online <br />";
}
//HOMEMATIC ON/OFFLINE
$Con_ip = "192.168.0.22";
$Con_port = "80";
if (!@$fp = fsockopen($Con_ip, $Con_port, $errno, $errstr, 1)){
echo "Homematic Offline <br />";
} else {
echo "Homematic Online <br />";
}
//////////////////////////////////////////////
if ($data1 > -1) //erst wenn > 0W, dann tu was
{
//----------------TEST PIKO
if ($data1 >= 1500)
{
//HOMEMMATIC!!!!
//Poolpumpe direkt
//$result = file_get_contents('http://192.168.0.22/addons/xmlapi/statechange.cgi?ise_id=5611&new_value=true');
//Programm setzt Systemvariable an CCU
$result = file_get_contents('http://192.168.0.22/addons/xmlapi/runprogram.cgi?program_id=6715&new_value=false');
$Schaltzustand_A = "EIN";
}
if ($data1 <= 1500)
{
//HOMEMMATIC!!!!
//Poolpumpe direkt
//$result = file_get_contents('http://192.168.0.22/addons/xmlapi/statechange.cgi?ise_id=5611&new_value=false');
//Programm setzt Systemvariable an CCU
$result = file_get_contents('http://192.168.0.22/addons/xmlapi/runprogram.cgi?program_id=6724&new_value=false');
$Schaltzustand_A = "AUS";
}
}
if ($data1 < 900)
{
$Schaltzustand_A = "AUS";
$Schaltzustand_B = "AUS";
}
/////////////// IN FILE SCHREIBEN/////////////////////////////////////////
//von ganz oben
if ($data1 > 0)
{
$nurdatum = date("d.m.y");
$datum = date("d.m.y H:i:s");
$uhrzeit = date("His");
$stunde = date("H");
//Umrechung in 100er und 01 02 usw bauen
$minute = (string) intval(date("i") / 0.6);
if (strlen($minute) < 2)
{
$minute = "0".$minute;
}
$sekunde = (string) intval(date("s") / 0.6);
if (strlen($sekunde) < 2)
{
$sekunde = "0".$sekunde;
}
$zeitstempel = $stunde . $minute . $sekunde;
$neue_zeile = chr(13).chr(10);
/////////////
//Bekommt Zeitstempel in 100er
$information = $datum."|".$Schaltzustand_A."|".$Schaltzustand_B."|".$data1;
$information_nodate = $nurdatum."|".$zeitstempel."|".$uhrzeit."|".$Schaltzustand_A."|".$Schaltzustand_B."|".$data1;
//// ZEITSTEMPEL Kopf schreiben
if (file_exists(date("d.m.y")."_stempel.txt"))
{
$datei_handle_nodate=fopen(date("d.m.y")."_stempel.txt",a);
echo "The file $filename exists<br />";
}
else
{
echo "The file $filename exists NOT";
$datei_handle_nodate=fopen(date("d.m.y")."_stempel.txt",a);
fwrite($datei_handle_nodate, "Datum|Zeitstempel|Uhrzeit|LuefterA|LuefterB|Leistung".$neue_zeile);
fclose($datei_handle_nodate);
}
//Schreibt einen Zeitstempel öffnet Datei zum Schreiben im Kopf!! --> $datei_handle_nodate=fopen(date("d.m.y")."_stempel.txt",a);
fwrite($datei_handle_nodate, $information_nodate. $neue_zeile);
fclose($datei_handle_nodate);
//Schreibt alles hintereinander
$datei_handle_all=fopen("Solarloginfo_gesamt.txt",a);
fwrite($datei_handle_all, $information. $neue_zeile);
fclose($datei_handle_all);
}
echo ("Wechselrichter Leistung Aktuell: $data1<br />");
echo "Zeitstempel: $zeitstempel<br />";
echo "Schaltzustand an CCU2: $Schaltzustand_A<br />";
?>
Code: Alles auswählen
$result = file_get_contents('http://192.168.0.150/addons/xmlapi/runprogram.cgi?program_id=6715&new_value=false');
So kann man jedes beliebige Programm starten oder auch zum Beispiel direkt einen "Schalter umlegen".
Ich hoffe, mit dieser kleinen Anleitung dem Einen oder Anderen geholfen zu haben.
LG, Andi