IPS-Einbindung eines Solarreglers von Resol?

Danke dafür,

das Array macht er das gleiche wie gestern nur das es diesmal in Zeile 1 und nicht 0 ist. Die Werte die dann eingetragen werden finde ich auch nirgendwo in der Txt Datei.
Was mache ich denn Falsch? Ich glaube ich sitze zu lange vor der Kiste. Ich denk ich mache morgen weiter.

Aber nochmal vielen Dank für die Hilfe.
McNelly

Hiermit hast Du alle Daten einzel in einem Array. Da kannst DU nach dem Motto $data[194].$data[195] die einzelnen Werte zusammen setzen.
Für jeden Wert musst Du natürlich eine Variable anlegen.

Du musst das mal beobachten, sollten sich Werte vom 3 in 4 oder 4 in 5 stelligen Bereich ändern, dann stimmt das ganze Array nicht mehr.

<?

$file = file('C:\Daten\Protokolldaten  -Resol\TextData.txt'); // gesamte Datei in einen String einlesen
$lastentry = $file[count($file)-1]; // letzte Zeile extrahieren , eventuel -1 einsetzen
$resoldata = explode(" ", $lastentry); // Daten in ein Array  schreiben

$Datum = $resoldata[0];
$data = str_split($resoldata[1]);

print_r($data);
SetValueString(11755 /*[Resolprotokoll\DatumResol]*/,  $Datum); // ID anpassen

SetValue(20599 /*[Resolprotokoll\FloatResol]*/, $data[9].$data[10].$data[11].$data[12]); // Temperaturwert
SetValue(12345 /*[Resolprotokoll\FloatResol]*/, $data[14].$data[15].$data[16].$data[17]); // Temperaturwert
SetValue(54321 /*[Resolprotokoll\FloatResol]*/, $data[19].$data[20].$data[21].$data[22]); // Temperaturwert
// usw................
?>

Hallo,
ich muß noch einmal nachfragen. Das mit dem zusammensetzen habe ich verstanden. Nun ist es aber so, dass ich die Originaldatei von z.B. Heute (TextData_20100223.txt) umbenenne in TextData.txt. Diese lese ich mit dem Scipt ein, darauf folgt eine Fehlermeldung.
Der Name TextData ist doch gleich und auch am gleichem Ort.
Warum macht der kein Array raus?

Danke McNelly

Welche Fehlermeldung?

Dann würde mich mal interessieren, ob die Originaldatei genauso aussieht wie die umgewandelte. Am besten wäre es, wenn Du vom Regler eine csv-Datei bekommen könntest.

Schick mir mal eine Original.

Hier noch mal die Dateien die ich mit dem Resol Programm erzeugen kann:

Rohdaten
Protokolldaten
Textdaten

Dann Umwandeln von Roh- oder Protokolldaten in Txt Daten mit Scalc öffnen und speichern unter *.csv.
Anbei noch die Resolbilder und die csv Datei.

Ich bekomme die Originaldatei nicht hochgeladen Meldung: ungültige Datei:

TextData_20100223.log
Aber schau dir mal die Datei auf meiner Webseite an, dort konnt ich sie laden.

Vielen Vielen Dank für die Mühe mit mir.
McNelly

