Wetterdaten in Variablen einlesen

Hallo

Mit IPS auf dem Rapsi möchte ich eine Logdatei einlesen die mit „fowsr“ erstellt wird
„fowsr“ liest die Daten direkt über USB aus der Wetterstation PCE FS20 ein

Habe folgenden Inhalt

<ws>
<wsd date=„2010-07-18 17:04:47“ delay=„5.0“ hum_in=„49.0“ temp_in=„25.300“ hum_out=„62.0“ temp_out=„22.500“ abs_pressure=„1006.300“ wind_ave=„2.7“ wind_gust=„3.4“ wind_dir=„180.0“ rain=„141.900“ status=„00“>
<wsd date=„2010-07-18 16:59:47“ delay=„5.0“ hum_in=„49.0“ temp_in=„25.300“ hum_out=„59.0“ temp_out=„22.200“ abs_pressure=„1006.400“ wind_ave=„3.4“ wind_gust=„5.1“ wind_dir=„225.0“ rain=„141.900“ status=„00“>
<wsd date=„2010-07-18 16:54:47“ delay=„5.0“ hum_in=„49.0“ temp_in=„25.300“ hum_out=„59.0“ temp_out=„22.100“ abs_pressure=„1006.500“ wind_ave=„3.4“ wind_gust=„4.8“ wind_dir=„180.0“ rain=„141.900“ status=„00“>
<wsd date=„2010-07-18 16:49:47“ delay=„5.0“ hum_in=„49.0“ temp_in=„25.300“ hum_out=„57.0“ temp_out=„23.100“ abs_pressure=„1006.100“ wind_ave=„2.7“ wind_gust=„4.1“ wind_dir=„180.0“ rain=„141.900“ status=„00“>
<wsd date=„2010-07-18 16:44:47“ delay=„5.0“ hum_in=„48.0“ temp_in=„25.300“ hum_out=„54.0“ temp_out=„22.900“ abs_pressure=„1006.300“ wind_ave=„3.1“ wind_gust=„4.1“ wind_dir=„157.5“ rain=„141.900“ status=„00“>
<wsd date=„2010-07-18 16:39:47“ delay=„5.0“ hum_in=„48.0“ temp_in=„25.300“ hum_out=„53.0“ temp_out=„22.700“ abs_pressure=„1006.400“ wind_ave=„3.1“ wind_gust=„4.8“ wind_dir=„180.0“ rain=„141.900“ status=„00“>
<wsd date=„2010-07-18 16:34:47“ delay=„5.0“ hum_in=„48.0“ temp_in=„25.200“ hum_out=„52.0“ temp_out=„22.600“ abs_pressure=„1006.500“ wind_ave=„4.1“ wind_gust=„5.8“ wind_dir=„180.0“ rain=„141.900“ status=„00“>
<wsd date=„2010-07-18 16:29:47“ delay=„5.0“ hum_in=„48.0“ temp_in=„25.200“ hum_out=„54.0“ temp_out=„22.400“ abs_pressure=„1006.400“ wind_ave=„4.1“ wind_gust=„6.5“ wind_dir=„180.0“ rain=„141.900“ status=„00“>
<wsd date=„2010-07-18 16:24:47“ delay=„5.0“ hum_in=„48.0“ temp_in=„25.200“ hum_out=„54.0“ temp_out=„22.100“ abs_pressure=„1006.400“ wind_ave=„4.1“ wind_gust=„5.8“ wind_dir=„180.0“ rain=„141.900“ status=„00“>
<wsd date=„2010-07-18 16:19:47“ delay=„5.0“ hum_in=„48.0“ temp_in=„25.200“ hum_out=„55.0“ temp_out=„21.900“ abs_pressure=„1006.400“ wind_ave=„3.7“ wind_gust=„6.1“ wind_dir=„180.0“ rain=„141.900“ status=„00“>
</ws>

Da der Textparser ist auf dem Rapsi noch nicht verfügbar ist, fehlt mir jetzt der Plan

Welche anderen Lösungen gibts ?

Danke
Franz

Parse das XML doch mit einem Script.
Als Anregung; hatten wir gerade hier:
http://www.ip-symcon.de/forum/showthread.php?p=237809
Gibt bestimmt noch mehr Beispiele/Scripte im Forum.
Michael

Hallo

Danke für die rasche Antwort
das Problem ist , es ist irgendwie nicht richtig XML diese Datei

Franz

Stimmt der Header fehlt.
Aber den kannst ja vorher anfügen.
Michael

