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ć baner z aktualnymi pomiarami z własnej stacji pogodowej?

  • 2024-10-22 21:00 | aktualizacja: 2024-10-22 21:20
  • Stacje pogodowe, które umożliwiają przesyłane pomiarów do serwisów pogodowych, takich jak np. WU, często mają także możliwość przesyłania danych na dowolną stronę WWW. Jak takie dane odebrać na własnej stronie, pisałem w jednym z wcześniejszych tekstów. Teraz dowiecie się, jak wykorzystać te dane do stworzenia banera, wyświetlającego aktualne informacje pogodowe z własnej stacji meteo.
  • Przykładowy wygląd banera pogodowego


    Nasz baner pogodowy będzie wyglądał tak jak powyżej, ale można go zmodyfikować i wyświetlać dowolne informacje, które twoja stacja będzie przesyłała. Będziesz mógł wyświetlać nawet informacje z dodatkowych czujników, które nie są akceptowane we wszystkich serwisach pogodowych, o ile oczywiście takie informacje twoja stacja będzie przesyłać.

    Co będzie potrzebne?


    1. Stacja pogodowa z możliwością przesyłania danych pogodowych na dowolną stronę/serwer (najczęściej za pomocą Wi-Fi).

    W wyszukiwarce stacji pogodowych można znaleźć stacje przesyłając dane do Weather Underground (WU). Jeżeli stacja przesyła dane do WU to jest spore prawdopodobieństwo, że ma także możliwość przesyłania danych na dowolny serwer, ale najlepiej sprawdzić to w instrukcji obsługi.

    2. Skrypt PHP odbierający dane ze stacji na własnej stronie, archiwizujący pomiary i generujący plik z aktualnymi danymi. Skrypt opisałem w tekście "Jak na własnej stronie archiwizować pomiary ze stacji pogodowej?".

    3. Podstawowa znajomość języka programowania PHP.

    Plik danych aktualnych


    Baner wykorzystuje plik "dane-aktualne-stacja.txt", który jest generowany przy odbieraniu danych na własnej stronie. Opisałem to w tekście "Jak na własnej stronie archiwizować pomiary ze stacji pogodowej?". Plik ten zawiera ostatnio przesłane pomiary z naszej stacji.

    Plik danych aktualnych może wyglądać tak:
    'VKNASANGW9','XXXXXX','2024-10-21 16:07:17','210','14','34','79','0.519','39.1','78.2','80','','','vws versionxx','updateraw'


    Robimy baner


    Zaczynamy od ustawienia nazwy pliku z aktualnymi danymi w zmiennej $plik_danych_aktualnych. Później są cztery funkcje przeliczające na odpowiednie jednostki opady, prędkość wiatru, temperaturę i ciśnienie powietrza.


    $plik_danych_aktualnych='dane-aktualne-stacja.txt';

    function przelicz_na_mm($opady)
    {
    return round($opady*25.4,2);
    }

    function przelicz_na_kmh($predkosc_wiatru)
    {
    return round($predkosc_wiatru*1.609344,2);
    }

    function przelicz_na_c($temperatura)
    {
    return round((5/9)*($temperatura-32),2);
    }

    function przelicz_na_hpa($cisnienie)
    {
    return round($cisnienie*33.86389,2);
    }


    Odczytujemy dane z pliku "dane-aktualne-stacja.txt" i wczytujemy do tablicy $pogoda. Jeżeli będziemy chcieli się odwołać do pierwszego parametru z pliku (od lewej) to będzie wyglądało to tak $pogoda['1'], jeżeli do drugiego to $pogoda['2'], do trzeciego $pogoda['3'] itd.


    $dane_aktualne=@file_get_contents($plik_danych_aktualnych);

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

    $pogoda=explode("','",trim($dane_aktualne,"'"));
    array_unshift($pogoda, ' ');


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


    $symbol_stopnia=html_entity_decode('°', ENT_HTML5,'ISO-8859-1');
    $symbol_temperatury=$symbol_stopnia.'C';


    Następnie tworzymy dane pogodowe, które będą wyświetlane na banerze. W zmiennej $tytul umieszczamy nazwę naszej stacji lub miejscowość, te dane będą na samej górze banera. W zmiennych $tekst1-$tekst9 są informacje pogodowe, które mają być wyświetlane. $tekst1 zawiera informacje wyświetlane w 1 linii, $tekst9 w ostatniej linii. Jeżeli chcesz wyświetlać inne informacje, to właśnie w tym miejscu będziesz musiał dokonać zmian.


    $tytul='Pogoda w górach (800m n.p.m.)';
    $tekst1='Ciśnienie: '.przelicz_na_hpa($pogoda['9']).' hPa';
    $tekst2='Temperatura: '.przelicz_na_c($pogoda['7']).$symbol_temperatury;
    $tekst3='Wilgotność: '.$pogoda['11'].'%';
    $tekst4='Punkt rosy: '.przelicz_na_c($pogoda['10']).$symbol_temperatury;
    $tekst5='Prędkość wiatru: '.przelicz_na_kmh($pogoda['5']).' km/h';
    $tekst6='Kierunek wiatru: '.$pogoda['4'].$symbol_stopnia;
    $tekst7='Porywy wiatru: '.przelicz_na_kmh($pogoda['6']).' km/h';
    $tekst8='Deszcz: '.przelicz_na_mm($pogoda['8']).' mm';
    $tekst9='Data: '.$pogoda['3'];


    Plik "dane-aktualne-stacja.txt" może wyglądać różnie, w zależności od stacji pogodowej, dostępnych czujników i protokołu, który jest stosowany do przesyłania tych danych (WU lub Ecowitt). Dlatego, aby zorientować się, które dane w pliku, dotyczą jakich parametrów pogodowych, musimy zajrzeć do jednego z plików archiwum (z rozszerzeniem .csv). Na górze każdego pliku CSV są podane nazwy parametrów pogodowych np. "tempf" to temperatura w stopniach F, a "windspeedmph" to prędkość wiatru w mph.

    Przykładowo, jeżeli chcemy się odwołać na banerze do prędkości wiatru, to liczymy, który od lewej jest "windspeedmph". W moim pliku "windspeedmph" jest 5 od lewej, to odwołanie do wartości tego parametru wygląda tak $pogoda['5']. Ale w twoim pliku danych aktualnych może być inaczej, np. ten parametr może być 7, wtedy trzeba zmodyfikować linię $tekst5 na poniższą:


    $tekst5='Prędkość wiatru: '.przelicz_na_kmh($pogoda['7']).' km/h';


    Trzeba wszystkie dane w zmiennych $tekst1-$tekst9 przejrzeć i dostosować do własnego pliku "dane-aktualne-stacja.txt".

    Niektóre parametry są przesyłane w mniej popularnych jednostkach, tak więc musimy je przeliczyć (inHg na hPa, stopnie F na stopnie C, mph na km/h, inches na mm). Realizują to cztery funkcje: "przelicz_na_hpa", "przelicz_na_c", "przelicz_na_kmh" i "przelicz_na_mm".

    Przykładowo, jeżeli chcemy się odwołać do prędkości wiatru ("windspeedmph") i jednocześnie przeliczyć mile na godzinę na km/h, to robimy to tak: przelicz_na_kmh($pogoda['5']).

    Tworzymy obrazek PNG z pliku "tlo.png" i deklarujemy wykorzystywane kolory. Plik "tlo.png" musi być umieszczony w tym samym katalogu co skrypt.


    $obrazek=imagecreatefrompng('tlo.png');

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


    Kolorujemy tło tytułu i dodajemy obwódkę do grafiki.


    imagefilledrectangle( $obrazek, 1 ,1, 235, 20 ,$kolor['rozowy']);
    imagerectangle( $obrazek, 0 ,0, 319, 204 ,$kolor['rozowy']);
    imagerectangle( $obrazek, 1 ,1, 318, 203 ,$kolor['rozowy']);


    Nakładamy na obrazek wcześniej zdefiniowane informacje pogodowe - tytuł i 9 linii z tekstem. Aby zmienić kolory wyświetlanych linii (np. z niebieskiego na różowy) zmieniamy w określonej linii $kolor['niebieski'] na $kolor['rozowy']. Możemy korzystać tylko z kolorów, które wcześniej zadeklarowaliśmy.


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


    Na końcu, wyświetlamy tak zrobiony obrazek w przeglądarce.


    header('Content-type: image/png');
    imagepng($obrazek);
    imagedestroy($obrazek);


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

    Jak taki baner wyświetlić na stronie WWW?


    Aby nasz baner wyświetlić na stronie WWW, trzeba się odwołać się do skryptu banera w tagu <img>, czyli należy dodać w kodzie HTML linię:

    <img src="http://adres_twojej_strony.pl/baner-pogodowy.php" alt="Mój Baner Pogodowy">


    Jeżeli macie jakieś uwagi, problemy, coś nie działa, piszcie w komentarzach.

    Autor: Parasol (Stacje-Pogody.pl)
  • Tło banenra pogodowego
  • 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