• Willkommen im Forum „Wetterstationsforum.info - Archiv“.
 

Neuigkeiten:

Dieses Forum dient ausschließlich zu Archivzwecken.
Für Fragen nutze bitte unser aktuelles Forum, welches du unter https://wetterstationsforum.info findest.

Hauptmenü

Eldstad Wetterstation (Wifi EW 001)

Begonnen von Hardfecx, 09.05.2014, 15:59:34

⏪ vorheriges - nächstes ⏩

leknilk0815

Zitat von: habus am 09.12.2014, 13:42:32
Da vermute ich eher, das das am Einsatz von NiMh-Akkus liegt. Bei einer Reihenschaltung von 3 Stück fehlen da immerhin schon 9V gegenüber den RAM-Zellen.
...willst Du das so stehen lassen?
ZitatUnd die winzige Solarfläche wird sicherlich nicht genug Power haben um den Ladezustand der Akkus einigermaßen zu erhalten.
Doch, hat sie locker. Die RAM's erhalten sich ja auch (normalerweise...)
Gruß - Toni

KS300+WS444PC (WSL/WSWIN)+Windrichtung+Sonnenschein, CCU2, KS550, KS888

habus


habus

Mal ne andere Frage:

Obwohl meine Wetterstation ärgerlicherweise schon wieder abgeschmiert ist, das letzte Tauschgerät hatte einen USB-Anschluß. Weiß jemand, was man damit anfangen kann?

Gruß Habus

24Online

Hallo, da dieser Thread nun in Richtung AA-Akkus "abgedriftet ist, ist denn der Ursprung geklärt? Ich könnte noch die XML-Erstellung zu meinen Skriptschnipsel liefern.
Ist man in kleinen Dingen nicht geduldig, bringt man die großen Vorhaben zum Scheitern.

https://heiligensee-wetter.de (Berlin, Schulzendorf)
https://heiligensee-wetter.de/technik.php (HP1000)
http://www.owsd-format.de

habus

Öhm... warum machst Du es nicht einfach? ;)

24Online

#105
Ja, da hast Du sicher recht. :D :D :D Also hierzu aber noch kurz eine Info:

Meine HP1000 schreibt (per Konfiguration) in eine updateweatherstation.php auf einem lokal betriebenen Server. Um die Daten auch zu wunderground zu bekommen, habe ich meine lokale updateweatherstation.php um diese Funktion erweitert. Das Resultat meiner updateweatherstation.php ist demnach ein lokale XML-Datei (daten.xml) mit den Datenformaten wie ich sie gerne hätte zur Weiterverarbeitung und die Aktualisierung der Wunderground Seite.

updateweatherstation.php

