CSV Datei Auslesen

Möchte gern mein Wechselrichter auslesen, das geht aber leider nicht so ohne weiteress wie ich feststellen musste.

Da ich von mein Betreiber ein Sunny Beam mit bekommen habe dachte ich mir den zu nutzen.
der erzeugt eine CSV Datei pro Tag mit Datum.

hat jemand eine Idee oder hat jemand schon was fertiges wie man die Datei holen und auslesen kann ??

sma.PNG

13-01-02.txt (2.07 KB)

Hi,

Auslesen mit sowas hier :

<?
$temp=file("c:/ip-symcon/test.txt");
for ($count=8;$count <count($temp);$count++)
{
	$zeile= trim($temp[$count]);
	IF ( substr($zeile,5,1)==";")
	{
		$werte=explode(";",$zeile);
		echo $werte[0]." ".$werte[1]."
";
                // Mach irgendwas damit........ 
	}
}
?>

Holen? Wo liegt denn die im Moment?

Gruß
Walter

Moin Moin,

Welche Werte benötigst du denn aus der Datei? Oder genügt dir "E-Today kwH und der zugehörige Wert?

Ich würde die Datei zuerst per PHP einlesen.


<?


//Konfiguration
$pfad="C:/";
$dateiname=date("y")."-".date("m")."-".date("d").".CSV";

$datei=$pfad.$dateiname;
// Datei öffnen und einlesen
$fd = fopen($datei, "r");
$inhalt= fread($fd, filesize($datei));
fclose($fd);

// Zeichenkette Aufspalten für die Werte:
// E-Today kWh;WERT
// E-Total kWh;WERT
$array = explode(";", $inhalt);
$index=count($array);

// Der Wert für E-Total kWh entpricht dem letzten Wert des Arrays, also der Anzahl - 1
// Der Wert für E-Today kwH entspricht dem vorletztenWert des Arrays, also der Anzahl -2 (Dieser Wert enthält jedoch noch einen String)
$total=$index-1;
$today=$index-2;

$e_total_kwh=$array[$total];
$e_today_kwh=$array[$today];

// In Today ist noch mangels Seperator (";") ein String "E-Total kWh" - Dieser wird bereinigt.
$e_today_kwh=str_replace("E-Total kWh", "", $e_today_kwh);



?>



EDIT: FÜr die Werte „E-Today kWh“ und „E-Total kWh“ funktioniert es in IPS - Habe ich soeben getestet.

Beste Grüße,

Es gibt sonst auch noch den schönen PHP-Befehl fgetcsv. Vielleicht hilft das ja irgendwie weiter.

Hallo,

ich lese meinen SMA-Sunny über Bluetooth aus:

<?

 // log-Datei Tageswerte von SMA abholen
 // Timer wird von Script 32444 Tageswert verarbeiten gesetzt
 // von Sonnenaufgang bis zivile Abenddämmerung
 
 $monitor = false;               // ohne Monitoring
 $warten = false;                // nicht auf PGM-Ende warten
 IF ($_IPS['SENDER'] == "Execute")   // mit Fenster
	$monitor = true;
 
 $datum = GetValueString(50360 /*[Scripte\Datum-Uhrzeit\JJJJMMTT]*/);
 $pgm = 'C:\Program Files (x86)\SMA\Sunny Explorer\sunnyexplorer.exe';
 $parameter = " C:\IP-Symcon\Photovoltaik\xxxxxxxx.sxp -userlevel user -password 0000 -exportdir c:\IP-Symcon\Photovoltaik\Daten\aktuell\ -exportrange ";   // hier die entsprechende .sxp und ggf das Password ändern
 $parameter = $parameter.$datum."-".$datum." -export energy5min";
//   echo $pgm,$parameter;
 IPS_ExecuteEx($pgm, $parameter, $monitor, $warten, 1);
 		
 // Timer setzen für Start Verarbeitung in 3 Minuten - 9 Sek. wg. wiederholtem Start bei Fehler
 $start = microtime(true)+180-9;
 IPS_SetEventCyclicDateBounds(49128 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\aktuellen Wert bearbeiten\]*/, $start, 0);
 IPS_SetEventCyclicTimeBounds(49128 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\aktuellen Wert bearbeiten\]*/, $start, 0);
	
?>

und hier die Auswertung der csv-Datei:

<?

 // SMA Ausgabedatei Tag auslesen und auswerten

 $fehler = false;
 $last = GetValueString(38348 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Ablesestand]*/);
 $ziel = GetValueFloat(25618 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Zielwert]*/);
 $datum = getValueString(50360 /*[Scripte\Datum-Uhrzeit\JJJJMMTT]*/);
 $datei = 'C:\IP-Symcon\Photovoltaik\Daten\aktuell\xxxxxxx-'.$datum.'.csv';  //hier den Dateinamen anpassen
 
 IF (is_file($datei) == false)
   {
      $fehler = true;
      IPS_RunScript(22093 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\aktuellen Wert holen]*/);
	}
 ELSE
   {
      $array = file ( $datei );    // Datei einlesen
      $daten = end ($array);       // letzen Satz übernehmen
 		$elemente = explode(";", $daten);  // letzen Satz in einzelne Elemente aufteilen
 		SetValueString(38348 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Ablesestand]*/, $elemente[0]);
 		IF ($elemente[0] == $last)
   		{
      		$fehler = true;
      		IPS_RunScript(22093 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\aktuellen Wert holen]*/);
			}
 		ELSE
   		{
 				$wert = (float)str_replace(",",".",$elemente[1]);
 				SetValueFloat(57847 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\gesamt]*/, $wert);
 				$jahr = $wert - GetValueFloat(24660 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Ablesestand_kWh]*/);
 				SetValueFloat(53333 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Jahr]*/, $jahr);
 				$delta = $wert - $ziel;   // noch X KWh bis Jahresende erforderlich
 				SetValueFloat(26246 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Delta]*/, $delta);
 				$delta = $delta / (365 + date("L") - date("z"));   // noch X KWh/pro Tag bis Jahresende erforderlich
 				SetValueFloat(25965 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Delta pro Tag]*/, $delta);
 				$wert = $wert - GetValueFloat(36718 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\gesamt-gestern]*/);
 				SetValueFloat(37274 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\heute]*/, $wert);
 				$wert = (float)str_replace(",",".",$elemente[2])*1000;
 				SetValueFloat(20338 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\aktuell]*/, $wert);
				$hell = GetValueInteger(25979 /*[Globale Variable\Helligkeit]*/);
 				IF (($wert == 0) && ($hell == 2))
 					SetValueBoolean(51158 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Funktion]*/, true);
 				Else
 					SetValueBoolean(51158 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Funktion]*/, false);
			}
	}
 SetValueBoolean(26589 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\Ablese-Fehler]*/, $fehler);

?>

Die Scripte sind leider nicht universell geschrieben. Du müsstest die Variablen und die Dateinamen/Pfade noch anpassen. Abd#er das Prinzip kannst du sicherlich ableiten und an deine Bedürfnisse anpassen.

Gruß, Peter

Erst mal vielen dank Peter ist starte erst mal durch sollte es noch zu ein Problem geben melde ich mich.

Wie oft startest du die Skripte ?

Viele Grüße Torsten

Hallo Torsten,

Wie oft startest du die Skripte ?

Ich starte sie tagsüber alle 30 Minuten. Man könnte die Intervalle auch kürzer machen, aber unter 5 Min. würde ich nicht gehen.

Gruß, Peter