#!/usr/bin/php // // transmit_pv_values_to_mysqldb.php // // Dieses PHP Script liest die Daten von dem Controller Modul // eines Kostal Piko 7.0 Wechselrichter, und schreibt diese // nach einer kleinen Berechnung der Gesamtenergie der Anlage // ( Falls mal der Wechselrichter oder das Controller // Modul ausgetauscht wurde ) // // Klaus, Juli 2013 // //////////////////////////////////////////////////////////////// :@"; // Webseite Laden $Ausgabe = file_get_contents("$url", "r"); // Aus der Webseite die Informationen herauspicken $pos1 = strpos($Ausgabe,"aktuell"); // Suche nach Position mit Inhalt "aktuell" $pos2 = strpos($Ausgabe,"FF\">",$pos1+12)+6; // Suche nach 'FF">' ab pos1+12 für (aktuell) // und zähle 6 Zeichen für (FF">^M) dazu $pos3 = strpos($Ausgabe,"",$pos2); // Suche nach Position mit Inhalt "" ab pos2 $aktuell = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos1 = strpos($Ausgabe,"Gesamtenergie"); $pos2 = strpos($Ausgabe,"FF\">",$pos1+18)+6; $pos3 = strpos($Ausgabe,"",$pos2); $gesamtenergie = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos1 = strpos($Ausgabe,"Tagesenergie"); $pos2 = strpos($Ausgabe,"FF\">",$pos1+17)+6; $pos3 = strpos($Ausgabe,"",$pos2); $tagesenergie = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos1 = strpos($Ausgabe,"String 1"); $pos2 = strpos($Ausgabe,"FF\">",$pos1+8)+6; $pos3 = strpos($Ausgabe,"",$pos2); $s1_spannung = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos2 = strpos($Ausgabe,"FF\">",$pos3)+6; $pos3 = strpos($Ausgabe,"",$pos2); $l1_spannung = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos2 = strpos($Ausgabe,"FF\">",$pos3)+6; $pos3 = strpos($Ausgabe,"",$pos2); $s1_strom = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos2 = strpos($Ausgabe,"FF\">",$pos3)+6; $pos3 = strpos($Ausgabe,"",$pos2); $l1_leistung = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos1 = strpos($Ausgabe,"String 2"); $pos2 = strpos($Ausgabe,"FF\">",$pos1+8)+6; $pos3 = strpos($Ausgabe,"",$pos2); $s2_spannung = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos2 = strpos($Ausgabe,"FF\">",$pos3)+6; $pos3 = strpos($Ausgabe,"",$pos2); $l2_spannung = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos2 = strpos($Ausgabe,"FF\">",$pos3)+6; $pos3 = strpos($Ausgabe,"",$pos2); $s2_strom = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos2 = strpos($Ausgabe,"FF\">",$pos3)+6; $pos3 = strpos($Ausgabe,"",$pos2); $l2_leistung = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos1 = strpos($Ausgabe,"L3"); $pos2 = strpos($Ausgabe,"FF\">",$pos1+2)+6; $pos3 = strpos($Ausgabe,"",$pos2); $l3_spannung = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); $pos2 = strpos($Ausgabe,"FF\">",$pos3)+6; $pos3 = strpos($Ausgabe,"",$pos2); $l3_leistung = str_replace(" ","", substr($Ausgabe,$pos2,$pos3-$pos2)); // Eine verbindung zur Datenbank aufbauen mysql_connect("", "","") or die ("Keine Verbindung moeglich"); mysql_select_db("mysweethome") or die ("Die Datenbank existiert nicht."); // Gesamtenergie berechnen aus altem Gesamtberechnet Wert und aktuellem Tageswert // Damit auch bei einem Zähleraustausch immer noch ein Gesamtwert // der Anlage seit der Installation dargestellt werden kann. // Aus der Tabelle den letzten berechneten Gesamtenergie Wert abfragen $abfrage = "SELECT Gesamtberechnet FROM `pv_messdaten` WHERE Datum < \"$datum\" ORDER BY id DESC LIMIT 0,1"; $ergebnis = mysql_query($abfrage); $gesamtberechnet_old = mysql_fetch_object($ergebnis)->Gesamtberechnet; // Berechne die neue Gesammtenergie if($gesamtberechnet_old != "" ) { $gesamtberechnet = $gesamtberechnet_old+$tagesenergie; } else { $gesamtberechnet = 0+$tagesenergie; } // Neue Werte in die MySQL Datenbank schreiben $sql = "INSERT INTO pv_messdaten (id,Datum,Uhrzeit,Aktuell,Gesamtenergie,Tagesenergie,Gesamtberechnet,S1_Spannung,S1_Strom,S2_Spannung,S2_Strom,L1_Spannung,L1_Leistung,L2_Spannung,L2_Leistung,L3_Spannung,L3_Leistung) VALUES ( \"\", \"$datum\", \"$uhrzeit\", \"$aktuell\", \"$gesamtenergie\", \"$tagesenergie\", \"$gesamtberechnet\", \"$s1_spannung\", \"$s1_strom\", \"$s2_spannung\", \"$s2_strom\", \"$l1_spannung\", \"$l1_leistung\", \"$l2_spannung\", \"$l2_leistung\", \"$l3_spannung\", \"$l3_leistung\" )"; $eintragen = mysql_query($sql); if($DEBUG == true) { print "$sql\n\n"; if($eintragen == true) { print "Eintrag in Datenbank war erfolgreich\n\n"; } else { print "Fehler beim Speichern\n\n"; } } // Ausgabe aller Werte if($DEBUG == true) { print "Datum : $datum\n"; print "Uhrzeit : $uhrzeit\n"; print "Aktuell : $aktuell\n"; print "Gesamtenergie : $gesamtenergie\n"; print "Tagesenergie : $tagesenergie\n"; print "Gesamtberechnet : $gesamtberechnet\n"; print "S1_Spannung : $s1_spannung\n"; print "S1_Strom : $s1_strom\n"; print "S2_Spannung : $s2_spannung\n"; print "S2_Strom : $s2_strom\n"; print "L1_Spannung : $l1_spannung\n"; print "L1_Leistung : $l1_leistung\n"; print "L2_Spannung : $l2_spannung\n"; print "L2_Leistung : $l2_leistung\n"; print "L3_Spannung : $l3_spannung\n"; print "L3_Leistung : $l3_leistung\n"; } ?>