Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // =========================================================================================================== //
- //
- // Plik : pogoda.h
- // Wersja : 0.02 Beta
- // Data : 02.03.2021
- // Autor : TRANSLINE GROUP, Tomasz Majcher, Lubin
- //
- //
- // E-Mail : transline.majcher@gmail.com
- //
- //
- // Licencja v1 : Donationware. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane
- // i dystrybuowane pod warunkiem, że licencjobiorca zapłaci autorowi symboliczną kwotę.
- // Wielkość opłaty zależy od licencjobiorcy.
- //
- //
- // Licencja v2 : OpenSource. Oprogramowanie na tej licencji może być dowolnie modyfikowane, kopiowane
- // i dystrybuowane pod warenkiem, że licencjobiorca jest członkiem grupy: ESP Projekty
- // oraz ESP Polska
- //
- // =========================================================================================================== //
- // === H I S T O R I A W E R S J I ========================================================================= //
- // =========================================================================================================== //
- //
- // wersja 0.02 STABLE (27.03.2021) - dodano : return miasto i kraj odczytu
- // wersja 0.01 STABLE (20.03.2021) - klasa TPogoda
- // --- SPIS METOD -------------------------------------------------------------------------------------------- //
- //
- //
- //
- // --- INCLUDE ----------------------------------------------------------------------------------------------- //
- #include <Arduino_JSON.h> // parser JSON
- #include <TimeLib.h> // parser TIME
- #include <HTTPClient.h> // klient HTTP
- // --- TYPEDEF ----------------------------------------------------------------------------------------------- //
- // --- DEFINE ------------------------------------------------------------------------------------------------ //
- #define True 1
- #define False 0
- #define Terminal True
- #define DebugLev1 True
- #define DebugLev2 True
- // --- ZMIENNE ----------------------------------------------------------------------------------------------- //
- // --- OBIEKTY ----------------------------------------------------------------------------------------------- //
- extern Tools tools; // obiekt tools z biblioteki tools.h
- // --- KLASA ------------------------------------------------------------------------------------------------- //
- class TPogoda
- {
- // --- zmienne i metody prywatne ----------------------------------------------------------
- private:
- JSONVar myObject; // parser JSON
- String openWeatherMapApiKey = "565a88311e7c48c2d00b170cd0765c91"; // token
- String city = "Lubin"; // miasto
- String countryCode = "Pl"; // kraj
- String jsonBuffer;
- String serverPath = "http://api.openweathermap.org/data/2.5/weather?q="
- + city
- + ","
- + countryCode
- + "&APPID="
- + openWeatherMapApiKey; // ścieżnka serwera
- const double Kelvin = 273.15; // wartość Kelvin
- // --- struktura danych pobranych z serwera OpenWeatherMap (API) --------------------------
- struct SPogoda
- {
- double temperatura = 0;
- double temperatura_odczuwalna = 0;
- double temperatura_minimalna = 0;
- double temperatura_maksymalna = 0;
- double temperatura_srednia = 0;
- int cisnienie = 0;
- int wilgotnosc = 0;
- int widzialnosc = 0;
- double wiatr_predkosc = 0;
- int wiatr_kierunek = 0;
- double wiatr_porywy = 0;
- int zachmurzenie = 0;
- String czas_odczytu = "";
- char wschod_slonca[10];
- char zachod_slonca[10];
- int strefa_czasowa = 0;
- String miasto = "Osiek";
- String kraj = "Polska";
- } pogoda;
- // --- metody prywatne --------------------------------------------------------------------
- String httpGETRequest(const char* serverName);
- void ParsujPogode();
- inline double PobierzTemperature();
- inline int PobierzCisnienie();
- inline int PobierzWilgotnosc();
- inline int PobierzWidocznosc();
- inline double PobierzWiatr();
- inline int PobierzZachmurzenie();
- inline String PobierzWschodSlonca();
- inline String PobierzZachodslonca();
- // --- zmienne i metody publiczne --------------------------------------------------------
- public:
- // --- konstruktor domyślny ----------------------------------------------------------
- TPogoda()
- {
- }
- TPogoda(String miasto, String kraj)
- {
- city = miasto;
- countryCode = kraj;
- }
- // --- destruktor domyślny -----------------------------------------------------------
- ~TPogoda()
- {
- }
- // --- metody publiczne --------------------------------------------------------------
- void PobierzPogode(); // definicja : pobiera pogodę z serwera OpenWeatherMap
- void PokazPogode(); // drukuj na Serial dane pogodowe
- inline double PublicPobierzTemperature();
- inline int PublicPobierzCisnienie();
- inline int PublicPobierzWilgotnosc();
- inline int PublicPobierzZachmurzenie();
- inline int PublicPobierzPredkoscWiatru();
- String PublicPobierzWschodSlonca();
- String PublicPobierzZachodSlonca();
- String PublicPobierzLokalizacje();
- };
- // --- METODY PRYWATNE --------------------------------------------------------------------------------------- //
- // ----------------------------------------------------------------------------------------------------------- //
- // --- http GET string --------------------------------------------------------------------------------------- //
- String TPogoda :: httpGETRequest(const char* serverName)
- {
- HTTPClient http;
- http.begin(serverName);
- int httpResponseCode = http.GET();
- String bufor = "{}";
- if ( httpResponseCode > 0 ) bufor = http.getString();
- http.end();
- return bufor;
- }
- // --- METODY PRYWATNE --------------------------------------------------------------------------------------- //
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Parser danych pogodowych pobranych z serwera OpenWeatherMap ------------------------------------------- //
- void TPogoda :: ParsujPogode()
- {
- long buforLong = 0;
- pogoda.temperatura = myObject["main"]["temp"];
- pogoda.temperatura -= Kelvin;
- pogoda.temperatura_odczuwalna = myObject["main"]["feels_like"];
- pogoda.temperatura_odczuwalna -= Kelvin;
- pogoda.temperatura_minimalna = myObject["main"]["temp_min"];
- pogoda.temperatura_minimalna -= Kelvin;
- pogoda.temperatura_maksymalna = myObject["main"]["temp_max"];
- pogoda.temperatura_maksymalna -= Kelvin;
- pogoda.cisnienie = myObject["main"]["pressure"];
- pogoda.wilgotnosc = myObject["main"]["humidity"];
- pogoda.widzialnosc = myObject["visibility"];
- pogoda.wiatr_predkosc = myObject["wind"]["speed"];
- pogoda.wiatr_kierunek = myObject["wind"]["deg"];
- pogoda.wiatr_porywy = myObject["wind"]["gust"];
- pogoda.zachmurzenie = myObject["clouds"]["all"];
- pogoda.czas_odczytu = String( hour(myObject["dt"])+1 ) + " : "
- + String( minute(myObject["dt"]) ) + " : "
- + String( second(myObject["dt"]) );
- sprintf(pogoda.wschod_slonca, "%02d:%02d",hour(myObject["sys"]["sunrise"])+1,minute(myObject["sys"]["sunrise"]));
- sprintf(pogoda.zachod_slonca, "%02d:%02d",hour(myObject["sys"]["sunset"])+1,minute(myObject["sys"]["sunset"]));
- pogoda.strefa_czasowa = myObject["timezone"];
- pogoda.miasto = myObject["name"];
- pogoda.kraj = myObject["sys"]["country"];
- #if Terminal
- #if DebugLev2
- tools.PokazWiadomosc("Class: TPogoda","Metoda: ParsujPogode","JSON parsowanie zakonczone");
- #endif
- #endif
- }
- // ----------------------------------------------------------------------------------------------------------- //
- inline double TPogoda :: PobierzTemperature()
- {
- return pogoda.temperatura;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- inline int TPogoda :: PobierzCisnienie()
- {
- return pogoda.cisnienie;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- inline int TPogoda :: PobierzWilgotnosc()
- {
- return pogoda.wilgotnosc;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- inline int TPogoda :: PobierzWidocznosc()
- {
- return pogoda.widzialnosc;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- inline double TPogoda :: PobierzWiatr()
- {
- return pogoda.wiatr_predkosc;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- inline int TPogoda :: PobierzZachmurzenie()
- {
- return pogoda.zachmurzenie;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- inline String TPogoda ::PobierzWschodSlonca()
- {
- return String(pogoda.wschod_slonca);
- }
- // ----------------------------------------------------------------------------------------------------------- //
- inline String TPogoda :: PobierzZachodslonca()
- {
- return String(pogoda.zachod_slonca);
- }
- // --- METODY PUBLICZNE -------------------------------------------------------------------------------------- //
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pobierz pogodę z serwera Open Weather Map ------------------------------------------------------------- //
- void TPogoda :: PobierzPogode()
- {
- if(WiFi.status()== WL_CONNECTED)
- {
- jsonBuffer = httpGETRequest(serverPath.c_str());
- #if Terminal
- #if DebugLev1
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PobierzPogode","Pobrano dane z OpenWeatherMap");
- #endif
- #endif
- myObject = JSON.parse(jsonBuffer);
- ParsujPogode();
- if (JSON.typeof(myObject) == "undefined") return;
- }
- }
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pokaz pogodę zapisaną w strukturze SPogoda pogoda ----------------------------------------------------- //
- void TPogoda :: PokazPogode()
- {
- String bufor = "";
- tools.DrukujLinie(60);
- bufor = "Czas odczytu " + pogoda.czas_odczytu + " UTC";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Strefa czasowa " + String(pogoda.strefa_czasowa);
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Miasto / kraj " + pogoda.miasto + ", " + pogoda.kraj;
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Wschod slonca " + String(pogoda.wschod_slonca);
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Zachod slonca " + String(pogoda.zachod_slonca);
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Temperatura " + String(pogoda.temperatura) + " st.C";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Temperatura odczuwalna " + String(pogoda.temperatura_odczuwalna) + " st.C";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Temperatura minimalna " + String(pogoda.temperatura_minimalna) + " st.C";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Temperatura maksymalna " + String(pogoda.temperatura_maksymalna) + " st.C";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Cisnienie atmosferyczne " + String(pogoda.cisnienie) + " mPa";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Wilgotnosc powietrza " + String(pogoda.wilgotnosc) + " %";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Widocznosc " + String(pogoda.widzialnosc) + " metrow";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Predkosc wiatru " + String(pogoda.wiatr_predkosc) + " km/h";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Kierunek wiatru " + String(pogoda.wiatr_kierunek) + " stopni";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Porywy wiatru " + String(pogoda.wiatr_porywy) + " km/h";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- bufor = "Zachmurzenie (chmury) " + String(pogoda.zachmurzenie) + " %";
- tools.PokazWiadomosc("Class: TPogoda","Metoda: PokazPogode", bufor.c_str());
- }
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pobierz Temperaturę ze struktury pogoda --------------------------------------------------------------- //
- inline double TPogoda :: PublicPobierzTemperature()
- {
- return pogoda.temperatura;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pobierz Cisnienie ze struktury pogoda ----------------------------------------------------------------- //
- inline int TPogoda :: PublicPobierzCisnienie()
- {
- return pogoda.cisnienie;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pobierz Cisnienie ze struktury pogoda ----------------------------------------------------------------- //
- inline int TPogoda :: PublicPobierzWilgotnosc()
- {
- return pogoda.wilgotnosc;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pobierz Zachmurzenie ze struktury pogoda -------------------------------------------------------------- //
- inline int TPogoda :: PublicPobierzZachmurzenie()
- {
- return pogoda.zachmurzenie;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pobierz Zachmurzenie ze struktury pogoda -------------------------------------------------------------- //
- inline int TPogoda :: PublicPobierzPredkoscWiatru()
- {
- return pogoda.wiatr_predkosc;
- }
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pobierz Wschod Słońca --------------------------------------------------------------------------------- //
- String TPogoda :: PublicPobierzWschodSlonca()
- {
- return String(pogoda.wschod_slonca);
- }
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pobierz Zachód Słońca --------------------------------------------------------------------------------- //
- String TPogoda :: PublicPobierzZachodSlonca()
- {
- return String(pogoda.zachod_slonca);
- }
- // ----------------------------------------------------------------------------------------------------------- //
- // --- Pobierz Lokalizacje ----------------------------------------------------------------------------------- //
- String TPogoda :: PublicPobierzLokalizacje()
- {
- return ( pogoda.miasto + ", " + pogoda.kraj );
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement