+ Antworten
Ergebnis 1 bis 7 von 7
  1. #1
    Registriert seit
    Sep 2011
    Ort
    um Berlin/Neuenhagen
    Beiträge
    385

    Standard 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 ??

    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	sma.PNG 
Hits:	442 
Größe:	19.0 KB 
ID:	19718
    Angehängte Dateien Angehängte Dateien
    Test

  2. #2
    Registriert seit
    Jun 2011
    Ort
    56332 Wolken b.Koblenz
    Beiträge
    328

    Hi,
    Zitat Zitat von Jimmyrakete Beitrag anzeigen
    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 ??
    Auslesen mit sowas hier :
    PHP-Code:
    <?
    $temp
    =file("c:/ip-symcon/test.txt");
    for (
    $count=8;$count <count($temp);$count++)
    {
        
    $zeiletrim($temp[$count]);
        IF ( 
    substr($zeile,5,1)==";")
        {
            
    $werte=explode(";",$zeile);
            echo 
    $werte[0]." ".$werte[1]."\n";
                    
    // Mach irgendwas damit........ 
        
    }
    }
    ?>
    Holen? Wo liegt denn die im Moment?

    Gruß
    Walter

  3. #3
    Registriert seit
    Nov 2012
    Beiträge
    44

    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.

    PHP-Code:
    <?


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

    $datei=$pfad.$dateiname;
    // Datei öffnen und einlesen
    $fd fopen($datei"r");
    $inhaltfread($fdfilesize($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,
    Geändert von alex86 (03.01.13 um 16:26 Uhr)

  4. #4
    Registriert seit
    Dec 2011
    Ort
    Bad Bramstedt
    Beiträge
    335

    Es gibt sonst auch noch den schönen PHP-Befehl fgetcsv. Vielleicht hilft das ja irgendwie weiter.
    Titus
    IPS 5.1 | Fujitsu Server | Windows 2019 | HomeMatic CCU2 (RaspberryMatic) | Homematic Wetterstation | Raspberry Pi | Pure Jongo und Peaq Munet Multiroom-System | XBMC / Kodi | Arduinos mit nRF24l01+ | FritzBox 7490 | Echos | Tasmota

  5. #5
    Registriert seit
    Feb 2010
    Ort
    Kreis Wesel
    Beiträge
    229

    Hallo,

    ich lese meinen SMA-Sunny über Bluetooth aus:

    PHP-Code:
    <?

     
    // 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$warten1);
             
     
    // 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\]*/$start0);
     
    IPS_SetEventCyclicTimeBounds(49128 /*[Zentrale Steuerungen\Stromzähler\Wechselrichter\aktuellen Wert bearbeiten\]*/$start0);
        
    ?>
    und hier die Auswertung der csv-Datei:
    PHP-Code:
    <?

     
    // 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

  6. #6
    Registriert seit
    Sep 2011
    Ort
    um Berlin/Neuenhagen
    Beiträge
    385

    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
    Test

  7. #7
    Registriert seit
    Feb 2010
    Ort
    Kreis Wesel
    Beiträge
    229

    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

Ähnliche Themen

  1. Fritz Box OS 5.50 - Zugang neu - ftp daten (CSV) auslesen
    Von konny im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 2
    Letzter Beitrag: 15.02.13, 23:26
  2. CSV-Datei über UNC-Pfad einlesen
    Von dfhome im Forum Allgemeine Diskussion (2.x/3.x)
    Antworten: 6
    Letzter Beitrag: 30.11.10, 12:26
  3. Import von Temperaturwerten IPS nach Wettersoftware WSWin32 mittels CSV-Datei?
    Von rolsch im Forum Sonstige Funkkomponenten / Wetterstationen
    Antworten: 3
    Letzter Beitrag: 10.11.10, 21:21
  4. XML Datei auslesen
    Von DoktorD im Forum Skripte, PHP, SQL
    Antworten: 31
    Letzter Beitrag: 04.08.09, 18:33
  5. wetterdaten aus datei auslesen
    Von hmpf99 im Forum Allgemeine Diskussion
    Antworten: 7
    Letzter Beitrag: 08.12.07, 17:38