Hallo

Bin der Lösung schon näher, mit


<?php

$str =  '<wsd date="2010-07-18 17:04:47" delay="5.0" hum_in="49.0" temp_in="25.300" hum_out="62.0" temp_out="22.500" abs_pressure="1006.300" wind_ave="2.7" wind_gust="3.4" wind_dir="180.0" rain="141.900" status="00"> ';
//forward slashes are the start and end delimeters
//third parameter is the array we want to fill with matches

if (preg_match_all('/"([^"]+)"/', $str, $m)) {

   print_r ($m[1]);
    
   
    
}
else {
   //preg_match returns the number of matches found,
   //so if here didn't match pattern
		}

?>

gits dieses Ergebnis

Array
(
[0] => 2010-07-18 17:04:47
[1] => 5.0
[2] => 49.0
[3] => 25.300
[4] => 62.0
[5] => 22.500
[6] => 1006.300
[7] => 2.7
[8] => 3.4
[9] => 180.0
[10] => 141.900
[11] => 00
)

jetzt muss das noch für jede Zeile passieren und dann rein in die Variablen
Nur wie ?

So mal auf die Schnelle, als Hilfestellung:


$x='<wsd date="2010-07-18 17:04:47" delay="5.0" hum_in="49.0" temp_in="25.300" hum_out="62.0" temp_out="22.500" abs_pressure="1006.300" wind_ave="2.7" wind_gust="3.4" wind_dir="180.0" rain="141.900" status="00">
<wsd date="2010-07-18 16:59:47" delay="5.0" hum_in="49.0" temp_in="25.300" hum_out="59.0" temp_out="22.200" abs_pressure="1006.400" wind_ave="3.4" wind_gust="5.1" wind_dir="225.0" rain="141.900" status="00">
<wsd date="2010-07-18 16:54:47" delay="5.0" hum_in="49.0" temp_in="25.300" hum_out="59.0" temp_out="22.100" abs_pressure="1006.500" wind_ave="3.4" wind_gust="4.8" wind_dir="180.0" rain="141.900" status="00">
<wsd date="2010-07-18 16:49:47" delay="5.0" hum_in="49.0" temp_in="25.300" hum_out="57.0" temp_out="23.100" abs_pressure="1006.100" wind_ave="2.7" wind_gust="4.1" wind_dir="180.0" rain="141.900" status="00">
<wsd date="2010-07-18 16:44:47" delay="5.0" hum_in="48.0" temp_in="25.300" hum_out="54.0" temp_out="22.900" abs_pressure="1006.300" wind_ave="3.1" wind_gust="4.1" wind_dir="157.5" rain="141.900" status="00">
<wsd date="2010-07-18 16:39:47" delay="5.0" hum_in="48.0" temp_in="25.300" hum_out="53.0" temp_out="22.700" abs_pressure="1006.400" wind_ave="3.1" wind_gust="4.8" wind_dir="180.0" rain="141.900" status="00">
<wsd date="2010-07-18 16:34:47" delay="5.0" hum_in="48.0" temp_in="25.200" hum_out="52.0" temp_out="22.600" abs_pressure="1006.500" wind_ave="4.1" wind_gust="5.8" wind_dir="180.0" rain="141.900" status="00">
<wsd date="2010-07-18 16:29:47" delay="5.0" hum_in="48.0" temp_in="25.200" hum_out="54.0" temp_out="22.400" abs_pressure="1006.400" wind_ave="4.1" wind_gust="6.5" wind_dir="180.0" rain="141.900" status="00">
<wsd date="2010-07-18 16:24:47" delay="5.0" hum_in="48.0" temp_in="25.200" hum_out="54.0" temp_out="22.100" abs_pressure="1006.400" wind_ave="4.1" wind_gust="5.8" wind_dir="180.0" rain="141.900" status="00">
<wsd date="2010-07-18 16:19:47" delay="5.0" hum_in="48.0" temp_in="25.200" hum_out="55.0" temp_out="21.900" abs_pressure="1006.400" wind_ave="3.7" wind_gust="6.1" wind_dir="180.0" rain="141.900" status="00">
';

$erg = explode(">", $x);
foreach($erg as $str)
{
    if (preg_match_all('/"([^"]+)"/', $str, $m))
    {
        print_r ($m[1]);
    }
    else {
       //preg_match returns the number of matches found,
       //so if here didn't match pattern
            }
}


In der Konsole bei der Ausgabe „html Filterung“ ausschalten.