<?php // Wetterdatenübernahme HP1000, Autor: Joachim Bieniak// Version 0.7// Variablen der PWS aufnehmen$ID = urlencode($_GET["ID"]);$PASSWORD = urlencode($_GET["PASSWORD"]);$indoortempf = $_GET["indoortempf"];$tempf = $_GET["tempf"];$dewptf = $_GET["dewptf"];$windchillf = $_GET["windchillf"];$indoorhumidity = $_GET["indoorhumidity"];$humidity = $_GET["humidity"];$windspeedmph = $_GET["windspeedmph"];$windgustmph = $_GET["windgustmph"];$winddir = $_GET["winddir"];$absbaromin = $_GET["absbaromin"];$baromin = $_GET["baromin"];$rainin = $_GET["rainin"];$dailyrainin = $_GET["dailyrainin"];$weeklyrainin = $_GET["weeklyrainin"];$monthlyrainin = $_GET["monthlyrainin"];$yearlyrainin = $_GET["yearlyrainin"];$solarradiation = $_GET["solarradiation"];$UV = $_GET["UV"];$dateutc =  urlencode($_GET["dateutc"]);$softwaretype = $_GET["softwaretype"];$action = urlencode($_GET["action"]);$realtime = $_GET["realtime"];$rtfreq = $_GET["rtfreq"];// Aktuelles Datum und Uhrzeit ermitteln$timestamp = time();$datum = date("d.m.Y",$timestamp);$uhrzeit = date("H:i:s",$timestamp);$tage = array("Sonntag", "Montag", "Dienstag", "Mittwoch", "Donnerstag", "Freitag", "Samstag");$tag = date("w");$utcdate = date("Y-m-d",$timestamp);$now = $utcdate."T".$uhrzeit;    // Umrechnung Lufttemperatur von F in C$tempc = ($tempf - 32) * (5/9);$tempc = round($tempc, 1);//Umrechnung Taupunkt von F in C$dewptc = ($dewptf - 32) * (5/9);$dewptc = round($dewptc, 1);//Umrechnung Windchill von F in C$wct_c = ($windchillf - 32) * (5/9);$wct_c = round($wct_c, 1);//Umrechnung Inndoortemp von F in C$indoortemp_c = ($indoortempf - 32) * (5/9);$indoortemp_c = round($indoortemp_c, 1);//Umrechnung Rel. Luftdruck von inHG in hPA$relpres = ($baromin * 33.862);$relpres = round($relpres, 1);//Umrechnung Abs. Luftdruck von inHG in hPA$abspres = ($absbaromin * 33.862);$abspres = round($abspres, 1);        settype($wind_gust_mph,"float");    //Umrechnung Windgeschwindigkeit von mph zu kmh$windkmh = ($windspeedmph * 1.6);settype($windkmh,"float");$windkmh = round($windkmh, 1);//Umrechnung Windboeengeschwindigkeit von mph zu kmh$windgustkmh = ($windgustmph * 1.6);settype($windgustkmh,"float");$windgustkmh = round($windgustkmh, 1);//Umrechnung Niederschlag Stunde$rain = ($rainin * 25.4);$rain = round($rain, 2);//Umrechnung Niederschlag Tag$raind = ($dailyrainin * 25.4);$raind = round($raind, 1);//Umrechnung Niederschlag Woche$rainw = ($weeklyrainin * 25.4);$rainw = round($rainw, 1);//Umrechnung Niederschlag Monat$rainm = ($monthlyrainin * 25.4);$rainm = round($rainm, 1);//Umrechnung Niederschlag Jahr$rainj = ($yearlyrainin * 25.4);$rainj = round($rainj, 1);// Funktion zum Errechnen der Beaufort-Werte der derzeitigen Windgeschwindigkeit        function kmh2bft($windkmh)    {        $val = round($windkmh);        if($val >  117)    {$bft = 12;}        if($val <= 117)    {$bft = 11;}        if($val <  103)    {$bft = 10;}        if($val <  89)     {$bft = 9;}        if($val <  75)     {$bft = 8;}        if($val <  62)     {$bft = 7;}        if($val <  50)     {$bft = 6;}        if($val <  39)     {$bft = 5;}        if($val <  29)     {$bft = 4;}        if($val <  20)     {$bft = 3;}        if($val <  12)     {$bft = 2;}        if($val <  6)      {$bft = 1;}        if($val <  3)      {$bft = 0;}    return $bft;    }     // Funktion zum Errechnen der Beaufort-Werte der derzeitigen Windböen          function kmhgust2bft($windgustkmh)    {        $valgust = round($windgustkmh);        if($valgust >  117)    {$bftgust = 12;}        if($valgust <= 117)    {$bftgust = 11;}        if($valgust <  103)    {$bftgust = 10;}        if($valgust <  89)     {$bftgust = 9;}        if($valgust <  75)     {$bftgust = 8;}        if($valgust <  62)     {$bftgust = 7;}        if($valgust <  50)     {$bftgust = 6;}        if($valgust <  39)     {$bftgust = 5;}        if($valgust <  29)     {$bftgust = 4;}        if($valgust <  20)     {$bftgust = 3;}        if($valgust <  12)     {$bftgust = 2;}        if($valgust <  6)      {$bftgust = 1;}        if($valgust <  3)      {$bftgust = 0;}    return $bftgust;    }     // Array zur Zuweisung Werte zu Beaufort-Beschreibung        $bfttext = array(    '12' => "Orkan",    '11' => "orkanartiger Sturm",    '10' => "schwerer Sturm",    '9'  => "Sturm",    '8'  => "st&uuml;rmischer Wind",    '7'  => "steifer Wind",    '6'  => "starker Wind",    '5'  => "frische Brise",    '4'  => "m&auml;&szlig;ige Brise",    '3'  => "schwache Brise",    '2'  => "leichte Brise",    '1'  => "leiser Zug",    '0'  => "still");// Ermittlung Beaufort Werte und Beschreibungen    $windbft = kmh2bft($windkmh);$gustbft = kmhgust2bft($windgustkmh);$windbfttext = $bfttext[kmh2bft($windkmh)];$gustbfttext = $bfttext[kmh2bft($windgustkmh)];// Ermittlung UV-Index Beschreibungif ($UV <= 2)     {    $uvtext = "Niedrig";    }    if ($uv >= 3 AND $uv <= 5)        {    $uvtext = "Mittel";    }    if ($uv >= 6 AND $uv <= 7)      {    $uvtext = "Hoch";    }    if ($uv >= 8 AND $uv <= 10)     {        $uvtext = "Sehr hoch";    }    if ($uv >= 11)     {    $uvtext = "Extrem";        }    // Ermitteln Sonnenaufgang, Sonnenuntergang    $gmt_offset = 1; $zenith=90+50/60; $sunset = date_sunset($timestamp, SUNFUNCS_RET_TIMESTAMP, 52.610935, 13.243770, $zenith, $gmt_offset); $sunrise= date_sunrise($timestamp, SUNFUNCS_RET_TIMESTAMP, 52.610935, 13.243770, $zenith, $gmt_offset); $sunset = date("H:i",$sunset);$sunrise = date("H:i",$sunrise);// Ermitteln der Mondphase$ursprung = mktime(18,31,18,12,22,1999); $akt_date = time(); define('ZYCLUS', floor(29.530588861 * 86400)); $mondphase = round(((($akt_date - $ursprung) / ZYCLUS) - floor(($akt_date - $ursprung) / ZYCLUS)) * 100, 0); // $mondphasen_img = round(($mondphase /50),1) *50; // if ($mondphasen_img == 100) $mondphasen_img == 0; if ($mondphase <= 1 || $mondphase >= 99 ) $phase_text = 'Vollmond'; elseif ($mondphase > 1 && $mondphase < 49) $phase_text = 'abnehmender Mond'; elseif ($mondphase >= 49 && $mondphase <= 51) $phase_text = 'Neumond'; else $phase_text = 'zunehmender Mond'; // Ermittlung Windrichtungen kurz und langfunction getWindDirShortName($wd1)    {        $WindDirShortNames = array("N", "NNO", "NO", "ONO", "O", "OSO", "SO", "SSO", "S", "SSW", "SW", "WSW", "W", "WNW", "NW", "NNW");        $WindDirShortName = $WindDirShortNames[(int)(round($wd1 / 22.5))];        return $WindDirShortName;    }    function getWindDirLongName($wd2)    {        $WindDirLongNames = array("NORD", "NORDNORDOST", "NORDOST", "OSTNORDOST", "OST", "OSTSUEDOST", "SUEDOST", "SUEDSUEDOST", "SUED", "SUEDSUEDWEST", "SUEDWEST", "WESTSUEDWEST", "WEST", "WESTNORDWEST", "NORDWEST", "NORDNORDWEST");        $WindDirLongName = $WindDirLongNames[(int)(round($wd2 / 22.5))];        return $WindDirLongName;    }$winddirkurz = getWindDirShortName($winddir);$winddirlang = getWindDirLongName ($winddir);$solarradiation = round($solarradiation, 0);    //XML-Datei Schreibenif(!$xmlw=simplexml_load_file('daten.xml')){        trigger_error('Error reading XML file',E_USER_ERROR);}$xmlw->sektion02->gruppe02->date_time = $now;$xmlw->sektion02->gruppe02->date = $datum;$xmlw->sektion02->gruppe02->time = $uhrzeit;$xmlw->sektion02->gruppe03->temp_air_2m_0_c = $tempc;$xmlw->sektion02->gruppe03->temp_dewpoint_c = $dewptc;$xmlw->sektion02->gruppe03->temp_wct_c = $wct_c; $xmlw->sektion02->gruppe04->humidity = $humidity;$xmlw->sektion02->gruppe04->baromin = $relpres;$xmlw->sektion02->gruppe04->absbaromin = $abspres;$xmlw->sektion02->gruppe05->windspeed = $windkmh;$xmlw->sektion02->gruppe05->windbft = $windbft;$xmlw->sektion02->gruppe05->windbfttxt =$windbfttext;$xmlw->sektion02->gruppe05->windgust = $windgustkmh;$xmlw->sektion02->gruppe05->gustbft = $gustbft;$xmlw->sektion02->gruppe05->gustbfttxt =$gustbfttext;$xmlw->sektion02->gruppe05->winddir = $winddir;$xmlw->sektion02->gruppe06->rainin = $rain; $xmlw->sektion02->gruppe06->dailyrainin = $raind; $xmlw->sektion02->gruppe06->weeklyrainin = $rainw;$xmlw->sektion02->gruppe06->monthlyrainin = $rainm;$xmlw->sektion02->gruppe06->yearlyrainin = $rainj;$xmlw->sektion02->gruppe08->solar_radiation_0 = $solarradiation; $xmlw->sektion02->gruppe08->uvi_0 = $UV;$xmlw->sektion02->gruppe08->uvi_txt = $uvtext;$xmlw->sektion02->gruppe99->indoortemp_c = $indoortemp_c; $xmlw->sektion02->gruppe99->indoorhumidity = $indoorhumidity; $xmlw->sektion02->gruppe99->sunset = $sunset;$xmlw->sektion02->gruppe99->sunrise = $sunrise;$xmlw->sektion02->gruppe99->mondphase = $phase_text;$xmlw->sektion02->gruppe99->winddirkurz = $winddirkurz;$xmlw->sektion02->gruppe99->winddirlang = $winddirlang;$handle = fopen("daten.xml", "wb"); fwrite($handle, $xmlw->asXML());fclose($handle);// www.wunderground.com updaten$url = fopen("http://weatherstation.wunderground.com/weatherstation/updateweatherstation.php?ID=$ID&PASSWORD=$PASSWORD&action=$action&dateutc=$dateutc&tempf=$tempf&dewptf=$dewptf&humidity=$humidity&winddir=$winddir&windspeedmph=$windspeedmph&windgustmph=$windgustmph&UV=$UV&solarradiation=$solarradiation&baromin=$baromin&rainin=$rainin&dailyrainin=$dailyrainin&realtime=$realtime", "r");fclose($url);echo "success";?>



