wetterdaten aus datei auslesen

hallo und guten tag !

meine wetterstation liefert die daten direkt ins internet. ich möchte sie aber zusätzlich natürlich gerne im ips als variablen haben. die software erzeugt alle 5 minuten eine txt datei mit den daten. kann man (wie kann man) am besten so eine datei alle 5 minuten im ips auslesen und die daten in variablen ablegen?

die datei sieht so aus:

Datum;Zeit;Temp. I.;Temp. A.;Temp. 2;Temp. 3;Temp. 4;Feuchte I.;Feuchte A.;Feuchte 2;Feuchte 3;Feuchte 4;Luftdruck;Regen;Wind;Richtung;Taupunkt;Windchill;Windben;W
;;C;C;C;C;C;%;%;%;%;%;hPa;l/m;km/h;;C;C;km/h;B
07.12.2007;13:00;24,6;9,4;0,0;0,0;0,0;40;75;0;0;0;986,3;0,000;19,1;360;5,2;2,8;19,1;4
07.12.2007;13:05;24,6;9,4;0,0;0,0;0,0;40;75;0;0;0;986,3;0,000;19,1;360;5,2;2,8;19,1;4
07.12.2007;13:10;24,6;9,4;0,0;0,0;0,0;40;75;0;0;0;986,3;0,000;19,1;360;5,2;2,8;19,1;4
07.12.2007;13:15;24,6;9,4;0,0;0,0;0,0;40;75;0;0;0;986,3;0,000;19,1;360;5,2;2,8;19,1;4

nach unten geht die liste weiter aber immer nur mit den „alten“ daten

happy day und dank, frank

Hallo Frank,

das geht recht einfach:

$file = file_get_contents($filename); // gesamte Datei in einen String einlesen
$lines = explode("
", $file);      // String in Zeilen zerlegen und in ein Array schreiben
$lastentry = $lines[count($lines)-1]; // letzte Zeile extrahieren
$data = explode(";", $lastentry);     // Daten in ein Array schreiben

Das Array $data enthält nun Deine Daten als Strings. Auf diese kannst Du z.B. so zugreifen:

$Datum = $data[0];
$Zeit  = $data[1];
$TempI = $data[2];
$TempA = $data[3];
// ... usw ...

Gruß
HJH

hallo und danke für die schnelle antwort :slight_smile:

wie gebe ich dem script denn dann an, wo die datei ist?

happy day und dank, frank

ich habe das jetzt mal so probiert:


$file = file_get_contents('C:\Programme\WsWin\aktuell.txt'); // gesamte Datei in einen String einlesen
$lines = explode("
", $file);      // String in Zeilen zerlegen und in ein Array schreiben
$lastentry = $lines[count($lines)-1]; // letzte Zeile extrahieren
$data = explode(";", $lastentry);     // Daten in ein Array schreiben

$datum = $data[0];
SetValueString("Wetterstation.Datum",$datum);

… klappt aber leider nicht :frowning: was mache ich falsch ?

frank

Hallo Frank,

… klappt aber leider nicht :frowning:

ist eine sehr dürftige Fehlerbeschreibung. Ein bischen mehr an Information solltest Du schon liefern.

  • Bekommst Du irgendwelche Fehlermeldungen?
  • Woran hast Du überhaupt gemerkt, das es nicht klappt?
  • Hast Du Dir mit „echo“ die Variablen einmal angesehen?
  • usw…

Gruß
HJH

sorry. ja so kann man natürlich nix dazu sagen ich esel :o

also ich habe das ganze jetzt so gemacht:


$file = file_get_contents('C:\Programme\WsWin\aktuell.txt'); // gesamte Datei in einen String einlesen
$lines = explode("
", $file);      // String in Zeilen zerlegen und in ein Array schreiben
$lastentry = $lines[count($lines)-2]; // letzte Zeile extrahieren
$data = explode(";", $lastentry);     // Daten in ein Array schreiben

SetValueFloat('WS_aussen',doubleval(str_replace(',','.',trim(substr($data[3],0)))));
SetValueFloat('WS_richtung',doubleval(str_replace(',','.',trim(substr($data[15],0)))));
SetValueFloat('WS_wind',doubleval(str_replace(',','.',trim(substr($data[16],0)))));
SetValueFloat('WS_boeen',doubleval(str_replace(',','.',trim(substr($data[19],0)))));

das klappt. bei lastentry musste es -2 heissen. mit -1 kam eine fehlermeldung. da ich die zahlen in einer float variablen brauche, habe ich mir aus einem anderen script die unteren zeilen genommen. daten kriege ich jetzt auch. passt das alles so oder habe ich da noch was falsches drin? ich habe fast null ahnung von php :slight_smile:

happy day und dank, frank

Hallo Frank,

wenn Du jetzt Daten bekommst, dann hast Du es wohl richtig gemacht. :slight_smile:

Aber auch wenn es richtig ist, kann man häufig noch ein bischen optimieren: :wink:

Statt:

SetValueFloat('WS_aussen',doubleval(str_replace(',','.',trim(substr($data[3],0))))); 

geht es auch kürzer:

SetValueFloat('WS_aussen', (float)(str_replace(',', '.', $data[3]))); 

In Deiner Textdatei liegen die Daten bereits in der richtigen Form vor, außer, dass ein Komma anstelle des Dezimalpunkts verwendet wird.

Es ist daher nicht nötig mit trim(…) Leerzeichen zu entfernen oder mit substr(…) einen Teil-String zu extrahieren.

Da IP-Symcon Externe Float-Variablen ohnehin nur mit einfacher Genauigkeit (Float) speichert, ist es auch völlig unnötig hier mit doubleval(…) in Double zu konvertieren. IPS muss dann extra wieder in Float zurückverwandeln.

Die anderen Float-Variablen werden genauso behandelt.

Gruß
HJH

hallo und danke !

läuft prima so. klasse. dann habe ich auch dank deiner erklärungen mal wieder ein klein wenig mehr über scripte gelernt.

happy day und dank, frank :slight_smile: