Jesteś w » Strona główna » Artykuły i porady » artykuł
PLIKI COOKIES: Serwis używa cookies. Więcej informacji w regulaminie serwisu. OK (wyłącz komunikat)

Artykuły i porady

  • Jak zrobić banner wyświetlający dane ze stacji pogodowej?

  • 2012-05-09 17:29 | aktualizacja: 2016-06-17 09:21
    4 pkt
  • Dowiesz się jak w prosty sposób i przy użyciu języka programowania PHP, zrobić banner pogodowy wyświetlający informacje pogodowe z własnej stacji meteorologicznej. Skrypt bannera pobiera dane z programu Cumulus.


  • Tak będzie wyglądał nasz banner pogodowy


    Kilka przydatnych informacji


    Banner wykorzystuje plik realtime.txt generowany przez program Cumulus. Cumulus to darmowe oprogramowanie do pobierania, przechowywania i wyświetlania danych z popularnych elektronicznych stacji pogodowych takich jak np. Davis Vantage, FOE WH1080/2080/3080, Oregon Scientific i innych.

    Plik realtime.txt to jednoliniowy plik tekstowy z aktualnymi danymi pogodowymi, które są odczytywane z sensorów stacji meteo. Dane pogodowe są oddzielane spacjami, przykładowa linia może wyglądać tak:

    08-05-12 21:48:19 14.7 85 12.2 0.2 0.0 45 0.0 0.0 1011.3 NE 0 km/h C hPa mm 37.1 +0.1 27.6 280.2 0.0 23.7 54 14.7 -0.6 20.3 10:35 12.7 07:02 5.6 11:55 14.8 11:33 1014.0 00:00 1010.8 18:46 1.9.2 1031 2.5 14.7 17.0 0.0 0.0 0 44 0.0 5 0 0 NE 310 m 15.3 0.0 0 0


    Aby plik był generowany, w programie Cumulus należy zaznaczyć w konfiguracji "Internet Settings" opcje "enable realtime" i podać w "realtime intervals" jak często plik ma być aktualizowany - np. co 300 sekund (5 minut).

    Opis kodu skryptu bannera pogodowego


    Cały skrypt i tło graficzne znajdziecie na końcu artykułu w załącznikach. Kod skryptu po pobraniu zapisujemy w pliku o rozszerzeniu .php. W naszym przykładzie będzie to plik "pogoda_baner.php". Załączony plik tła zapisujemy jako "tlo.png".

    Najpierw podajemy adres URL do naszego pliku realtime.txt np.:

    $url='http://jakas_domena.pl/realtime.txt’;


    Odczytujemy plik realtime.txt, rozdzielamy wartości i wczytujemy do tablicy.

    $realtime=@file_get_contents($url);

    if(empty($realtime))
    {
    exit;
    }

    $pogoda=explode(' ',trim($realtime));


    Tworzymy oddzielne zmienne dla symbolu °C i °, zamieniamy encje stopnia na odpowiedni znak.

    $symbol_temp=html_entity_decode('°'.$pogoda['14']);
    $symbol_stop=html_entity_decode('°');


    Tworzymy dane pogodowe do wyświetlenia na bannerze. Jeżeli chcemy się odwołać do 1 wartości z pliku realtime.txt to robimy to tak $pogoda['0'].

    $tytul='Pogoda w górach (800m n.p.m.)';
    $tekst1='Temperatura: '.$pogoda['2'].$symbol_temp.' (zmiana '.$pogoda['25'].$symbol_temp.')';
    $tekst2='Temperatura odczuwalna: '.$pogoda['24'].$symbol_temp;
    $tekst3='Wilgotność: '.$pogoda['3'].'%';
    $tekst4='Punkt rosy: '.$pogoda['4'].$symbol_temp;
    $tekst5='Ciśnienie: '.$pogoda['10'].$pogoda['15'].' (zmiana '.$pogoda['18'].$pogoda['15'].')';
    $tekst6='Wiatr: '.$pogoda['6'].$pogoda['13'].' '.$pogoda['11'].' ('.$pogoda['7'].$symbol_stop.') '.$pogoda['12'].' Beauforta';
    $tekst7='Wiatr porywy: '.$pogoda['40'].$pogoda['13'];
    $tekst8='Deszcz: '.$pogoda['9'].$pogoda['16'];
    $tekst9='Data: '.$pogoda['0'].' '.$pogoda['1'];


    Tworzymy obrazek PNG z pliku tlo.png, plik musi być umieszczony w tym samym katalogu co skrypt.

    header('Content-type: image/png');
    $im=imagecreatefrompng('tlo.png');


    Jeżeli nie chcemy korzystać z wcześniej przygotowanej grafiki zamieniamy powyższe linie na:

    header('Content-type: image/png');
    $im = imagecreatetruecolor(320, 205);


    Deklarujemy kolory, które zamierzamy wykorzystać.

    $kolor['czarny'] = imagecolorallocate($im, 0, 0, 0);
    $kolor['czerwony'] = imagecolorallocate($im,255,0,0);
    $kolor['czerwony2'] = imagecolorallocate($im,162,64,51);
    $kolor['zielony'] = imagecolorallocate($im,51,255,34);
    $kolor['bialy'] = imagecolorallocate($im, 255,255,255);
    $kolor['szary'] = imagecolorallocate($im, 197,216,221);
    $kolor['niebieski'] = imagecolorallocate($im,153,204,255);
    $kolor['zolty'] = imagecolorallocate($im,255,255,48);
    $kolor['zolty2'] = imagecolorallocate($im,255,255,145);
    $kolor['zolty3'] = imagecolorallocate($im,255,204,0);
    $kolor['rozowy'] = imagecolorallocate($im,255,0,102);
    $kolor['fiolet'] = imagecolorallocate($im,0,0,128);


    Kolorujemy tło tytułu.

    imagefilledrectangle( $im, 1 ,1, 235, 20 ,$kolor['rozowy']);


    Dodajemy obwódkę do grafiki.

    imagerectangle( $im, 0 ,0, 319, 204 ,$kolor['rozowy']);
    imagerectangle( $im, 1 ,1, 318, 203 ,$kolor['rozowy']);


    Nakładamy na obrazek informacje pogodowe.

    imagestring($im, 4, 5, 2, $tytul, $kolor['bialy']);
    imagestring($im, 4, 5, 25, $tekst1, $kolor['zielony']);
    imagestring($im, 4, 5, 45, $tekst2, $kolor['zielony']);
    imagestring($im, 4, 5, 65, $tekst3, $kolor['zielony']);
    imagestring($im, 4, 5, 85, $tekst4, $kolor['zielony']);
    imagestring($im, 4, 5, 105, $tekst5, $kolor['niebieski']);
    imagestring($im, 4, 5, 125, $tekst6, $kolor['zolty']);
    imagestring($im, 4, 5, 145, $tekst7, $kolor['zolty']);
    imagestring($im, 4, 5, 165, $tekst8, $kolor['zolty2']);
    imagestring($im, 4, 5, 185, $tekst9, $kolor['bialy']);


    Wyświetlamy obrazek w przeglądarce.

    imagepng($im);
    imagedestroy($im);


    Aby wyświetlić banner na stronie WWW dodajemy poniższą linię.

    <img src="http://adres_strony.pl/pogoda_baner.php" alt="Mój Banner Pogodowy" />


    Dodanie prognozy pogody - modyfikacja kodu


    Jeżeli na bannerze chcemy umieścić także prognozę pogody znajdującą się w pliku Strings.ini, to dodajemy do skryptu poniższą funkcję.

    function prognoza_pogody($numer)
    {
    $forecast['0']='Prognoza Niedostępna';
    $forecast['1']='Stabilna dobra pogoda';
    $forecast['2']='Dobra pogoda';
    $forecast['3']='Poprawa pogody';
    $forecast['4']='Dobra pogoda, coraz mniej stabilna';
    $forecast['5']='Dobra pogoda, możliwe opady przelotne';
    $forecast['6']='Dość dobra pogoda, poprawa';
    $forecast['7']='Dość dobra pogoda, początkowo możliwe opady';
    $forecast['8']='Dość dobra pogoda, później opady';
    $forecast['9']='Początkowo opady, poprawa pogody';
    $forecast['10']='Zmienna, poprawa pogody';
    $forecast['11']='Dość dobra pogoda, opady o charakterze przelotnym';
    $forecast['12']='Raczej niestabilna, później poprawa pogody';
    $forecast['13']='Pogoda niestabilna, prawdopodobna poprawa pogody';
    $forecast['14']='Deszczowo, okresowe przejaśnienia';
    $forecast['15']='Deszczowo, coraz mniej stabilna pogoda';
    $forecast['16']='Zmienna pogoda, niewielkie opady';
    $forecast['17']='Niestabilna pogoda, okresowo krótkotrwała poprawa pogody';
    $forecast['18']='Niestabilna pogoda, następnie opady';
    $forecast['19']='Niestabilna pogoda, niewielkie opady';
    $forecast['20']='Przeważnie bardzo niestabilna pogoda';
    $forecast['21']='Przelotne opady, pogorszenie pogody';
    $forecast['22']='Okresowo opady, bardzo niestabilna pogoda';
    $forecast['23']='Opady w krótkich odstępach czasu';
    $forecast['24']='Opady, bardzo niestabilna pogoda';
    $forecast['25']='Burzowo, możliwa poprawa pogody';
    $forecast['26']='Burzowo, duże opady';

    return $forecast[$numer];
    }


    Tworzymy nową linie tekstową i dodajemy kolejną linię nakładającą tekst na obrazek (imagestring) np.:

    $tekst10=prognoza_pogody($pogoda['48']);
    imagestring($im, 4, 5, 205, $tekst10, $kolor['bialy']);


    Oczywiście, musimy przygotować nowy pliku tlo.png o innych wymiarach. Jeżeli nie chcemy korzystać z zewnętrznego pliku grafiki to trzeba zmienić wymiary obrazka np. na:

    $im = imagecreatetruecolor(320, 225);


    Trzeba też zmienić wszystkie współrzędne x i y w funkcjach: imagestring, imagerectangle, imagefilledrectangle.

    Wykorzystanie własnej czcionki - modyfikacja kodu


    Aby nasz baner był jeszcze ładniejszy, możemy wykorzystać dowolną czcionkę TrueType np. jedną z czcionek Windows.

    Kod nakładający informacje pogodowe z imagestring zamieniamy na poniższy:

    $font='./arial.ttf';

    imagettftext($im, 14, 0, 5, 17, $kolor['bialy'], $font, $tytul);
    imagettftext($im, 11, 0, 5, 38, $kolor['zielony'], $font, $tekst1);
    imagettftext($im, 11, 0, 5, 58, $kolor['zielony'], $font, $tekst2);
    imagettftext($im, 11, 0, 5, 78, $kolor['zielony'], $font, $tekst3);
    imagettftext($im, 11, 0, 5, 98, $kolor['zielony'], $font, $tekst4);
    imagettftext($im, 11, 0, 5, 118, $kolor['niebieski'], $font, $tekst5);
    imagettftext($im, 11, 0, 5, 138, $kolor['zolty'], $font, $tekst6);
    imagettftext($im, 11, 0, 5, 158, $kolor['zolty'], $font, $tekst7);
    imagettftext($im, 11, 0, 5, 178, $kolor['zolty2'], $font, $tekst8);
    imagettftext($im, 11, 0, 5, 198, $kolor['bialy'], $font, $tekst9);


    $font to nazwa naszej czcionki TrueType wgranej do katalogu ze skryptem. Tekst w funkcji imagettftext musi być w kodowaniu UTF-8.

    Format pliku realtime.txt


    Poniżej znajdziecie szczegółowy opis formatu pliku realtime.txt. Index to numer elementu w tablicy $pogoda.


    Index Przykład Opis
    0 2019-08-09 Data (zawsze dd / mm / rr)
    1 16:03:45 Czas (zawsze hh: mm: ss)
    2 8,4 Temperatura zewnętrzna
    3 84 Wilgotność względna
    4 5,8 Punkt rosy
    5 24,2 Prędkość wiatru (średnia)
    6 33 Ostatni odczyt prędkości wiatru
    7 261 Kierunek wiatru (stopnie)
    8 0 Aktualny deszcz (za godzinę)
    9 1 Deszcz dzisiaj
    10 999,7 Ciśnienie atmosferyczne
    11 W Aktualny kierunek wiatru (kierunki kompasu)
    12 6 Prędkość wiatru w skali Beauforta
    13 kmh Jednostka wiatru - m / s, mph, km / h, kts
    14 C Jednostka temperatury - stopień C, F
    15 hPa Jednostka ciśnienia - mb, hPa, in
    16 mm Jednostka deszczu - MM, in
    17 146,6 Wind Run (dzisiaj)
    18 +0.1 Wartość tendencji ciśnienia
    19 85,2 Miesięczne opady deszczu
    20 588,4 Roczne opady deszczu
    21 11,6 Wczorajsze opady deszczu
    22 20,3 Temperatura wewnątrz
    23 57 Wilgotność wewnętrzna
    24 3,6 Temperatura odczuwalna
    25 -0,7 Wartość trendu temperatury
    26 10,9 Dzisiejsza temperatura maksymalna
    27 12:00 Czas dzisiejszej temperatury maksymalnej (hh: mm)
    28 7,8 Dzisiejsza temperatura minimalna
    29 14:41 Czas dzisiejszej temperatury minimalnej (hh: mm)
    30 37,4 Dzisiejsza maksymalna prędkość wiatru (średnia)
    31 14:38 Czas dzisiejszej maksymalnej prędkości wiatru (średnia) (hh: mm)
    32 44 Dzisiejsze maksymalne porywy wiatru
    33 14:28 Czas dzisiejszych maksymalnych porywów wiatru (hh: mm)
    34 999,8 Dzisiejsze maksymalne ciśnienie
    35 16:01 Czas dzisiejszego maksymalnego ciśnienia (gg: mm)
    36 998,4 Dzisiejsze minimalne ciśnienie
    37 12:06 Czas dzisiejszego minimalnego ciśnienia (gg: mm)
    38 1.8.7 Wersja Cumulusa
    39 819 Cumulus numer kompilacji
    40 36 10-minut, maksymalne porywy wiatru
    41 10,3 Wskaźnik ciepła (heat index)
    42 10,5 humidex
    43 13 UV Index
    44 0,2 ewapotranspiracja dzisiaj
    45 14 Promieniowanie słoneczne W/m2
    46 260 10-minut, średni kierunek wiatru (w stopniach)
    47 2,3 Opady deszczu z ostatniej godziny
    48 3 Numer bieżącej prognozy zgodnie z plikiem Strings.ini. Jeśli prognoza nie jest dostarczana przez stację i nie jest generowana przez Cumulusa to zwracana jest wartość 0 (zero)
    49 1 Flaga wskazująca, że lokalizacja stacji pogodowej jest obecnie w świetle dziennym (1 = tak, 0 = Nie)
    50 1 Flaga wskazująca czy stacja straciła kontakt ze zdalnymi czujnikami - tylko dla stacji FOE, (1 = Tak, 0 = Nie)
    51 NNW Średnia kierunek wiatru
    52 2040 Podstawa chmur
    53 ft Jednostka podstawy chmur
    54 12,3 Pozorna temperatura
    55 11,1 Słoneczne godziny do tej pory dzisiaj
    56 420,1 Aktualne teoretyczne maksymalne promieniowanie słoneczne
    57 1 Czy jest słonecznie? 1 jeśli świeci słońce, inaczej 0


    Autor: Parasol (Stacje-Pogody.pl)
  • Przykładowy banner pogodowy
    Tło bannera pogodowego
  • Komentarze (1)

    • Ocena treści
      Komentarz
    • 4
      A z jaką stacją może ten skrypt współpracować? Chciałbym zrobić swoją stację i nie wiem którą wybrać. Chciałbym żeby miała LAN i może też WiFi. Panel pracujący w niskich temperaturach - pomieszczenie nieogrzewane. Ktoś może pomóc?
      Data: 2020-12-15 15:32:21
      Dodał: Krzysztof
    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
 
Copyright © 2021 Stacje-Pogody.pl. Korzystanie z serwisu oznacza akceptację regulaminu.
Powered by WMrecenzje