Die xml-Datei sieht dann so aus:


<?xml version="1.0" encoding="utf-8"?>
<data>
    <sektion01>
        <gruppe00>
            <data_format>OWSD-Format</data_format>
            <data_format_v>V0.0.1</data_format_v>
            <data_format_url>http://www.owsd-format.de</data_format_url>
            <data_format_language>DE</data_format_language>
        </gruppe00>
        <gruppe01>
            <station_id>IBERLINB43</station_id>
            <register>Wunderground</register>
            <station_url>http://www.example.org</station_url>
            <station_mail>ID@example.org</station_mail>
            <station_hw>Fine Offset HP1000</station_hw>
            <station_sw>V1.1.1</station_sw>
            <location>Berlin - Schulzendorf </location>
            <country>Deutschland</country>
            <city>Berlin</city>
            <country_code>DE</country_code>
            <pws_timezone>UTC+1</pws_timezone>
            <longitude>52.610935</longitude>
            <latitude>13.243770</latitude>
            <altitude_m>36.88</altitude_m>
            <altitude_f>121</altitude_f>   
        </gruppe01>
        <gruppe11>
            <operator_nickname_0>Nickname</operator_nickname_0>
            <operator_name_0>vorname Nachname</operator_name_0>
            <operator_mail_0>user@example.org</operator_mail_0>
        </gruppe11>
    </sektion01>
    <sektion02>
        <gruppe02>
            <date_time>2015-03-14T10:02:35</date_time>
            <date>14.03.2015</date>
            <time>10:02:35</time>
        </gruppe02>
        <gruppe03>
            <temp_air_2m_0_c>3.6</temp_air_2m_0_c>     
            <temp_dewpoint_c>2.4</temp_dewpoint_c>
            <temp_wct_c>3.6</temp_wct_c>
        </gruppe03>
        <gruppe04>
            <humidity>92</humidity>
            <baromin>1030.1</baromin>
            <absbaromin>1026.7</absbaromin>
        </gruppe04>
        <gruppe05>
            <windspeed>0</windspeed>
            <windbft>0</windbft>
            <windbfttxt>still</windbfttxt>
            <windgust>0</windgust>
            <gustbft>0</gustbft>
            <gustbfttxt>still</gustbfttxt>
            <winddir>46</winddir>
        </gruppe05>
        <gruppe06>
            <rainin>0</rainin>
            <dailyrainin>1</dailyrainin>
            <weeklyrainin>1.3</weeklyrainin>
            <monthlyrainin>18.5</monthlyrainin>
            <yearlyrainin>182.1</yearlyrainin>
        </gruppe06>
        <gruppe08>
            <solar_radiation_0>79</solar_radiation_0>
            <uvi_0>1</uvi_0>
            <uvi_txt>Niedrig</uvi_txt>
        </gruppe08>
        <gruppe99>
            <indoortemp_c>21.7</indoortemp_c>
            <indoorhumidity>49</indoorhumidity>
            <sunset>18:10</sunset>
            <sunrise>06:21</sunrise>
            <mondphase>abnehmender Mond</mondphase>
            <winddirkurz>NO</winddirkurz>
            <winddirlang>NORDOST</winddirlang>
        </gruppe99>   
    </sektion02>
   
</data>



Zur Weiterverarbeitung auf meiner Seite (siehe unten) lese ich dann per PHP die daten.xml aus. Um dies in 2 Lokationen (also lokal und im Internet) zu tun, habe ich eine ähnliche Weiterleitung der Daten (ähnlich wie der zu Wunderground) am Ende des ersten Skriptes zu meiner Internetseite gebaut.

Sicherlich nicht schönste Art PHP zu programmieren, aber diese Skripte laufen so seit rund einem Jahr. Nutzer die diese Skripte verwenden (Anfragen hatte ich 4 oder 5) sind auch alle zum Erfolg gekommen.

Eins noch: Die Datei daten.xml wird mit dieser Variante alle 5-17 Sekunden neu geschrieben bzw. aktualisiert. Meine HP1000 scheint den Intervall eigenständig zu variieren oder andere Einflüsse (Antwortzeitverhalten oder ähnliches) wirken sich hier aus. Um die Skripte  auszuprobieren muss man zunächst eine xml-Datei (daten.xml) mit Grundgerüst erzeugen.

In einigen Beiträgen vorher ging es darum, auf welche Art und Weise man es hinbekommt, das nicht alle Datenintervalle (5-17 sek.) in die Datenbank geschrieben werden. Ich habe ein kleines php-Skript geschrieben, das die Daten aus der daten.xml ausliest und in eine mysql-Datenbank schreibt. Dieses kleine Skript wird alle 5 Minuten durch einen cronjob per sh.skript ausgeführt bzw. aufgerufen. Somit hat man exakt einen 5 Minuten Intervall für die DB-Einträge.