[URL=„http://www.mcnelly.de/TextData_20100223.log“]

Wenn, muss es so heissen.

$file = file('C:\Daten\Protokolldaten\TextData.txt'); 

Du hast ein Leerzeichen nach Protokolldaten. Außerdem hast Du die Variablen nicht angelegt.

Das ist doch keine csv-Datei. Normal sind die Komma oder Semikolon getrennt.

Ich habe deine Datei mit Excel bearbeitet und Semikolon eingefügt. Damit geht es einwandfrei und Du hast in jedem Array-Index einen Wert stehen.

Eines davon wird ja jetzt passen.:slight_smile:

Somit sieht das Script folgendermaßen aus. (csv)

$file = file("C:\Daten\Protokolldaten\TextData.csv");

$lastentry = $file[count($file)-1]; // letzte Zeile extrahieren , eventuell -1 einsetzen
$resoldata = explode(";", $lastentry); // Daten in ein Array  schreiben
print_r($resoldata);
$Datum = $resoldata[0];

SetValueString(11755 /*[Resolprotokoll\DatumResol]*/, $Datum); // ID anpassen
SetValue(22285 , $resoldata[1]);
SetValue(12345 , $resoldata[2]);
SetValue(54321 , $resoldata[3]);
//usw.

und hier für (txt)

$file = file("C:\Daten\Protokolldaten\TextData.txt");

$lastentry = $file[count($file)-1]; // letzte Zeile extrahieren , eventuell -1 einsetzen
$resoldata = explode("	", $lastentry); // Daten in ein Array  schreiben

print_r($resoldata);
$Datum = $resoldata[0];

SetValueString(11755 /*[Resolprotokoll\DatumResol]*/, $Datum); // ID anpassen
SetValue(22285, $resoldata[1]);
SetValue(23618 /*[Resolprotokoll\Float1]*/, $resoldata[2]);
SetValue(45263 /*[Resolprotokoll\Float2]*/, $resoldata[3]);
//usw.

und die Datei (csv) zum Testen.

TextData.rar (3.08 KB)

Hallo Rainer,

es loppt, muß mich nur noch um Excel kümmern. Aber das sollte ich
hinbekommen.

Also Danke

und viele Grüße
Thorsten:loveips:

Du brauchst dich nicht um Excel kümmern. Nimm das 2te Script, das geht auch mit txt. Ich hatte übersehen, dass es Tabulator getrennt ist.

Hallo,

jetzt läuft es auch mit der Original Resol *.txt Datei.
Danke noch mal.

Hast du zufällig noch eine Idee, wie ich im Script den Dateinamen Automatisch jeden Tag ändern lassen kann. Oder alternativ ein Script, welches mir die Aktuellste *.txt oder *.log als Variabele rausgibt.

Ich habe im Forum ein Script gefunden dies sucht mir aber leider aus dem Verzeichniss nur die *.csv Datei raus.
Kann ich dem Script sagen, dass es eine TextData(aktuelles-Datum20100228).log oder txt suchen soll?

Grüße aus Warstein

<?

$dir = "C:\\Daten\Protokolldaten\\";
$files = scandir($dir,1);
//print_r($files1);
//$zaehler = count ($files);
//echo $zaehler;
$File = $files[0];
echo "$File"."
";
?>

Danke
und viele Grüße
Thorsten

$file = file(„C:\Daten\Protokolldaten\TextData_mktime (date(„y“),date(„m“),date(„d“));.log“);

Ich habe keine Ahnung, was du da genau vorhast, aber damit es zumindest syntaktisch korrektes PHP ist, muss das

$file = file("C:\Daten\Protokolldaten\TextData_" . mktime(date("y"), date("m"), date("d")) . ".log");

lauten.

Hallo,

danke für den Versuch, geht aber leider auch nicht.
Ich möchte hinter „Textdata_“ das Aktuelle Datum z.B. 20100305 eifügen lassen.
Dann muß ich nicht jeden Tag den Aktuellen Tag um 24:00 Uhr auf das morgige Datum im Sript ändern.
Heute z.B. von TextData_20100305.log auf TextData20100306.log

Viele Grüße
Thorsten

andere Frage, Du liest doch die Log-Dateien vom Ordner ein oder nicht.

Hallo,

ja der Regler schreibt alle 5 fünf Minuten eine neue *.Log Datei nur der Name ändert sich um Mitternacht.

Die Daten schreibt der Regler nach C:/Daten/Protokolldaten/*_20100305.log.

Viele Grüße
Thorsten

eine Möglichkeit wäre das hier.

PHP: rename - Manual

Das sollte funktionieren:

$file = file("C:\Daten\Protokolldaten\TextData_" . date("Ymd") . ".log");

Es ist wichtig, dass das Y groß ist, beim kleinen y kommt nur das zweistellige Jahr raus, beim großen erst das vierstellige.

Stefan

Danke, da wäre ich nie drauf gekommen Y Groß schreiben.

Danke und viele Grüße
Thorsten

Keine Ursache :slight_smile:

Fürs nächste Mal, da gibts auch ein Handbuch, da steht sowas drin :wink:
PHP: date - Manual