SMA Webbox

Hallo
bezüglich SMA Anbindung (2 Wechslerichter über Speedwire angebunden) bin ich auch noch nicht so weit wie ich wollte
fragte schon in nem anderen Tread
aber gibt’s ne Möglichkeit ein SMA direkt über speedwire anzubinden ohne Sunnyexplorer.exe und ohne übers Internet (sunnyportal) an die Daten zu kommen
leider kenne ich mich wirklich aus mit denn Hochsprachen und komme auch mit Google nicht wirklich weiter
habe zwar schon einiges in php gefunden im zusammenhang mit SMAspot neu sbfspot dieser fragt den WR ab und schaufelt in ne Datenbank und ich brauch ja nur die Abfrage da IPS ja dann die Daten bank ist sofern ich das loggen möchte
auf der anderen seite gibt’s von SMA YASDI die als DLL vorhanden ist aber ich habe leider null Ahnung wie ich anfangen muss um die in IPS zu integrieren

da es ja einige mit SMA Wechselrichter hat wollte ich fragen obs da per speedwire nicht schon skripts gibt

gruss Roman

Hallo Zusammen,

ich bin jetzt auch Stolzer Besitzer einer PV-Anlage. Ich habe den SMA Home-Manager und den SMA SB 5000TL-21 603 Umrichter im Einsatz.
Ich würde jetzt auch gerne meine PV Anlage in IPS einbinden. Ist mittlerweile jemand soweit das man die Werte direkt aus dem Umrichter bzw. aus dem Homemanger auslesen kann ohne über das Sunny Portal zu gehen?

Gruß Stephan

Ich habe nun eine Lösung über Codesys gefunden das kommuniziert über TCP/IP direkt mit den Wechselrichter
Aber als geschlossener programmblock sprich ich kann den Programmcode nicht lesen denn der Entwickler verkauft ihn günstig über den Codesys 3 Store
Und die so ausgelesenen Werte gebe ich an ips weiter
Technisch müsste es wohl auch direkt möglich sein aber SMA sperrt sich da
Aber die amerikanischen Modelle sollen wohl modbus sprechen können aber in unserer Region noch nicht, laut SMA Support gibt es keine Info ob und wann ein mögliches Softwareupdate das bei unseren Wechselrichter zulassen wird

Hast Du zufällig einen Link hierzu?

Ich habe die Lösung bei mir nun so umgebaut, dass ich 2 zusätzliche Zähler eingebaut habe um die Daten live zu erhalten, wäre aber an einer alternativen Lösung interessiert.

Grüße,
Torsten

Ich muss heut Abend wenn ich am pc bin schauen
Aber im Codesys store unter dem Stichwort SMA sollte es zu finden sein

Da ich mit absolut nicht mit Codesys auskenne werde ich wahrscheinlich einfach einen zweiten KNX-Energiezähler installieren. Vielen Dank aber für die Info

Gruß Stephan

Ja, das geht. Die Daten können als CSV-File anhand einer Batch-Anwendung ausgelesen werden.
Anschließend muß man „nur“ noch das CSV-File per PHP einlesen. Einfach mal bei Google nach „Sunny Explorer batch“ suchen.

Hallo mr_cg,

vielen Dank für den Tipp, habe das mit der Batch Datei hinbekommen.
Jetzt habe ich csv Datei. Nur leider hapert es jetzt etwas mit dem Auswerten der Datei
Ich habe schon mehrere Beiträge gefunden die sich mit dem Thema CSV Datei Auslesen auseinandersetzten nur leider bekomme ich kein Script so richtig zum laufen.
Am weitesten bin ich mit diesem Beitrag gekommen.

http://www.ip-symcon.de/forum/threads/24342-CSV-Datei-lesen-%C3%BF%C3%BE-und-jede-Menge-Leerzeichen-werden-gelesen?highlight=csv

Ich bekomme die Datei angezeigt nur ist mir immer noch ein Rätsel wie ich z.B. an den Zählerwert (KWH) bzw. an den aktuellen Verbrauch (KW) komme.

Hat hier vielleicht schon jemand ein funktionierendes Auslesescript parat ?

Ich habe auch mal meine CSV Datei angehangen.

Gruß Stephan

Meine PV-Anlage 1-20150403.csv.txt (14.4 KB)