Code des Datenbankupdate-Skripts (update_db.php)


<?php//XML-Datei einlesen if(!$xmlr=simplexml_load_file('daten.xml')){        trigger_error('Error reading XML file',E_USER_ERROR);}// Sektion01/* Gruppe00 einlesen   $data_format = $xmlr->sektion01->gruppe00->data_format;$data_format_v = $xmlr->sektion01->gruppe00->data_format_v;$data_format_url = $xmlr->sektion01->gruppe00->data_format_url;$data_format_language = $xmlr->sektion01->gruppe00->data_format_language;*//* Gruppe01 einlesen$station_id = $xmlr->sektion01->gruppe01->station_id;$register = $xmlr->sektion01->gruppe01->register;$station_url = $xmlr->sektion01->gruppe01->station_url;$station_mail = $xmlr->sektion01->gruppe01->station_mail;$station_hw = $xmlr->sektion01->gruppe01->station_hw;$station_sw = $xmlr->sektion01->gruppe01->station_sw;$location = $xmlr->sektion01->gruppe01->location;$country = $xmlr->sektion01->gruppe01->country;$city = $xmlr->sektion01->gruppe01->city;$country_code = $xmlr->sektion01->gruppe01->country_code;$pws_timezone = $xmlr->sektion01->gruppe01->pws_timezone;$longitude = $xmlr->sektion01->gruppe01->longitude;$latitude = $xmlr->sektion01->gruppe01->latitude;$altitude_m = $xmlr->sektion01->gruppe01->altitude_m;$altitude_f = $xmlr->sektion01->gruppe01->altitude_f;    *//* Gruppe11 einlesen$operator_nickname_0 = $xmlr->sektion01->gruppe11->operator_nickname_0;$operator_name_0 = $xmlr->sektion01->gruppe11->operator_name_0;$operator_mail_0 = $xmlr->sektion01->gruppe11->operator_mail_0;*/// Sektion02// Gruppe02 einlesen$now = $xmlr->sektion02->gruppe02->date_time;$datum = $xmlr->sektion02->gruppe02->date;$uhrzeit = $xmlr->sektion02->gruppe02->time;// Gruppe03 einlesen$tempc = $xmlr->sektion02->gruppe03->temp_air_2m_0_c;$dewptc = $xmlr->sektion02->gruppe03->temp_dewpoint_c;$wct_c = $xmlr->sektion02->gruppe03->temp_wct_c;// Gruppe04 einlesen$humidity = $xmlr->sektion02->gruppe04->humidity;$relpres = $xmlr->sektion02->gruppe04->baromin;$abspres = $xmlr->sektion02->gruppe04->absbaromin;// Gruppe05 einlesen$windkmh = $xmlr->sektion02->gruppe05->windspeed;$windbft = $xmlr->sektion02->gruppe05->windbft;$windbfttext = $xmlr->sektion02->gruppe05->windbfttxt;$windgustkmh = $xmlr->sektion02->gruppe05->windgust;$gustbft = $xmlr->sektion02->gruppe05->gustbft;$gustbfttext = $xmlr->sektion02->gruppe05->gustbfttxt;$winddir = $xmlr->sektion02->gruppe05->winddir;// Gruppe06 einlesen$rain = $xmlr->sektion02->gruppe06->rainin; $raind = $xmlr->sektion02->gruppe06->dailyrainin; $rainw = $xmlr->sektion02->gruppe06->weeklyrainin;$rainm = $xmlr->sektion02->gruppe06->monthlyrainin;$rainj = $xmlr->sektion02->gruppe06->yearlyrainin;// Gruppe08 einlesen$solarradiation = $xmlr->sektion02->gruppe08->solar_radiation_0; $UV = $xmlr->sektion02->gruppe08->uvi_0;$uvtext = $xmlr->sektion02->gruppe08->uvi_txt;// Gruppe99 einlesen$indoortemp_c = $xmlr->sektion02->gruppe99->indoortemp_c; $indoorhumidity = $xmlr->sektion02->gruppe99->indoorhumidity; $sunset = $xmlr->sektion02->gruppe99->sunset;$sunrise = $xmlr->sektion02->gruppe99->sunrise;$phase_text = $xmlr->sektion02->gruppe99->mondphase;$winddirkurz = $xmlr->sektion02->gruppe99->winddirkurz;$winddirlang = $xmlr->sektion02->gruppe99->winddirlang;$db = mysql_connect ("SERVER","USER","PASSWORT")	OR DIE ("&nbsp;Passwort falsch ");$tab = @mysql_select_db ("OWSD-DB")	OR DIE ("&nbsp;");// UPDATE SEKTION01/* Update Gruppe00mysql_query ("UPDATE `SEKTION01` SET     data_format = '$data_format',     data_format_v = '$data_format_v',    data_format_language = '$data_format_language',    data_format_url = '$data_format_url' WHERE id='1'");*/// Update Gruppe01mysql_query ("UPDATE `SEKTION01` SET     station_id = '$station_id',     register = '$register',    station_url = '$station_url',    station_mail = '$station_mail',    station_hw = '$station_hw',    station_sw = '$station_sw',        location = '$location',     country = '$country',    city = '$city',    country_code = '$country_code',        pws_timezone = '$pws_timezone',     longitude = '$longitude',     latitude = '$latitude',     altitude_m = '$altitude_m',     altitude_f = '$altitude_f' WHERE id='1'");///* Update Gruppe11mysql_query ("UPDATE `SEKTION01` SET     operator_nickname = '$operator_nickname_0',     operator_name = '$operator_name_0',    operator_mail = '$operator_mail_0' WHERE id='1'"); *///INSERT SEKTION02mysql_query ("INSERT INTO `SEKTION02` (`date_time`, `date`, `time`, `temp_air_2m_0_c`, `temp_dewpoint_c`, `temp_wct_c`, `humidity`, `baromin`, `absbaromin`, `windspeed`, `windbft`, `windbfttxt`, `windgust`, `gustbft`, `gustbfttxt`, `winddir`, `rain`, `dailyrain`, `weeklyrain`, `monthlyrain`, `yearlyrain`, `solar_radiation_0`, `uvi_0`, `uvi_txt`, `indoortemp_c`, `indoorhumidity`, `sunset`, `sunrise`, `mondphase`, `winddirkurz`, `winddirlang`) VALUES ('$now', '$datum', '$uhrzeit', '$tempc', '$dewptc', '$wct_c', '$humidity', '$relpres', '$abspres', '$windkmh', '$windbft', '$windbfttext', '$windgustkmh', '$gustbft', '$gustbfttext', '$winddir', '$rain', '$raind', '$rainw', '$rainm', '$rainj', '$solarradiation', '$UV', '$uvtext', '$indoortemp_c', '$indoorhumidity', '$sunset', '$sunrise', '$phase_text', '$winddirkurz', '$winddirlang')");mysql_close($db);?>



