neuste datei finden

hallo und guten tag !

ich versuche seit ein paar tagen eine datei per ips auszuwerten. dort sind werte enthalten, die ich auslesen möchte. mein problem ist aber, dass die datei nicht immer den gleiche namen hat. z.b. „08123029.suo“

im dateinamen ist das datum enthalten und es wird immer mal eine neu datei angelegt. man kann ja per php das erstellungsdatum einer datei rausfinden aber wie weiter? ich bin leider noch php anfänger.

ich versuche, den dateinamen der neusten datei in dem verzeichnis per php rauszufinden. hat jemand einen tipp?

happy day und dank, frank

Hallo Frank,

ich vermute das du die TXT-Dateien deines Wechselrichters die mit der SMA Software erzeugt werden auslesen möchtest oder?

Ich habe mir mal auf die Schnelle so eine Auslesung zusammen geschustert, ist also nicht sehr elegant geproggt (man könnte einiges mit Schleifen erschlagen), aber es funzt :wink:
Es werden max. 10 Files gesucht (wenn du den Rechner neu startest wird ja jedesmal ein neues File erzeugt).

Du musst das halt noch etwas anpassen da ich drei Wechselrichter habe.

<?
/*
*******************************
 IP-SYMCON Event Scripting
*******************************
File     : Textfile_auslesen.ips.php
Trigger  : 
Interval : 
*/
$debug1 = false; //Textausgabe

$sa = GetValueString("Sonne_Auf");
$su = GetValueString("Sonne_Unter");
$tau = date("H:i");