So sollte es funktionieren:


 // gesamte Datei in einen String einlesen (Pfad zur CSV-Datei anpassen!!!)
 $file = file_get_contents("C:/Programme/IP-Symcon/webfront/user/pv/PV-Anlage-$jahr$monat$tag.csv");

 // String in Zeilen zerlegen und in ein Array schreiben
 $lines = explode("
", $file);

 // letzte Zeile extrahieren
 $lastentry = $lines[count($lines)-$line_number];

 // Daten in ein Array schreiben
 $data = explode(";", $lastentry);

 // CSV-Daten (Tagesdatei / 5min Werte) auslesen und in IPS Variablen schreiben
 $wr1_ertrag = doubleval(str_replace(',','.',trim(substr($data[1],0))));
 $wr1_leistung = doubleval(str_replace(',','.',trim(substr($data[2],0))));
 $ddMMyyyy_HHmm = strval(str_replace(',','.',trim(substr($data[0],0))));
 $ddMMyyyy_HHmm = substr($ddMMyyyy_HHmm,0,16); // Extrahiert nur die ersten 16 Zeichen der Variable. Notwendig um die Daten immer im Format "ddMMyyyy HH:mm" zu erhalten. (HH:mm:ss => HH:mm)


Hallo mr_cg,

erst ein mal vielen Dank für das Script, nur leider funktioniert es nicht.

Zur Zeit Sieht mein Script so aus:

<?
// Bestimmung des aktuellen Datums
  $Datum = date("Ymd");
  $Uhrzeit = date('H:i:s');

$SMA_CSV_DATEI_LINK = "C:\IPS-Eigene_Dateien\SMA\Meine PV-Anlage 1-$Datum.csv";

 // gesamte Datei in einen String einlesen (Pfad zur CSV-Datei anpassen!!!)
 $file = file_get_contents("C:\IPS-Eigene_Dateien\SMA\Meine PV-Anlage 1-$Datum.csv");

 // String in Zeilen zerlegen und in ein Array schreiben
 $lines = explode("
", $file);

 // letzte Zeile extrahieren
 $lastentry = $lines[count($lines)-1];

 // Daten in ein Array schreiben
 $data = explode(";", $lastentry);

 // CSV-Daten (Tagesdatei / 5min Werte) auslesen und in IPS Variablen schreiben
 $wr1_ertrag = doubleval(str_replace(',','.',trim(substr($data[1],0))));
 $wr1_leistung = doubleval(str_replace(',','.',trim(substr($data[2],0))));
 $ddMMyyyy_HHmm = strval(str_replace(',','.',trim(substr($data[0],0))));
 $ddMMyyyy_HHmm = substr($ddMMyyyy_HHmm,0,16); // Extrahiert nur die ersten 16 Zeichen der Variable. Notwendig um die Daten immer im Format "ddMMyyyy HH:mm" zu erhalten. (HH:mm:ss => HH:mm)

// Testanzeige
if($_IPS['SENDER'] == "Execute")
{
    echo "<pre>";
    echo " Script Ausgelöst : $Uhrzeit  
";
    echo " Ertrag : $wr1_ertrag 
";
    echo " Leistung : $wr1_leistung 
";
    echo " Datum : $ddMMyyyy_HHmm 
" ;
}

?>

Und das Ergebniss sieht so aus:

Script Ausgelöst : 15:48:09
Ertrag : 0
Leistung : 0
Datum : ÿþs

Hast du eine Idee ?

Gruß Stephan

Die CSV-Datei wird auch sicher gefunden?

Evtl. auch mal die Variable $lastentry ausgeben lassen um zu sehen ob auch wirklich die letzte Zeile vom CSV ausgegeben wird. Die Leerzeichen im Filename würde ich in jeden Fall vermeiden. Damit kann es immer wieder Probleme geben.
Bin mir da auch nicht sicher ob Du mit PHP überhaupt auf die anderen Verzeichnisse zugreifen kannst. Würde generell empfehlen die Daten in das IPS User-Verzeichnis zu legen.

Hi,

ja, die CSV Datei wird auch gefunden. Habe ich zur Sicherheit getestet.
Ich habe mir den $lastentry auch ausgeben lassen. Das Ergebnis sieht so aus: ÿþs

Zugreifen kann ich auf jeden Fall. Ich kann mit diesem Script drauf zugreifen.

// Bestimmung des aktuellen Datums
  $Datum = date("Ymd");
  $Uhrzeit = date('H:i:s');

$SMA_CSV_DATEI_LINK = "C:\IPS-Eigene_Dateien\SMA\Meine PV-Anlage 1-$Datum.csv";
$csv_datei = fopen($SMA_CSV_DATEI_LINK, "r");

while (!feof($csv_datei))
   {
      $buffer = fgets($csv_datei);
      $buffer = mb_convert_encoding($buffer, "UTF-8", "UTF-16");
      $buffer = trim($buffer);
      echo"".$buffer."
";
  }
  
fclose($csv_datei);


// Testanzeige
if($_IPS['SENDER'] == "Execute")
{
    echo "<pre>";
    echo " $Uhrzeit  
";
    echo " Letzter Eintrag :  
";
    echo " Variable 3 
";
    echo " Variable 4 
" ;
}
?>

Die Anzeige sieht nach auch wie folgt aus:

sep=;
Version CSV1|Tool SE|Linebreaks CR/LF|Delimiter semicolon|Decimalpoint comma|Precision 3

;SN: 2130343603;SN: 2130343603
;SB 5000TL-21;SB 5000TL-21
;2130343603;2130343603
;Gesamtertrag;Leistung
;Counter;Analog
dd.MM.yyyy HH:mm:ss;kWh;kW
06.04.2015 00:00:00;90,698;0,000
06.04.2015 00:05:00;90,698;0,000
06.04.2015 00:10:00;90,698;0,000
06.04.2015 00:15:00;90,698;0,000
06.04.2015 00:20:00;90,698;0,000
06.04.2015 00:25:00;90,698;0,000
06.04.2015 00:30:00;90,698;0,000
06.04.2015 00:35:00;90,698;0,000
06.04.2015 00:40:00;90,698;0,000
06.04.2015 00:45:00;90,698;0,000
06.04.2015 00:50:00;90,698;0,000
06.04.2015 00:55:00;90,698;0,000
06.04.2015 01:00:00;90,698;0,000
06.04.2015 01:05:00;90,698;0,000
06.04.2015 01:10:00;90,698;0,000
06.04.2015 01:15:00;90,698;0,000
06.04.2015 01:20:00;90,698;0,000
06.04.2015 01:25:00;90,698;0,000
06.04.2015 01:30:00;90,698;0,000
06.04.2015 01:35:00;90,698;0,000
06.04.2015 01:40:00;90,698;0,000
06.04.2015 01:45:00;90,698;0,000
06.04.2015 01:50:00;90,698;0,000

Hierbei weis ich aber nicht wie ich die letzte Zeile auswerten kann.

Gruß Stephan

Also mein Skript mit Deinen Daten funktioniert 1a.
Die Pfadangabe zum File mal bitte mit Slash (NICHT Backslash) angeben so wie ich es gepostet hatte.
Könnte auch daran liegen.

Pfadangabe zum File auf Slash geändert

<?
// Bestimmung des aktuellen Datums
  $Datum = date("Ymd");
  $Uhrzeit = date('H:i:s');

 // gesamte Datei in einen String einlesen (Pfad zur CSV-Datei anpassen!!!)
 $file = file_get_contents("C:/IPS-Eigene_Dateien/SMA/Meine PV-Anlage 1-$Datum.csv");

 // String in Zeilen zerlegen und in ein Array schreiben
 $lines = explode("
", $file);

 // letzte Zeile extrahieren
 $lastentry = $lines[count($lines)-1];

 // Daten in ein Array schreiben
 $data = explode(";", $lastentry);

 // CSV-Daten (Tagesdatei / 5min Werte) auslesen und in IPS Variablen schreiben
 $wr1_ertrag = doubleval(str_replace(',','.',trim(substr($data[1],0))));
 $wr1_leistung = doubleval(str_replace(',','.',trim(substr($data[2],0))));
 $ddMMyyyy_HHmm = strval(str_replace(',','.',trim(substr($data[0],0))));
 $ddMMyyyy_HHmm = substr($ddMMyyyy_HHmm,0,16); // Extrahiert nur die ersten 16 Zeichen der Variable. Notwendig um die Daten immer im Format "ddMMyyyy HH:mm" zu erhalten. (HH:mm:ss => HH:mm)

// Testanzeige
if($_IPS['SENDER'] == "Execute")
{
    echo "<pre>";
    echo " Script Ausgelöst : $Uhrzeit  
";
    echo " Ertrag : $wr1_ertrag 
";
    echo " Leistung : $wr1_leistung 
";
    echo " Datum : $ddMMyyyy_HHmm 
" ;
    echo " Lastentry : $lastentry 
" ;
}

?>

Ausgabe:

Script Ausgelöst : 23:21:15
Ertrag : 0
Leistung : 0
Datum : ÿþs
Lastentry : ÿþs

Habe keine Ideen mehr

Versuche mal zum Testen der CSV-Datei einen festen Dateiname (z.B. PV-Anlage.csv) zu geben und einen einfachen Pfad zu verwenden. z.B. C:/tmp/PV-Anlage.csv.

Ansonsten muss es am Fileformat der CSV Datei liegen weil es bei mir ja funktioniert.
Vielleicht auch mal die Ausgabe von der SunnyExplorer Batch in eine Textdatei kopieren.
Wenn nichts hilft mal Deine CSV Datei zippen und mir schicken.

Habe Verzeichnis geändert,
Text Datei angelegt und Inhalt rein Kopiert.

Es hat sich nichts geändert.

Habe dir eine PN geschrieben wegen der ZIP Datei

Hallo Teas1512,
ich versuche auch gerade die Daten von SMA in IPS zu importieren. Leider funktioniert bei mir der csv-Export nicht. Ich bekomme zwar eine Erfolgsmeldung vom SunnyExplorer, aber er schreibt keine Datei. Könntest Du bitte mal den kompletten Aufruf, bzw. die Batchdatei posten.
Vielen Dank
Volker

Hi Volker,

anbei meine Batchdatei. Die Batch Datei Starte ich dann aus IPS raus.
Bitte beachte das du die Endung änderst. konnte keine BAT Datei Hochladen

Gruß Stephan

SE.txt (347 Bytes)

Hallo Zusammen,

ich wollte euch nur kurz mitteile das ich es mit der großartigen Hilfe von mr_cg hinbekommen habe die CSV-Datei auszulesen. Das Problem liegt an dem Datenformat von der CSV-Datei die durch den Sunny Explorer v1.07.20.R erstellt wird. UltaEdit hat angezeigt das es sich bei der CSV Datei die durch den Sunny Explorer v1.07.20.R erstellt wurde um ein „U-DOS“ File handelt und nicht um benötigte „U8-DOS“ (UTF8) Format.

Ich habe dann die Aktuelle Sunny Explorer v1.07.20.R deinstalliert und die Version v1.06.16 installiert und das Auslese-Scrip läuft jetzt ohne Probleme.

An dieser Stelle noch mal vielen Dank an die großartige Unterstützung von mr_cg.

Gruß Stephan

Moin zusammen, ich habe seit gestern auch meine Sunny Boys am Netz und will die entsprechenden Daten auslesen.

Ich habe mir ein entsprechendes Skript gebastelt, welches die Daten aufbereitet ausgibt. Das lief soweit ganz gut. Auch mit der v1.07.20.R.

Doch leider kann ich aus unerfindlichen Gründen plötzlich keine csv Dateien mehr aus dem Sunny Explorer exportieren. Das vorher noch funktionierende Skript liefert jetzt außer diesem Text keine Datei mehr.

C:\IP-Symcon\Photovoltaik>"C:\Program Files (x86)\SMA\Sunny Explorer\SunnyExplor
er.exe" "C:\Users\IPS\Documents\SMA\Sunny Explorer\Meine PV-Anlage 1.sx2" -userl
evel user -password 0000 -exportdir "C:\Users\IPS\Documents\SMA\Sunny Explorer"
-exportrange 20150101-20150502 -export energy5min

CSV-Export: establishing connection to plant ...
CSV-Export: plant login started ...
CSV-Export: current plant time is 02.05.2015 00:40:42
CSV-Export: starting export 
CSV-Export: completed

C:\IP-Symcon\Photovoltaik>

Eigentlich sollte man nur für einen Tag exportieren, habe aber mal ein wenig rumgespielt, um zu gucken ob nicht die interne Zeit verstellt ist.

Hat jemand von Euch das auch schon gehabt?

Ich habe mich vorhin auf dem SunnyPortal angemeldet und dort meine Anlage eingetragen, in der Hoffnung dort evtl. Daten abgreifen zu können. Und plötzlich komm ich nicht mal mehr mit dem SunnyExplorer auf die Anlage.

Kann jemand von ähnlichen Erfahrungen berichten?