sh.skript


#!/bin/ash
wget -q -o /dev/null -O /dev/null http://www.example.org/update_db.php


Feedback, Anregungen und Kritik lese ich gerne.

Ausführungen zum Format der Informationen in der xml-Datei und der Datenbankstruktur  findet man hier im Wiki auf der Baustelle "OWSD-Format".

Viele Grüße

24Online
Ist man in kleinen Dingen nicht geduldig, bringt man die großen Vorhaben zum Scheitern.

https://heiligensee-wetter.de (Berlin, Schulzendorf)
https://heiligensee-wetter.de/technik.php (HP1000)
http://www.owsd-format.de

habus

Ich hab das ganze ein wenig anders gelöst, allerdings verarbeite ich die Daten weder lokal noch schicke ich sie an Wunderground, ich schicke sie lediglich an meine eigene Webseite. Das Eintragen in die DB wird bei mir direkt durch die updateweatherstation.php erledigt. Dabei dient das Senden der Daten durch die Station sozusagen gleich als Cronjob.
Um zu verhindern, dass alle Daten in die DB geschrieben werden, lese ich per PHP bei jedem Aufruf durch die Station die Zeit des letzten Datenbankeintrages aus und erlaube das Schreiben erst nach 5 Minuten.

#Zeit des letzten Datenbank-Eintrages auslesen
$_resultat4=mysqli_query($db_link, "SELECT id,zeit FROM wetterdaten2 ORDER BY id DESC");