If (($tau > $sa ) and ( $tau < $su )){


$i = 0;

$dir = "d:\\DataSMA\\";

// Datum ermitteln
$monat = date("m");
$tag = date("d");
$jahr = date("y");

//Filename erzeugen
$filename1 = "$dir$jahr$monat$tag 00.SUO";
$filename2 = "$dir$jahr$monat$tag 01.SUO";
$filename3 = "$dir$jahr$monat$tag 02.SUO";
$filename4 = "$dir$jahr$monat$tag 03.SUO";
$filename5 = "$dir$jahr$monat$tag 04.SUO";
$filename5 = "$dir$jahr$monat$tag 05.SUO";
$filename6 = "$dir$jahr$monat$tag 06.SUO";
$filename7 = "$dir$jahr$monat$tag 07.SUO";
$filename8 = "$dir$jahr$monat$tag 08.SUO";
$filename9 = "$dir$jahr$monat$tag 09.SUO";
$filename10 = "$dir$jahr$monat$tag 10.SUO";

$var1 = explode(" ",$filename1);
$file1 = "$var1[0]$var1[1]";
$var2 = explode(" ",$filename2);
$file2 = "$var2[0]$var2[1]";
$var3 = explode(" ",$filename3);
$file3 = "$var3[0]$var3[1]";
$var4 = explode(" ",$filename4);
$file4 = "$var4[0]$var4[1]";
$var5 = explode(" ",$filename5);
$file5 = "$var5[0]$var5[1]";
$var6 = explode(" ",$filename6);
$file6 = "$var6[0]$var6[1]";
$var7 = explode(" ",$filename7);
$file7 = "$var7[0]$var7[1]";
$var8 = explode(" ",$filename8);
$file8 = "$var8[0]$var8[1]";
$var9 = explode(" ",$filename9);
$file9 = "$var9[0]$var9[1]";
$var10 = explode(" ",$filename10);
$file10 = "$var10[0]$var10[1]";


If (file_exists($file1)){
$file = $file1;
$ff = 1;}
If (file_exists($file2)){
$file = $file2;
$ff = 1;}
If (file_exists($file3)){
$file = $file3;
$ff = 1;}
If (file_exists($file4)){
$file = $file4;
$ff = 1;}
If (file_exists($file5)){
$file = $file5;
$ff = 1;}
If (file_exists($file6)){
$file = $file6;
$ff = 1;}
If (file_exists($file7)){
$file = $file7;
$ff = 1;}
If (file_exists($file8)){
$file = $file8;
$ff = 1;}
If (file_exists($file9)){
$file = $file9;
$ff = 1;}
If (file_exists($file10)){
$file = $file10;
$ff = 1;}
If ( $ff == 1){;
//Inhalt des Files auslesen
$inhalt = file($file);

//Anzahl Zeilen ermitteln
$daten = fopen($file, "r") ;
while (!feof($daten)) {
$i = $i + 1;
$zeile = fgets($daten, 10000) ;
;
}
fclose($daten);

If ($i < 2) {$i = 2;}

//Werte aus Zeile holen
$words = split("[
\r	 ]+", $inhalt[$i-2],200);
$i=1;

$words = explode(";", $words[$i]);

//Werte schreiben


SetValueString("PV_UPV_ist_WR_Ost",$words[1]);
SetValueString("PV_UPV_soll_WR_Ost",$words[2]);
SetValueString("PV_IAC_ist_WR_Ost",$words[3]);
SetValueString("PV_UAC_WR_Ost",$words[4]);
SetValueString("PV_Frequenz_ist_WR_Ost",$words[5]);
Settype($words[6],"Float");
SetValueFloat("PV_PAC_Ist_WR_Ost",$words[6]);
SetValueString("PV_ZAC_ist_WR_Ost",$words[7]);
SetValueString("PV_RErd_WR_Ost",$words[8]);
SetValueString("PV_IPC_ist_WR_Ost",$words[9]);
If ($words[10] > 0){SetValueString("PV_ETotal_WR_Ost",$words[10]);}
SetValueString("PV_hTotal_WR_Ost",$words[11]);
SetValueString("PV_Status_WR_Ost",$words[12]);
SetValueString("PV_Fehler_WR_Ost",$words[13]);
SetValueString("PV_UPV_ist_WR_West",$words[14]);
SetValueString("PV_UPV_soll_WR_West",$words[15]);
SetValueString("PV_IAC_ist_WR_West",$words[16]);
SetValueString("PV_UAC_WR_West",$words[17]);
SetValueString("PV_Frequenz_ist_WR_West",$words[18]);
Settype($words[19],"Float");
SetValueFloat("PV_PAC_Ist_WR_West",$words[19]);
SetValueString("PV_ZAC_ist_WR_West",$words[20]);
SetValueString("PV_RErd_WR_West",$words[21]);
SetValueString("PV_IPV_ist_WR_West",$words[22]);
If ($words[23] > 0){SetValueString("PV_ETotal_WR_West",$words[23]);}
SetValueString("PV_hTotal_WR_West",$words[24]);
SetValueString("PV_Status_WR_West",$words[25]);
SetValueString("PV_Fehler_WR_West",$words[26]);
SetValueString("PV_UPV_ist_WR_Sued",$words[27]);
SetValueString("PV_UPV_soll_WR_Sued",$words[28]);
SetValueString("PV_IAC_ist_WR_Sued",$words[29]);
SetValueString("PV_UAC_WR_Sued",$words[30]);
SetValueString("PV_Frequenz_ist_WR_Sued",$words[31]);
Settype($words[32],"Float");
SetValueFloat("PV_PAC_Ist_WR_Sued",$words[32]);
SetValueString("PV_ZAC_ist_WR_Sued",$words[33]);
SetValueString("PV_RErd_WR_Sued",$words[34]);
SetValueString("PV_IPV_ist_WR_Sued",$words[35]);
If ($words[36] > 0){SetValueString("PV_ETotal_WR_Sued",$words[36]);}
SetValueString("PV_hTotal_WR_Sued",$words[37]);
SetValueString("PV_Status_WR_Sued",$words[38]);
SetValueString("PV_Fehler_WR_Sued",$words[39]);
SetValueFloat("PV_Spannung_L1",floatval($words[5]));
SetValueFloat("PV_Spannung_L2",floatval($words[31]));
SetValueFloat("PV_Spannung_L3",floatval($words[18]));
Settype($words[5],"Float");
SetValueFloat("PV_Netzfrequenz",floatval($words[5]));
SetValueBoolean("PV_Tag-Nachtflag",true);
}



//Debugbereich
If ($debug1 == true) {
echo $inhalt[$i-2]."
";
echo "WR Ost Upv-Ist: ".$words[1]."
";
echo "WR Ost Upv-Soll: ".$words[2]."
";
echo "WR Ost Iac-Ist: ".$words[3]."
";
echo "WR Ost Uac-Ist: ".$words[4]."
";
echo "WR Ost Fac-Ist: ".$words[5]."
";
echo "WR Ost Pac-Ist: ".$words[6]."
";
echo "WR Ost Zac-Ist: ".$words[7]."
";
echo "WR Ost RErd-Start: ".$words[8]."
";
echo "WR Ost Ipv-Ist: ".$words[9]."
";
echo "WR Ost E-Total: ".$words[10]."
";
echo "WR Ost h-Total: ".$words[11]."
";
echo "WR Ost Status: ".$words[12]."
";
echo "WR Ost Fehler: ".$words[13]."
";
echo "WR West Upv-Ist: ".$words[14]."
";
echo "WR West Upv-Soll: ".$words[15]."
";
echo "WR West Iac-Ist: ".$words[16]."
";
echo "WR West Uac-Ist: ".$words[17]."
";
echo "WR West Fac-Ist: ".$words[18]."
";
echo "WR West Pac-Ist: ".$words[19]."
";
echo "WR West Zac-Ist: ".$words[20]."
";
echo "WR West RErd-Start: ".$words[21]."
";
echo "WR West Ipv-Ist: ".$words[22]."
";
echo "WR West E-Total: ".$words[23]."
";
echo "WR West h-Total: ".$words[24]."
";
echo "WR West Status: ".$words[25]."
";
echo "WR West Fehler: ".$words[26]."
";
echo "WR Sued Upv-Ist: ".$words[27]."
";
echo "WR Sued Upv-Soll: ".$words[28]."
";
echo "WR Sued Iac-Ist: ".$words[29]."
";
echo "WR Sued Uac-Ist: ".$words[30]."
";
echo "WR Sued Fac-Ist: ".$words[31]."
";
echo "WR Sued Pac-Ist: ".$words[32]."
";
echo "WR Sued Zac-Ist: ".$words[33]."
";
echo "WR Sued RErd-Start: ".$words[34]."
";
echo "WR Sued Ipv-Ist: ".$words[35]."
";
echo "WR Sued E-Total: ".$words[36]."
";
echo "WR Sued h-Total: ".$words[37]."
";
echo "WR Sued Status: ".$words[38]."
";
echo "WR Sued Fehler: ".$words[39]."
";
}



} else {
SetValueBoolean("PV_Tag-Nachtflag",false);
SetValueFloat("PV_PAC_Ist_WR_Sued",0);
SetValueFloat("PV_PAC_Ist_WR_West",0);
SetValueFloat("PV_PAC_Ist_WR_Ost",0);
$ff = 0;
}
?>

