Jesteś w » Strona główna » Artykuły i porady » artykuł

Artykuły i porady

  • Jak na własnej stronie archiwizować pomiary ze stacji pogodowej?

  • 2024-01-17 22:18 | aktualizacja: 2024-10-26 21:13
  • Stacje pogody, które umożliwiają przesyłanie pomiarów do internetowych serwisów pogodowych, takich jak np. Weather Underground, najczęściej mają także możliwość przesyłania danych na dowolną stronę internetową. Możemy taką możliwość wykorzystać do stworzenia archiwum pomiarów z naszej stacji. Jak to zrobić, co jest do tego potrzebne, dowiecie się czytając ten tekst.
  • Archiwizacja pomiarów ze stacji pogodowej na własnej stronie


    Wiele osób zapewne się zastanawia, po co przesyłać dane na własną stronę, jeżeli można przesyłać je do serwisu pogodowego? Odpowiedź jest prosta. Takie dane mogą służyć jako np. archiwum naszych pomiarów. Nie wszystkie stacje, które wysyłają dane do Internetu, mają możliwość archiwizacji pomiarów w pamięci wewnętrznej stacji albo w pamięci zewnętrznej (np. na kartach pamięci). W serwisach pogodowych, nie zawsze jest też możliwość pobrania naszych danych, albo taka możliwość jest ograniczona czasowo, np. do ostatnich kilku miesięcy.

    Czasami jest też tak, że są jakieś problemy z przesyłaniem i chcemy sprawdzić, jakie dane wysyła stacja, albo czy poprawnie przesyła pomiary do serwisów pogodowych. Wtedy przesłanie danych na własną stronę może pozwolić na zidentyfikowanie problemu.

    Takie przesyłanie odbywa się najczęściej za pomocą protokołu Weather Underground (WU) lub Ecowitt. Protokół WU przesyła dane metodą HTTP GET, generuje to długie adresy URL, bo wszystkie informacje pogodowe są zawarte w adresie. Protokół Ecowitt wykorzystuje metodę HTTP POST, adres URL jest krótki, a dane pomiarowe nie są widoczne w odwołaniu URL.

    Możliwość archiwizacji pomiarów na własnej stronie to spora zaleta i warto z niej korzystać.

    Jak odebrać dane na stronie i archiwizować je w plikach tekstowych?


    Jeżeli mamy dostęp do serwera lub hostingu internetowego z obsługą PHP, to możemy to w bardzo prosty sposób zrobić. Wystarczy utworzyć plik PHP np. "archiwum-stacja.php" z poniższym kodem. Kod jest bardzo prosty i uniwersalny.


    <?php
    define('TEST_ODCZYTU','0');

    #Dane typu Ecowitt
    define('PASSKEY','');

    #Dane typu WU
    define('ID','');
    define('PASSWORD','');

    if(!empty($_GET))
    {
    $wejscie=$_GET;
    $metoda='get';
    }
    elseif(!empty($_POST))
    {
    $wejscie=$_POST;
    $metoda='post';
    }

    if(isset($wejscie) and is_array($wejscie))
    {
    if(TEST_ODCZYTU==1)
    {
    $plik_test='test-odczytu-stacja.txt';
    $test_odczytu_dane='Odebrano '.date("Y-m-d H:i:s").' od '.$_SERVER['REMOTE_ADDR']."\n\n";
    $i=0;

    foreach($wejscie as $klucz=>$wartosc)
    {
    $i++;
    $test_odczytu_dane.=$i.") ".$klucz." = ".$wartosc."\n";
    }

    $zapis_test=file_put_contents($plik_test, $test_odczytu_dane);

    exit;
    }

    if($metoda=='get')
    {
    if(empty($wejscie['ID']) or empty($wejscie['PASSWORD']))
    {
    exit;
    }
    elseif(ID<>$wejscie['ID'] or PASSWORD<>$wejscie['PASSWORD'])
    {
    exit;
    }
    }
    elseif($metoda=='post')
    {
    if(empty($wejscie['PASSKEY']) or PASSKEY<>$wejscie['PASSKEY'])
    {
    exit;
    }
    }

    $plik='dane-stacja-'.date('W').'-'.date('o').'.csv';
    $plik_aktualne='dane-aktualne-stacja.txt';

    if(empty($wejscie['dateutc']))
    {
    $wejscie['dateutc']=date("Y-m-d H:i:s");
    }

    $dane="'".implode("','",$wejscie)."'";

    $zapis_aktualnych=file_put_contents($plik_aktualne, $dane);

    if(!is_file($plik))
    {
    $dane_nag="'".implode("','",array_keys($wejscie))."'";
    $zapis=file_put_contents($plik, $dane_nag."\n".$dane."\n");
    }
    else
    {
    $dane=file_get_contents($plik).$dane;
    $zapis=file_put_contents($plik, $dane."\n");
    }
    if(!empty($zapis))
    {
    echo 'success';
    }
    }
    ?>

    Na górze skryptu mamy opcje konfiguracyjne, dla danych przesyłanych protokołem Ecowitt i Weather Underground.

    Jeżeli chcemy korzystać z protokołu Ecowitt wpisujemy klucz PASSKEY np.:
    define('PASSKEY','4DC5CE9D892978D3AE21C73C6D9D9E2D');

    Jeżeli będziemy korzystać z przesyłania WU wpisujemy ID stacji i hasło np:
    define('ID','VFGASANGR9');
    define('PASSWORD','cokoloka230x');

    Skrypt ma możliwość testowego odbioru danych, bez sprawdzania danych uwierzytelniających (ID, PASSWORD, PASSKEY). Odebrane dane są zapisywane w pliku 'test-odczytu-stacja.txt', w każdej linii jest jeden parametr pogodowy i przyporządkowane mu dane.

    Tak może wyglądać plik 'test-odczytu-stacja.txt':
    Odebrano 2024-10-26 20:35:19 od ::1

    1) PASSKEY = 4DC5CE9D892978D3AE21C73C6D9D9E2D
    2) stationtype = GW2000A_V3.1.5.1
    3) runtime = 112824
    4) heap = 137368
    5) dateutc = 2024-09-11 17:33:09

    Testowy odbiór danych włączamy zamieniając 0 na 1 w linii:
    define('TEST_ODCZYTU','1');

    Jest to dobre rozwiązanie, gdy chcemy się zorientować jakie dane przesyła stacja, znaleźć ewentualne problemy, albo chcemy wpisać prawidłowe dane uwierzytelniające w skrypcie.

    Po umieszczeniu pliku na serwerze, trzeba w konfiguracji stacji podać internetowy adres do naszego pliku, który będzie odbierał dane ze stacji.

    Najczęściej jest to tak zrealizowane, że w osobnych polach wpisujemy nazwę domeny lub IP serwera (np. "jakas-domena.pl"), ścieżkę do pliku (np. "/archiwum-stacja.php") oraz port, na który będą przesyłane dane (np. 80). Standardowo dane są przesyłane na port 80, jeżeli podamy port 443 (bezpieczne połączenie https) to upewnijmy się, że stacja taką komunikacje obsługuje.

    W niektórych stacjach podajemy pełny adres do pliku, czyli taki wpis będzie wyglądał np. tak "http://jakas-domena.pl/archiwum-stacja.php".

    Z przesyłaniem wykorzystującym bezpieczne połączenie https (port 443) mogą być problemy, bo nie wszystkie stacje obsługują takie połączenia.

    Ustawienie przesyłania na własny serwer


    Wszystkie dane, które zostaną przesyłane z naszej stacji, za pomocą protokołu WU lub Ecowitt, będą automatycznie zapisywane w plikach tekstowych CSV. Jeden plik będzie zawierał pomiary z jednego tygodnia roku.

    Plik z danymi ze stacji pogodowej
    Przykładowa zawartość pliku z danymi


    Pliki będą miały nazwę "dane-stacja-[tydzień roku]-[rok].csv". W pierwszym wierszu każdego pliku znajdują się nazwy przesyłanych parametrów pogodowych, kolejne dane będą zapisywane w nowej linii. Takie pliki bardzo łatwo zaimportować w arkuszu kalkulacyjnym i tam je analizować.

    Dodatkowo w pliku "dane-aktualne-stacja.txt" będzie zapisywany ostatnio przesłany pomiar. Ten plik będzie można wykorzystać do generowania na własnej stronie aktualnych danych pogodowych lub zrobienia banera pogodowego.

    Myślę, że warto z możliwości przesyłania pomiarów na własną stronę korzystać, tym bardziej, że dużo stacji ma możliwość przesyłania pomiarów jednocześnie do kilku serwisów pogodowych.

    Autor: Parasol (Stacje-Pogody.pl)
  • Dodaj komentarz
    • Ocena treści:
    • Imię (nick):
    • Komentarz:

      Komentarz może mieć do 1999 znaków. Liczba wprowadzonych znaków: 0
    • Wpisz kod z obrazka:    Aby dodać komentarz wpisz kod z obrazka
 
Korzystanie z serwisu oznacza akceptację regulaminu. O nas. Copyright © 2024 Stacje-Pogody.pl. Powered by WMrecenzje