$_daten4 = mysqli_fetch_array($_resultat4);
$letztereintrag = $_daten4[1];

#Werte in Datenbank eintragen
if (($time > $letztereintrag+300)&&($Luftdruck != 0)) {
$eintrag = "INSERT INTO wetterdaten2


Diese Daten verwende ich eigentlich nur für die verschiedenen Diagramme auf meiner Seite.
Für die laufend aktualisierten Daten auf meinem "Barometer" erstelle ich lediglich eine kleine Textdatei. Das wird auch gleich mit durch die updateweatherstation.php erledigt.

Übrigens sind die Intervalle bei mir ebenfalls so unterschiedlich.

Gruß Habus

24Online

Naja, "Weiterverarbeitung" ist bei mir die Ablage in einer mysql-Datenbank und die Nutzung für die grafische Aufbereitung der Historie (diese wird in Wintermonaten erweitert). Zudem kommt die messwertbezogene Steuerung einiger AVM-SmartHome-Aktoren (auch hierfür habe ich mal ein Skript gepostet). Eine lokale Website (optisch wie die externe nur zusätzlich mit Innentemperatur und -luftfeuchte) macht den Aufruf der externen Seite unnötig, zeigt die für die andere Menschheit uninteressanten Werte und läuft auf einem alten iPad 1 als Display.

Das Posten von Skripten bedarf aus meiner Sicht immer einer etwas aufwändigere Prüfung, das man nicht spontan und ungewollt irgendwelche Secrets mitgibt, die eine Störung des Eigenbetriebs zur Folge haben könnten.

Diese hatte ich gestern Abend nicht zur Hand, deshalb fragte ich zunächst mal nach, ob überhaupt noch Fragen offen sind... :)

