fmac
1. November 2014 um 22:03
1
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
fmac
1. November 2014 um 22:31
3
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
fmac
2. November 2014 um 21:00
5
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.