Hey grappig! Een collega weerstation! :)
Ik draai samen met mijn vader een weerstation. Hij het station en het exporteren van de data, ik de site (ff reclame:
http://www.grandix.nl/). Wij gebruiken WeatherLink als software op een lokale PC die via de seriele koppeling de data van de Davis VP2 exporteert naar een htm-bestand. Deze wordt eens per vijf minuten gegenereerd en verzonden naar een webstek. Onder andere hetweeractueel.nl (HWA - aanrader om mee te doen!) gebruikt dit bestand. Het bestand is dan dus ook gemaakt op aanleverspecificaties van HWA. Je krijgt dan zoiets:
BOF
$date = "29-03-11";
$time = "10:35";
$stationDate = "29-03-11";
$stationTime = "10:25";
$utcTime = " 8:35";
$utcDate = "29-03-11";
$tempUnit = "°C";
$humUnit = "% ";
$barUnit = "hPa";
$rainUnit = "mm";
$rateUnit = "mm/hr";
$windUnit = "km/hr";
$windDirection = "SSE";
$sunriseTime = " 7:25";
$sunsetTime = "20:10";
$outsideTemp = "8.1";
$hiOutsideTemp = "8.1";
$lowOutsideTemp = "1.8";
$lowOutsideTempTime = " 6:57";
$hiOutsideTempTime = "10:24";
$lowMonthlyOutsideTemp = "-1.9";
$hiMonthlyOutsideTemp = "17.6";
$hiYearlyOutsideTemp = "17.6";
$lowYearlyOutsideTemp = "-4.7";
$outsideHumidity = "84";
$lowHumidity = "84";
$hiHumidity = "98";
$lowHumTime = "10:16";
$hiHumTime = " 9:21";
$hiMonthlyHumidity = "100";
$lowMonthlyHumidity = "35";
$hiYearlyHumidity = "100";
$lowYearlyHumidity = "35";
$outsideDewPt = "5.6";
$hiDewpoint = "6.1";
$lowDewpoint = "1.1";
$hiDewpointTime = "10:04";
$lowDewpointTime = " 5:54";
$hiMonthlyDewpoint = "11.1";
$lowMonthlyDewpoint = "-6.7";
$hiYearlyDewpoint = "11.1";
$lowYearlyDewpoint = "-6.7";
$windSpeed = "0.0";
$wind10Avg = "3.2";
$hiWindSpeed = "11.3";
$hiWindSpeedTime = "10:06";
$hiMonthlyWindSpeed = "69.2";
$hiYearlyWindSpeed = "82.1";
$windDir = "148";
$windDirection = "SSE";
$windChill = "8.1";
$lowWindchill = "1.7";
$lowWindchillTime = " 6:46";
$lowMonthlyWindchill = "-5.6";
$lowYearlyWindchill = "-7.8";
$outsideHeatIndex = "8.1";
$hiHeatindex = "8.3";
$hiHeatindexTime = "10:24";
$hiMonthlyHeatindex = "16.7";
$hiYearlyHeatindex = "16.7";
$thw = "8.1";
$hiTHSWindex = "---";
$hiTHSWindexTime = "---";
$hiMonthlyTHSWindex = "---";
$hiYearlyTHSWindex = "---";
$barometer = "1015.8";
$barTrend = "Steady";
$lowBarometer = "1015.5";
$hiBarometer = "1017.3";
$lowMonthlyBarometer = "1000.2";
$hiMonthlyBarometer = "1041.4";
$lowYearlyBarometer = "991.1";
$hiYearlyBarometer = "1041.4";
$lowBarometerTime = " 8:29";
$hiBarometerTime = " 0:35";
$dailyRain = "0.0";
$stormRain = "0.0";
$monthlyRain = "13.6";
$totalRain = "156.8";
$rainRate = "0.0";
$hiRainRate = "0.0";
$hiRainRateTime = "----";
$hiRainRateHour = "0.0";
$hiMonthlyRainRate = "3.4";
$hiYearlyRainRate = "8.8";
$solarRad = "---";
$hiSolarRad = "---";
$hiSolarRadTime = "---";
$hiMonthlySolarRad = "---";
$hiYearlySolarRad = "---";
$uv = "---";
$hiUV = "---";
$hiUVTime = "---";
$hiMonthlyUV = "---";
$hiYearlyUV = "---";
$insideTemp = "17.3";
$hiInsideTemp = "18.6";
$lowInsideTemp = "17.2";
$hiInsideTempTime = " 0:00";
$lowInsideTempTime = " 8:14";
$hiMonthlyInsideTemp = "23.4";
$lowMonthlyInsideTemp = "15.7";
$hiYearlyInsideTemp = "23.4";
$lowYearlyInsideTemp = "15.7";
$insideHumidity = "47";
$hiInsideHumidity = "54";
$lowInsideHumidity = "46";
$hiInsideHumidityTime = " 0:24";
$lowInsideHumidityTime = "10:24";
$hiMonthlyInsideHumidity = "54";
$lowMonthlyInsideHumidity = "27";
$hiYearlyInsideHumidity = "58";
$lowYearlyInsideHumidity = "27";
$insideDewPt = "5.9";
$insideHeatIndex = "16.2";
$forecast = " Increasing clouds with little temperature change. ";
EOF
.Dit lijkt extreem op jouw export, dus wellicht kan je ook wat met de code die ik geschreven heb voor het inlezen van het bestand en het wegschrijven van die data naar de DB.
<?php
$dataUrl = 'http://
www.webstek.nl/openweerdata.htm';;
$dataArray = array(
'wda_date' => 'date',
'wda_time' => 'time',
'wda_station_date' => 'stationDate',
'wda_station_time' => 'stationTime',
'wda_utc_date' => 'utcDate',
'wda_utc_time' => 'utcTime',
'wda_wind_direction' => 'windDir',
'wda_wind_direction_text' => 'windDirection',
'wda_wind_speed' => 'windSpeed',
'wda_wind_speed_max' => 'hiWindSpeed',
'wda_wind_speed_max_time' => 'hiWindSpeedTime',
'wda_wind_chill' => 'windChill',
'wda_time_sunrise' => 'sunriseTime',
'wda_time_sunset' => 'sunsetTime',
'wda_temp_outside' => 'outsideTemp',
'wda_temp_inside' => 'insideTemp',
'wda_hum_outside' => 'outsideHumidity',
'wda_hum_inside' => 'insideHumidity',
'wda_dew_outside' => 'outsideDewPt',
'wda_dew_inside' => 'insideDewPt',
'wda_barometer' => 'barometer',
'wda_barometer_trend' => 'barTrend',
'wda_rain_daily' => 'dailyRain',
'wda_heatindex_outside' => 'outsideHeatIndex',
'wda_heatindex_inside' => 'insideHeatIndex',
'wda_forecast' => 'forecast'
);
$valueArray = array();
$content = file_get_contents($dataUrl);
if ($content !== false) {
$regels = explode(PHP_EOL,$content);
foreach($regels as $regel) {
// Controleer met RegEx of de data voorkomt
foreach($dataArray as $data => $value) {
if(ereg('\$'.$value.' = \"(.*)\"',$regel,$regs)) {
$valueArray[$data] = trim($regs[1]);
}
}
}
}
?>
Er staat geen commentaar in het script, dus even kort wat er gebeurt:
- De url van de export gaat in een var;
- ik maak een array met elke keer als key de kolomnaam in de tabel van de DB, met als waarde de daarbij corresponderende variabele uit de export. Deze gebruik ik later om te matchen;
- ik maak vervolgens een nieuwe array aan en lees de data in;
- als er data is gevonden ga ik op basis van PHP_EOL het bestand splitsen;
- dan loop ik door de array die uit het splitsen komt, elke regel opnieuw. Daarbij loop ik dan ook door de eerste array heen waarbij ik test (de ereg()-functie) of in de regel de gevraagde waarde voorkomt. Als de gevonden is wordt die in de tweede array gezet.
Die tweede array kan je daarna gebruiken. Daar kan je bijvoorbeeld $valueArray['wda_forecast'] gebruiken om de voorspelling te zien.
Ik zie nu dat ik nog de ereg()-functie gebruik. Dit moet aangepast worden, omdat die
deprecated is.
Denk wel dat je hiermee een aardige stap vooruit kan zetten.