Schönes WE
Ist man in kleinen Dingen nicht geduldig, bringt man die großen Vorhaben zum Scheitern.

https://heiligensee-wetter.de (Berlin, Schulzendorf)
https://heiligensee-wetter.de/technik.php (HP1000)
http://www.owsd-format.de

WeatherCrack

Hallo Joachim,

schön Dich hier wieder zu lesen :-) (bin ja einer der 4-5, der Deinen Script als Vorlage verwendet).

Mittlerweile habe ich hier die Eldstad HP1000 V2.1.0 am laufen, da mir die vorherige leider wegen defekter Aussenheit "abhanden" gekommen ist. In der Bedienung/Software/Firmware unterscheidet sich die aber nur sehr unwesentlich. Es gibt in dieser eine USB Schnittstelle, über die man in die Station "hineingucken" kann (die Ordnerstrucktur entspricht in etwa der, der entzippten Updatedateien). Da gibt es allerdings eine weather.dat, welche wohl die gesammelten Daten der Station enthält - leider völlig unbekanntes Format, habe mit allen möglichen Tools versucht da ran zu kommen :-(

Nochmal zu den Intervallen:
Ja, es ist richtig, das Senden aus der WS findet komischerweise alle 5-17 sek. statt, laut techn. Beschreibung angeblich alle 16 sek. Das kann man auch (noch) nirgends einstellen. Einstellen kann man den Uploadintervall, der bei Wunderground entgegengenommen wird. Statt Deines Cronjobs scriptes bietet sich allerdings im MySQL eine recht einfache Möglichkeit an:
Trigger. Damit kann man auch gleich neue DB´s mit min/max/average erzeugen.

Die script-Lösung von habus halte ich dagegen für etwas nachfragewürdig, denn da gehen ja alle min/max-Werte der letzten 300 sek. verloren, ausser wenn bei $letztereintrag + 300 zufällig grad mal min/max getroffen wird.

Alles in allem kann ich sagen, dass man für das Geld (habe eine Reserve-Station für 1xx EUR in der Bucht ersteigert, neu) kaum  etwas besseres bekommen kann - alleine die Dokumentation (USB-Schnittstelle / Updates etc.) vom Hersteller lässt sehr zu wünschen übrig. Aber das ist ja leider bei vielen Herstellern so.

WeatherCrack wünscht auch ein schönes WE

habus

ZitatDie script-Lösung von habus halte ich dagegen für etwas nachfragewürdig, denn da gehen ja alle min/max-Werte der letzten 300 sek. verloren, ausser wenn bei $letztereintrag + 300 zufällig grad mal min/max getroffen wird.

Ja, da hast Du natürlich recht. Ich gehe aber davon aus, dass sich die entsprechenden Werte innerhalb von 5 Minuten nicht sooo dramatisch ändern. Vielleicht 1, 2 Zehntel, aber das nehme ich gern in Kauf. Ein min- oder max-Wert kann ja auch in den 5-17 Sekunden, in denen die Station eh Pause macht, erreicht werden. Ich seh das also gelassen.

Gruß Habus