Gruß
Thomas

hallo thomas !

genau das möchte ich machen :slight_smile: seit ein paar tagen kämpfe ich mit sunny boy control. die software soll die daten ins sunny portal liefern aber auch ins ips. bisher hat das über die text datei der momentanwertabfrage geklappt. wenn ich aber die datenaufzeichnung für das portal starte, stoppt die momentanwertabfrage.

alternativ möchte ich jetzt die suo dateien auslesen. das format des dateinamens kann ich aber nicht ändern bei mir.
du hast in deinem script ja bis 10 angelegt aber ich bin bei mir gerade schon bei z.b. 32. daher wollte ich eher die neuste datei vom datum ermitteln und dann auslesen. so langsam gelingt mir das auch :slight_smile:

happy day und dank, frank

Hallo Frank,

bist Du auch auf die SDC 4.0 umgestiegen?

Ich hatte das selbe Problem und habe doch dein Skript angepasst.

Test mal ob es bei Dir auch läuft

hmpf99-SMA-Skript

hallo werner !

ich hab das ganze ding jetzt umgebaut. bisher lief es ja über die datendaten aus der momentanwertabfrage. jetzt mache ich aber eine datenaufzeichnung, die zum sunny portal geschickt wird. daher habe ich meine ips abfrage umgebaut auf die .suo dateien von sunny data control.

happy day, frank

War auch mein Problem…

… die 4.0 macht nur noch suo-Dateien, kann aber trotzdem nicht ans SunnyPortal senden :mad:

Werde beizeiten mal die 3.9 testen.

Hallo,

dir /b/o:-d *.suo

macht das in DOS; die erste Zeile enthält den Dateinamen.

Gruss