Парсинг погоды от AccuWeather - "5 Days of Daily Forecasts", (ESP8266)

5 дней ежедневных прогнозов, результат в архиве.

Тариф - “Free”, 50 запросов в сутки, необходимо получить ключ API.
Архив: esp8266_AccuWeather.zip — Яндекс Диск

esp8266_AccuWeather.ino

// 10.05.2023 23-59
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <WiFiClient.h>
#include <ArduinoJson.h>        //ver. - 6.20.0
#include "functions.h"       
#include "settings.h"           // настройки в файле settings.h
//------------------------------------------------
#define Serial_Print    // отладка для работы  - закоментить
//------------------------------------------------

weather_t weather;
unsigned long lastTime = 0;
int wifi_signal = -120;

bool decode_json(Stream& jsonStr);
bool getWeather();
String convert_unix_time(int unix_time);
 
void setup() {
  Serial.begin(115200);
  WiFi.begin(ssid, password);
  Serial.println(".");
  Serial.println("Connecting");
  while(WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
   } //end while
  Serial.println("");
  Serial.print("WiFi подключен. IP: "); Serial.println(WiFi.localIP());
  wifi_signal = WiFi.RSSI();
  Serial.print("Уровень сигнала WiFi: "); Serial.println(wifi_signal);
  Serial.print("Обновление через: "); Serial.print(timerDelay); Serial.println(" минут.");  
} //end setup

void loop() {
  if ((millis() - lastTime) > timerDelay * 60*1000) {  
    getWeather(); 
    Serial.print(convert_unix_time(weather.Headline.EffectiveEpochDate));
    lastTime = millis();
    } 
}//end loop


bool decode_json(Stream& jsonStr)
{
  DynamicJsonDocument doc(30000);
  DeserializationError error = deserializeJson(doc, jsonStr);
  if (error) {
    Serial.print(F("deserializeJson() failed: "));
    Serial.println(error.f_str());
    return false;
    } else
      {
      Serial.println("deserializeJson() без ошибок.");
      JsonObject doc_Accu = doc.as<JsonObject>();
      weather.Headline.EffectiveDate = doc_Accu["Headline"]["EffectiveDate"].as<const char *>();
	  weather.Headline.EffectiveEpochDate =	doc_Accu["Headline"]["EffectiveEpochDate"].as<long>();;
	  weather.Headline.Severity =	doc_Accu["Headline"]["Severity"].as<int>();;
	  weather.Headline.Text =	doc_Accu["Headline"]["Text"].as<const char *>();
	  weather.Headline.Category =	doc_Accu["Headline"]["Category"].as<const char *>();
	  weather.Headline.EndDate =	doc_Accu["Headline"]["EndDate"].as<const char *>();
	  weather.Headline.EndEpochDate =	doc_Accu["Headline"]["EndEpochDate"].as<int>();;
	  weather.Headline.MobileLink =	doc_Accu["Headline"]["MobileLink"].as<const char *>();
	  weather.Headline.Link =	doc_Accu["Headline"]["Link"].as<const char *>();
      for (uint8_t i = 0; i < 5; i++)
       {
        weather.DailyForecasts[i].Date = doc_Accu["DailyForecasts"][i]["Date"].as<const char *>();
        weather.DailyForecasts[i].EpochDate = doc_Accu["DailyForecasts"][i]["EpochDate"].as<long>();
//		weather.DailyForecasts[i].Temperature = doc_Accu["DailyForecasts"][i]["Temperature"].as<const char *>();
		weather.DailyForecasts[i].Sun_Rise = doc_Accu["DailyForecasts"][i]["Sun"]["Rise"].as<const char *>();
		weather.DailyForecasts[i].Sun_EpochRise = doc_Accu["DailyForecasts"][i]["Sun"]["EpochRise"].as<long>();
		weather.DailyForecasts[i].Sun_Set = doc_Accu["DailyForecasts"][i]["Sun"]["Set"].as<const char *>();
		weather.DailyForecasts[i].Sun_EpochSet = doc_Accu["DailyForecasts"][i]["Sun"]["EpochSet"].as<long>();
		weather.DailyForecasts[i].Moon_Rise = doc_Accu["DailyForecasts"][i]["Moon"]["Rise"].as<const char *>();
		weather.DailyForecasts[i].Moon_EpochRise = doc_Accu["DailyForecasts"][i]["Moon"]["EpochRise"].as<long>();
		weather.DailyForecasts[i].Moon_Set = doc_Accu["DailyForecasts"][i]["Moon"]["Set"].as<const char *>();
		weather.DailyForecasts[i].Moon_EpochSet = doc_Accu["DailyForecasts"][i]["Moon"]["EpochSet"].as<long>();
		weather.DailyForecasts[i].Moon_Phase = doc_Accu["DailyForecasts"][i]["Moon"]["Phase"].as<const char *>();
		weather.DailyForecasts[i].Moon_Age = doc_Accu["DailyForecasts"][i]["Moon"]["Age"].as<long>();		
		weather.DailyForecasts[i].Temperature_min_Value = doc_Accu["DailyForecasts"][i]["Temperature"]["Minimum"]["Value"].as<float>();
		weather.DailyForecasts[i].Temperature_min_Unit = doc_Accu["DailyForecasts"][i]["Temperature"]["Minimum"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Temperature_min_UnitType = doc_Accu["DailyForecasts"][i]["Temperature"]["Minimum"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Temperature_max_Value = doc_Accu["DailyForecasts"][i]["Temperature"]["Maximum"]["Value"].as<float>();
		weather.DailyForecasts[i].Temperature_max_Unit = doc_Accu["DailyForecasts"][i]["Temperature"]["Maximum"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Temperature_max_UnitType = doc_Accu["DailyForecasts"][i]["Temperature"]["Maximum"]["UnitType"].as<int>();
		weather.DailyForecasts[i].RealFeelTemperature_min_Value = doc_Accu["DailyForecasts"][i]["RealFeelTemperature"]["Minimum"]["Value"].as<float>();
		weather.DailyForecasts[i].RealFeelTemperature_min_Unit = doc_Accu["DailyForecasts"][i]["RealFeelTemperature"]["Minimum"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].RealFeelTemperature_min_UnitType = doc_Accu["DailyForecasts"][i]["RealFeelTemperature"]["Minimum"]["UnitType"].as<int>();
		weather.DailyForecasts[i].RealFeelTemperature_min_Phrase = doc_Accu["DailyForecasts"][i]["RealFeelTemperature"]["Minimum"]["Phrase"].as<const char *>();
		weather.DailyForecasts[i].RealFeelTemperature_max_Value = doc_Accu["DailyForecasts"][i]["RealFeelTemperature"]["Maximum"]["Value"].as<float>();
		weather.DailyForecasts[i].RealFeelTemperature_max_Unit = doc_Accu["DailyForecasts"][i]["RealFeelTemperature"]["Maximum"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].RealFeelTemperature_max_UnitType = doc_Accu["DailyForecasts"][i]["RealFeelTemperature"]["Maximum"]["UnitType"].as<int>();		
		weather.DailyForecasts[i].RealFeelTemperature_max_Phrase = doc_Accu["DailyForecasts"][i]["RealFeelTemperature"]["Minimum"]["Phrase"].as<const char *>();		
		weather.DailyForecasts[i].RealFeelTemperatureShade_min_Value = doc_Accu["DailyForecasts"][i]["RealFeelTemperatureShade"]["Minimum"]["Value"].as<float>();
		weather.DailyForecasts[i].RealFeelTemperatureShade_min_Unit = doc_Accu["DailyForecasts"][i]["RealFeelTemperatureShade"]["Minimum"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].RealFeelTemperatureShade_min_UnitType = doc_Accu["DailyForecasts"][i]["RealFeelTemperatureShade"]["Minimum"]["UnitType"].as<int>();
		weather.DailyForecasts[i].RealFeelTemperatureShade_min_Phrase = doc_Accu["DailyForecasts"][i]["RealFeelTemperatureShade"]["Minimum"]["Phrase"].as<const char *>();
		weather.DailyForecasts[i].RealFeelTemperatureShade_max_Value = doc_Accu["DailyForecasts"][i]["RealFeelTemperatureShade"]["Maximum"]["Value"].as<float>();
		weather.DailyForecasts[i].RealFeelTemperatureShade_max_Unit = doc_Accu["DailyForecasts"][i]["RealFeelTemperatureShade"]["Maximum"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].RealFeelTemperatureShade_max_UnitType = doc_Accu["DailyForecasts"][i]["RealFeelTemperatureShade"]["Maximum"]["UnitType"].as<int>();		
		weather.DailyForecasts[i].RealFeelTemperatureShade_max_Phrase = doc_Accu["DailyForecasts"][i]["RealFeelTemperatureShade"]["Maximum"]["Phrase"].as<const char *>();		
		weather.DailyForecasts[i].HoursOfSun = doc_Accu["DailyForecasts"][i]["HoursOfSun"].as<float>();		
		weather.DailyForecasts[i].DegreeDaySummary_Heating_Value = doc_Accu["DailyForecasts"][i]["DegreeDaySummary"]["Heating"]["Value"].as<int>();
		weather.DailyForecasts[i].DegreeDaySummary_Heating_Unit = doc_Accu["DailyForecasts"][i]["DegreeDaySummary"]["Heating"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].DegreeDaySummary_Heating_UnitType = doc_Accu["DailyForecasts"][i]["DegreeDaySummary"]["Heating"]["UnitType"].as<int>();
		weather.DailyForecasts[i].DegreeDaySummary_Cooling_Value = doc_Accu["DailyForecasts"][i]["DegreeDaySummary"]["Cooling"]["Value"].as<int>();
		weather.DailyForecasts[i].DegreeDaySummary_Cooling_Unit = doc_Accu["DailyForecasts"][i]["DegreeDaySummary"]["Cooling"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].DegreeDaySummary_Cooling_UnitType = doc_Accu["DailyForecasts"][i]["DegreeDaySummary"]["Cooling"]["UnitType"].as<int>();
          for (uint8_t j = 0; j < 6; j++)
          {
            weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_Name = doc_Accu["DailyForecasts"][i]["AirAndPollen"][j]["Name"].as<const char *>();
			weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_Value = doc_Accu["DailyForecasts"][i]["AirAndPollen"][j]["Value"].as<int>();
            weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_Category = doc_Accu["DailyForecasts"][i]["AirAndPollen"][j]["Category"].as<const char *>();
			weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_CategoryValue = doc_Accu["DailyForecasts"]["AirAndPollen"][j]["CategoryValue"].as<int>();
            weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_Type = doc_Accu["DailyForecasts"][i]["AirAndPollen"][j]["Type"].as<const char *>();			
           }//end for			  
		weather.DailyForecasts[i].Day_Icon = doc_Accu["DailyForecasts"][i]["Day"]["Icon"].as<int>();
		weather.DailyForecasts[i].Day_IconPhrase = doc_Accu["DailyForecasts"][i]["Day"]["IconPhrase"].as<const char *>();
		weather.DailyForecasts[i].Day_HasPrecipitation = doc_Accu["DailyForecasts"][i]["Day"]["HasPrecipitation"].as<bool>();
		weather.DailyForecasts[i].Day_PrecipitationType = doc_Accu["DailyForecasts"][i]["Day"]["PrecipitationType"].as<const char *>();
		weather.DailyForecasts[i].Day_PrecipitationIntensity = doc_Accu["DailyForecasts"][i]["Day"]["PrecipitationIntensity"].as<const char *>();
        weather.DailyForecasts[i].Day_ShortPhrase = doc_Accu["DailyForecasts"][i]["Day"]["ShortPhrase"].as<const char *>();
		weather.DailyForecasts[i].Day_LongPhrase = doc_Accu["DailyForecasts"][i]["Day"]["LongPhrase"].as<const char *>();
		weather.DailyForecasts[i].Day_PrecipitationProbability = doc_Accu["DailyForecasts"][i]["Day"]["PrecipitationProbability"].as<int>();
		weather.DailyForecasts[i].Day_ThunderstormProbability = doc_Accu["DailyForecasts"][i]["Day"]["ThunderstormProbability"].as<int>();
		weather.DailyForecasts[i].Day_RainProbability = doc_Accu["DailyForecasts"][i]["Day"]["RainProbability"].as<int>();
		weather.DailyForecasts[i].Day_SnowProbability = doc_Accu["DailyForecasts"][i]["Day"]["SnowProbability"].as<int>();
		weather.DailyForecasts[i].Day_IceProbability = doc_Accu["DailyForecasts"][i]["Day"]["IceProbability"].as<int>();
		weather.DailyForecasts[i].Day_Wind_Speed_Value = doc_Accu["DailyForecasts"][i]["Day"]["Wind"]["Speed"]["Value"].as<float>();
		weather.DailyForecasts[i].Day_Wind_Speed_Unit = doc_Accu["DailyForecasts"][i]["Day"]["Wind"]["Speed"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Day_Wind_Speed_UnitType = doc_Accu["DailyForecasts"][i]["Day"]["Wind"]["Speed"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Day_Wind_Direction_Degrees = doc_Accu["DailyForecasts"][i]["Day"]["Wind"]["Direction"]["Degrees"].as<int>();
		weather.DailyForecasts[i].Day_Wind_Direction_Localized = doc_Accu["DailyForecasts"][i]["Day"]["Wind"]["Direction"]["Localized"].as<const char *>();
		weather.DailyForecasts[i].Day_Wind_Direction_English = doc_Accu["DailyForecasts"][i]["Day"]["Wind"]["Direction"]["English"].as<const char *>();
		weather.DailyForecasts[i].Day_WindGust_Speed_Value = doc_Accu["DailyForecasts"][i]["Day"]["WindGust"]["Speed"]["Value"].as<float>();
		weather.DailyForecasts[i].Day_WindGust_Speed_Unit = doc_Accu["DailyForecasts"][i]["Day"]["WindGust"]["Speed"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Day_WindGust_Speed_UnitType = doc_Accu["DailyForecasts"][i]["Day"]["WindGust"]["Speed"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Day_WindGust_Direction_Degrees = doc_Accu["DailyForecasts"][i]["Day"]["WindGust"]["Direction"]["Degrees"].as<int>();
		weather.DailyForecasts[i].Day_WindGust_Direction_Localized = doc_Accu["DailyForecasts"][i]["Day"]["WindGust"]["Direction"]["Localized"].as<const char *>();
		weather.DailyForecasts[i].Day_WindGust_Direction_English = doc_Accu["DailyForecasts"][i]["Day"]["WindGust"]["Direction"]["English"].as<const char *>();
		weather.DailyForecasts[i].Day_TotalLiquid_Value = doc_Accu["DailyForecasts"][i]["Day"]["TotalLiquid"]["Value"].as<int>();
		weather.DailyForecasts[i].Day_TotalLiquid_Unit = doc_Accu["DailyForecasts"][i]["Day"]["TotalLiquid"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Day_TotalLiquid_UnitType = doc_Accu["DailyForecasts"][i]["Day"]["TotalLiquid"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Day_Rain_Value = doc_Accu["DailyForecasts"][i]["Day"]["Rain"]["Value"].as<int>();
		weather.DailyForecasts[i].Day_Rain_Unit = doc_Accu["DailyForecasts"][i]["Day"]["Rain"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Day_Rain_UnitType = doc_Accu["DailyForecasts"][i]["Day"]["Rain"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Day_Snow_Value = doc_Accu["DailyForecasts"][i]["Day"]["Snow"]["Value"].as<int>();
		weather.DailyForecasts[i].Day_Snow_Unit = doc_Accu["DailyForecasts"][i]["Day"]["Snow"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Day_Snow_UnitType = doc_Accu["DailyForecasts"][i]["Day"]["Snow"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Day_Ice_Value = doc_Accu["DailyForecasts"][i]["Day"]["Ice"]["Value"].as<int>();
		weather.DailyForecasts[i].Day_Ice_Unit = doc_Accu["DailyForecasts"][i]["Day"]["Ice"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Day_Ice_UnitType = doc_Accu["DailyForecasts"][i]["Day"]["Ice"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Day_HoursOfPrecipitation = doc_Accu["DailyForecasts"][i]["Day"]["HoursOfPrecipitation"].as<int>();
		weather.DailyForecasts[i].Day_HoursOfRain = doc_Accu["DailyForecasts"][i]["Day"]["HoursOfRain"].as<int>();
		weather.DailyForecasts[i].Day_HoursOfSnow = doc_Accu["DailyForecasts"][i]["Day"]["HoursOfSnow"].as<int>();
		weather.DailyForecasts[i].Day_HoursOfIce = doc_Accu["DailyForecasts"][i]["Day"]["HoursOfIce"].as<int>();
		weather.DailyForecasts[i].Day_CloudCover = doc_Accu["DailyForecasts"][i]["Day"]["CloudCover"].as<int>();
		weather.DailyForecasts[i].Day_Evapotranspiration_Value = doc_Accu["DailyForecasts"][i]["Day"]["Evapotranspiration"]["Value"].as<float>();
		weather.DailyForecasts[i].Day_Evapotranspiration_Unit = doc_Accu["DailyForecasts"][i]["Day"]["Evapotranspiration"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Day_Evapotranspiration_UnitType = doc_Accu["DailyForecasts"][i]["Day"]["Evapotranspiration"]["UnitType"].as<int>();		
		weather.DailyForecasts[i].Day_SolarIrradiance_Value = doc_Accu["DailyForecasts"][i]["Day"]["SolarIrradiance"]["Value"].as<float>();
		weather.DailyForecasts[i].Day_SolarIrradiance_Unit = doc_Accu["DailyForecasts"][i]["Day"]["SolarIrradiance"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Day_SolarIrradiance_UnitType = doc_Accu["DailyForecasts"][i]["Day"]["SolarIrradiance"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Night_Icon = doc_Accu["DailyForecasts"][i]["Night"]["Icon"].as<int>();
		weather.DailyForecasts[i].Night_IconPhrase = doc_Accu["DailyForecasts"][i]["Night"]["IconPhrase"].as<const char *>();
		weather.DailyForecasts[i].Night_HasPrecipitation = doc_Accu["DailyForecasts"][i]["Night"]["HasPrecipitation"].as<bool>();
        weather.DailyForecasts[i].Night_ShortPhrase = doc_Accu["DailyForecasts"][i]["Night"]["ShortPhrase"].as<const char *>();
		weather.DailyForecasts[i].Night_LongPhrase = doc_Accu["DailyForecasts"][i]["Night"]["LongPhrase"].as<const char *>();
		weather.DailyForecasts[i].Night_PrecipitationProbability = doc_Accu["DailyForecasts"][i]["Night"]["PrecipitationProbability"].as<int>();
		weather.DailyForecasts[i].Night_ThunderstormProbability = doc_Accu["DailyForecasts"][i]["Night"]["ThunderstormProbability"].as<int>();
		weather.DailyForecasts[i].Night_RainProbability = doc_Accu["DailyForecasts"][i]["Night"]["RainProbability"].as<int>();
		weather.DailyForecasts[i].Night_SnowProbability = doc_Accu["DailyForecasts"][i]["Night"]["SnowProbability"].as<int>();
		weather.DailyForecasts[i].Night_IceProbability = doc_Accu["DailyForecasts"][i]["Night"]["IceProbability"].as<int>();
		weather.DailyForecasts[i].Night_Wind_Speed_Value = doc_Accu["DailyForecasts"][i]["Night"]["Wind"]["Speed"]["Value"].as<float>();
		weather.DailyForecasts[i].Night_Wind_Speed_Unit = doc_Accu["DailyForecasts"][i]["Night"]["Wind"]["Speed"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Night_Wind_Speed_UnitType = doc_Accu["DailyForecasts"][i]["Night"]["Wind"]["Speed"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Night_Wind_Direction_Degrees = doc_Accu["DailyForecasts"][i]["Night"]["Wind"]["Direction"]["Degrees"].as<int>();
		weather.DailyForecasts[i].Night_Wind_Direction_Localized = doc_Accu["DailyForecasts"][i]["Night"]["Wind"]["Direction"]["Localized"].as<const char *>();
		weather.DailyForecasts[i].Night_Wind_Direction_English = doc_Accu["DailyForecasts"][i]["Night"]["Wind"]["Direction"]["English"].as<const char *>();
		weather.DailyForecasts[i].Night_WindGust_Speed_Value = doc_Accu["DailyForecasts"][i]["Night"]["WindGust"]["Speed"]["Value"].as<float>();
		weather.DailyForecasts[i].Night_WindGust_Speed_Unit = doc_Accu["DailyForecasts"][i]["Night"]["WindGust"]["Speed"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Night_WindGust_Speed_UnitType = doc_Accu["DailyForecasts"][i]["Night"]["WindGust"]["Speed"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Night_WindGust_Direction_Degrees = doc_Accu["DailyForecasts"][i]["Night"]["WindGust"]["Direction"]["Degrees"].as<int>();
		weather.DailyForecasts[i].Night_WindGust_Direction_Localized = doc_Accu["DailyForecasts"][i]["Night"]["WindGust"]["Direction"]["Localized"].as<const char *>();
		weather.DailyForecasts[i].Night_WindGust_Direction_English = doc_Accu["DailyForecasts"][i]["Night"]["WindGust"]["Direction"]["English"].as<const char *>();
		weather.DailyForecasts[i].Night_TotalLiquid_Value = doc_Accu["DailyForecasts"][i]["Night"]["TotalLiquid"]["Value"].as<int>();
		weather.DailyForecasts[i].Night_TotalLiquid_Unit = doc_Accu["DailyForecasts"][i]["Night"]["TotalLiquid"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Night_TotalLiquid_UnitType = doc_Accu["DailyForecasts"][i]["Night"]["TotalLiquid"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Night_Rain_Value = doc_Accu["DailyForecasts"][i]["Night"]["Rain"]["Value"].as<int>();
		weather.DailyForecasts[i].Night_Rain_Unit = doc_Accu["DailyForecasts"][i]["Night"]["Rain"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Night_Rain_UnitType = doc_Accu["DailyForecasts"][i]["Night"]["Rain"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Night_Snow_Value = doc_Accu["DailyForecasts"][i]["Night"]["Snow"]["Value"].as<int>();
		weather.DailyForecasts[i].Night_Snow_Unit = doc_Accu["DailyForecasts"][i]["Night"]["Snow"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Night_Snow_UnitType = doc_Accu["DailyForecasts"][i]["Night"]["Snow"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Night_Ice_Value = doc_Accu["DailyForecasts"][i]["Night"]["Ice"]["Value"].as<int>();
		weather.DailyForecasts[i].Night_Ice_Unit = doc_Accu["DailyForecasts"][i]["Night"]["Ice"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Night_Ice_UnitType = doc_Accu["DailyForecasts"][i]["Night"]["Ice"]["UnitType"].as<int>();
		weather.DailyForecasts[i].Night_HoursOfPrecipitation = doc_Accu["DailyForecasts"][i]["Night"]["HoursOfPrecipitation"].as<int>();
		weather.DailyForecasts[i].Night_HoursOfRain = doc_Accu["DailyForecasts"][i]["Night"]["HoursOfRain"].as<int>();
		weather.DailyForecasts[i].Night_HoursOfSnow = doc_Accu["DailyForecasts"][i]["Night"]["HoursOfSnow"].as<int>();
		weather.DailyForecasts[i].Night_HoursOfIce = doc_Accu["DailyForecasts"][i]["Night"]["HoursOfIce"].as<int>();
		weather.DailyForecasts[i].Night_CloudCover = doc_Accu["DailyForecasts"][i]["Night"]["CloudCover"].as<int>();
		weather.DailyForecasts[i].Night_Evapotranspiration_Value = doc_Accu["DailyForecasts"][i]["Night"]["Evapotranspiration"]["Value"].as<float>();
		weather.DailyForecasts[i].Night_Evapotranspiration_Unit = doc_Accu["DailyForecasts"][i]["Night"]["Evapotranspiration"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Night_Evapotranspiration_UnitType = doc_Accu["DailyForecasts"][i]["Night"]["Evapotranspiration"]["UnitType"].as<int>();		
		weather.DailyForecasts[i].Night_SolarIrradiance_Value = doc_Accu["DailyForecasts"][i]["Night"]["SolarIrradiance"]["Value"].as<float>();
		weather.DailyForecasts[i].Night_SolarIrradiance_Unit = doc_Accu["DailyForecasts"][i]["Night"]["SolarIrradiance"]["Unit"].as<const char *>();
		weather.DailyForecasts[i].Night_SolarIrradiance_UnitType = doc_Accu["DailyForecasts"][i]["Night"]["SolarIrradiance"]["UnitType"].as<int>();
//		weather.DailyForecasts[i].Sources = doc_Accu["DailyForecasts"][i]["Sources"].as<const char *>();
//		weather.DailyForecasts[i].MobileLink = doc_Accu["DailyForecasts"][i]["MobileLink"].as<const char *>();
		weather.DailyForecasts[i].Link = doc_Accu["DailyForecasts"][i]["Link"].as<const char *>();
       }//end for	  
     return true;
    }//end else
}//end decode_json

bool getWeather()
{
  bool flag_weater;
  if(WiFi.status()== WL_CONNECTED){   // проверяем соединение WiFi
    HTTPClient http;                 // Отправляем HTTP GET запрос
    //"http://dataservice.accuweather.com/forecasts/v1/daily/5day/288916?apikey=mstLgzZHMTJ7O7xtYl0jYzIypcalK5qu&language=ru-ru&details=true&metric=true"	
    String _host = "http://dataservice.accuweather.com";
	String _uri = "/forecasts/v1/daily/5day/" + regionID + "?apikey=" + api_key + "&language=" + language + "&details=" + details + "&metric=true";
    WiFiClient client;
    client.stop();
    http.begin(client, _host + _uri);
    int httpCode = http.GET();
    Serial.println(_host + _uri);
    Serial.println(httpCode);
     if (httpCode > 0) { 
      Stream& response = http.getStream(); // ответ accuweather 
      decode_json(response); // парсинг данных из JsonObject
#ifdef  Serial_Print  //  отладка      
     Serial.println(" - - Headline - - ");
     Serial.print("Headline.EffectiveDate "); Serial.println(weather.Headline.EffectiveDate);
     Serial.print("Headline.EffectiveEpochDate "); Serial.println(weather.Headline.EffectiveEpochDate);
     Serial.print("Headline.Severity "); Serial.println(weather.Headline.Severity);
     Serial.print("Headline.Text "); Serial.println(weather.Headline.Text);
     Serial.print("Headline.Category "); Serial.println(weather.Headline.Category);
     Serial.print("Headline.EndDate "); Serial.println(weather.Headline.EndDate);
     Serial.print("Headline.EndEpochDate "); Serial.println(weather.Headline.EndEpochDate);
     Serial.print("Headline.MobileLink "); Serial.println(weather.Headline.MobileLink);
     Serial.print("Headline.Link "); Serial.println(weather.Headline.Link);
     for (uint8_t i = 0; i < 5; i++)
      {
        Serial.print(" - - DailyForecasts: = "); Serial.println(i);
		Serial.print("DailyForecasts.Date: =  "); Serial.println(weather.DailyForecasts[i].Date);
		Serial.print("DailyForecasts.EpochDate: =  "); Serial.println(weather.DailyForecasts[i].EpochDate);
//		Serial.print("DailyForecasts.Temperature: =  "); Serial.println(weather.DailyForecasts[i].Temperature);
		Serial.print("DailyForecasts.Sun_Rise: =  "); Serial.println(weather.DailyForecasts[i].Sun_Rise);
		Serial.print("DailyForecasts.Sun_EpochRise: =  "); Serial.println(weather.DailyForecasts[i].Sun_EpochRise);
		Serial.print("DailyForecasts.Sun_Set: =  "); Serial.println(weather.DailyForecasts[i].Sun_Set);
		Serial.print("DailyForecasts.Sun_EpochSet: =  "); Serial.println(weather.DailyForecasts[i].Sun_EpochSet);
		Serial.print("DailyForecasts.Moon_Rise: =  "); Serial.println(weather.DailyForecasts[i].Moon_Rise);
		Serial.print("DailyForecasts.Moon_EpochRise: =  "); Serial.println(weather.DailyForecasts[i].Moon_EpochRise);
		Serial.print("DailyForecasts.Moon_Set: =  "); Serial.println(weather.DailyForecasts[i].Moon_Set);
		Serial.print("DailyForecasts.Moon_EpochSet: =  "); Serial.println(weather.DailyForecasts[i].Moon_EpochSet);
		Serial.print("DailyForecasts.Moon_Phase: =  "); Serial.println(weather.DailyForecasts[i].Moon_Phase);
		Serial.print("DailyForecasts.Moon_Age: =  "); Serial.println(weather.DailyForecasts[i].Moon_Age);		
		Serial.print("DailyForecasts.Temperature_min_Value: =  "); Serial.println(weather.DailyForecasts[i].Temperature_min_Value);
		Serial.print("DailyForecasts.Temperature_min_Unit: =  "); Serial.println(weather.DailyForecasts[i].Temperature_min_Unit);
		Serial.print("DailyForecasts.Temperature_min_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Temperature_min_UnitType);
		Serial.print("DailyForecasts.Temperature_max_Value: =  "); Serial.println(weather.DailyForecasts[i].Temperature_max_Value);
		Serial.print("DailyForecasts.Temperature_max_Unit: =  "); Serial.println(weather.DailyForecasts[i].Temperature_max_Unit);
		Serial.print("DailyForecasts.Temperature_max_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Temperature_max_UnitType);
		Serial.print("DailyForecasts.RealFeelTemperature_min_Value: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperature_min_Value);
		Serial.print("DailyForecasts.RealFeelTemperature_min_Unit: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperature_min_Unit);
		Serial.print("DailyForecasts.RealFeelTemperature_min_UnitType: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperature_min_UnitType);
		Serial.print("DailyForecasts.RealFeelTemperature_min_Phrase: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperature_min_Phrase);
		Serial.print("DailyForecasts.RealFeelTemperature_max_Value: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperature_max_Value);
		Serial.print("DailyForecasts.RealFeelTemperature_max_Unit: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperature_max_Unit);
		Serial.print("DailyForecasts.RealFeelTemperature_max_UnitType: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperature_max_UnitType);
		Serial.print("DailyForecasts.RealFeelTemperature_max_Phrase: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperature_max_Phrase);
		Serial.print("DailyForecasts.RealFeelTemperatureShade_min_Value: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperatureShade_min_Value);
		Serial.print("DailyForecasts.RealFeelTemperatureShade_min_Unit: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperatureShade_min_Unit);
		Serial.print("DailyForecasts.RealFeelTemperatureShade_min_UnitType: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperatureShade_min_UnitType);
		Serial.print("DailyForecasts.RealFeelTemperatureShade_min_Phrase: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperatureShade_min_Phrase);
		Serial.print("DailyForecasts.RealFeelTemperatureShade_max_Value: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperatureShade_max_Value);
		Serial.print("DailyForecasts.RealFeelTemperatureShade_max_Unit: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperatureShade_max_Unit);
		Serial.print("DailyForecasts.RealFeelTemperatureShade_max_UnitType: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperatureShade_max_UnitType);
		Serial.print("DailyForecasts.RealFeelTemperatureShade_max_Phrase: =  "); Serial.println(weather.DailyForecasts[i].RealFeelTemperatureShade_max_Phrase);
		Serial.print("DailyForecasts.HoursOfSun: =  "); Serial.println(weather.DailyForecasts[i].HoursOfSun);
		Serial.print("DailyForecasts.DegreeDaySummary_Heating_Value: =  "); Serial.println(weather.DailyForecasts[i].DegreeDaySummary_Heating_Value);
		Serial.print("DailyForecasts.DegreeDaySummary_Heating_Unit: =  "); Serial.println(weather.DailyForecasts[i].DegreeDaySummary_Heating_Unit);
		Serial.print("DailyForecasts.DegreeDaySummary_Heating_UnitType: =  "); Serial.println(weather.DailyForecasts[i].DegreeDaySummary_Heating_UnitType);
		Serial.print("DailyForecasts.DegreeDaySummary_Cooling_Value: =  "); Serial.println(weather.DailyForecasts[i].DegreeDaySummary_Cooling_Value);
		Serial.print("DailyForecasts.DegreeDaySummary_Cooling_Unit: =  "); Serial.println(weather.DailyForecasts[i].DegreeDaySummary_Cooling_Unit);
		Serial.print("DailyForecasts.DegreeDaySummary_Cooling_UnitType: =  "); Serial.println(weather.DailyForecasts[i].DegreeDaySummary_Cooling_UnitType);
          for (uint8_t j = 0; j < 6; j++)
           {
            Serial.print(" - - AirAndPollen: = "); Serial.println(j);			  
			Serial.print("DailyForecasts.AirAndPollen_Name: =  "); Serial.println(weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_Name);  
			Serial.print("DailyForecasts.AirAndPollen_Value: =  "); Serial.println(weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_Value); 
            Serial.print("DailyForecasts.AirAndPollen_Category: =  "); Serial.println(weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_Category); 
            Serial.print("DailyForecasts.AirAndPollen_CategoryValue: =  "); Serial.println(weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_CategoryValue);
            Serial.print("DailyForecasts.AirAndPollen_Type: =  "); Serial.println(weather.DailyForecasts[i].AirAndPollen[j].AirAndPollen_Type);  			
            }//end for			  
		Serial.print("DailyForecasts.Day_Icon: =  "); Serial.println(weather.DailyForecasts[i].Day_Icon);
		Serial.print("DailyForecasts.Day_IconPhrase: =  "); Serial.println(weather.DailyForecasts[i].Day_IconPhrase);
		Serial.print("DailyForecasts.Day_HasPrecipitation: =  "); Serial.println(weather.DailyForecasts[i].Day_HasPrecipitation);
		Serial.print("DailyForecasts.Day_PrecipitationType: =  "); Serial.println(weather.DailyForecasts[i].Day_PrecipitationType);
		Serial.print("DailyForecasts.Day_PrecipitationIntensity: =  "); Serial.println(weather.DailyForecasts[i].Day_PrecipitationIntensity);
		Serial.print("DailyForecasts.Day_ShortPhrase: =  "); Serial.println(weather.DailyForecasts[i].Day_ShortPhrase);
		Serial.print("DailyForecasts.Day_LongPhrase: =  "); Serial.println(weather.DailyForecasts[i].Day_LongPhrase);
		Serial.print("DailyForecasts.Day_PrecipitationProbability: =  "); Serial.println(weather.DailyForecasts[i].Day_PrecipitationProbability);
		Serial.print("DailyForecasts.Day_ThunderstormProbability: =  "); Serial.println(weather.DailyForecasts[i].Day_ThunderstormProbability);
		Serial.print("DailyForecasts.Day_RainProbability: =  "); Serial.println(weather.DailyForecasts[i].Day_RainProbability);
		Serial.print("DailyForecasts.Day_SnowProbability: =  "); Serial.println(weather.DailyForecasts[i].Day_SnowProbability);
		Serial.print("DailyForecasts.Day_IceProbability: =  "); Serial.println(weather.DailyForecasts[i].Day_IceProbability);
		Serial.print("DailyForecasts.Day_Wind_Speed_Value: =  "); Serial.println(weather.DailyForecasts[i].Day_Wind_Speed_Value);
		Serial.print("DailyForecasts.Day_Wind_Speed_Unit: =  "); Serial.println(weather.DailyForecasts[i].Day_Wind_Speed_Unit);
		Serial.print("DailyForecasts.Day_Wind_Speed_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Day_Wind_Speed_UnitType);
		Serial.print("DailyForecasts.Day_Wind_Direction_Degrees: =  "); Serial.println(weather.DailyForecasts[i].Day_Wind_Direction_Degrees);
		Serial.print("DailyForecasts.Day_Wind_Direction_Localized: =  "); Serial.println(weather.DailyForecasts[i].Day_Wind_Direction_Localized);
		Serial.print("DailyForecasts.Day_Wind_Direction_English: =  "); Serial.println(weather.DailyForecasts[i].Day_Wind_Direction_English);
		Serial.print("DailyForecasts.Day_WindGust_Speed_Value: =  "); Serial.println(weather.DailyForecasts[i].Day_WindGust_Speed_Value);
		Serial.print("DailyForecasts.Day_WindGust_Speed_Unit: =  "); Serial.println(weather.DailyForecasts[i].Day_WindGust_Speed_Unit);
		Serial.print("DailyForecasts.Day_WindGust_Speed_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Day_WindGust_Speed_UnitType);
		Serial.print("DailyForecasts.Day_WindGust_Direction_Degrees: =  "); Serial.println(weather.DailyForecasts[i].Day_WindGust_Direction_Degrees);
		Serial.print("DailyForecasts.Day_WindGust_Direction_Localized: =  "); Serial.println(weather.DailyForecasts[i].Day_WindGust_Direction_Localized);
		Serial.print("DailyForecasts.Day_WindGust_Direction_English: =  "); Serial.println(weather.DailyForecasts[i].Day_WindGust_Direction_English);
		Serial.print("DailyForecasts.Day_TotalLiquid_Value: =  "); Serial.println(weather.DailyForecasts[i].Day_TotalLiquid_Value);
		Serial.print("DailyForecasts.Day_TotalLiquid_Unit: =  "); Serial.println(weather.DailyForecasts[i].Day_TotalLiquid_Unit);
		Serial.print("DailyForecasts.Day_TotalLiquid_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Day_TotalLiquid_UnitType);
		Serial.print("DailyForecasts.Day_Rain_Value: =  "); Serial.println(weather.DailyForecasts[i].Day_Rain_Value);
		Serial.print("DailyForecasts.Day_Rain_Unit: =  "); Serial.println(weather.DailyForecasts[i].Day_Rain_Unit);
		Serial.print("DailyForecasts.Day_Rain_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Day_Rain_UnitType);
		Serial.print("DailyForecasts.Day_Snow_Value: =  "); Serial.println(weather.DailyForecasts[i].Day_Snow_Value);
		Serial.print("DailyForecasts.Day_Snow_Unit: =  "); Serial.println(weather.DailyForecasts[i].Day_Snow_Unit);
		Serial.print("DailyForecasts.Day_Snow_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Day_Snow_UnitType);
		Serial.print("DailyForecasts.Day_Ice_Value: =  "); Serial.println(weather.DailyForecasts[i].Day_Ice_Value);
		Serial.print("DailyForecasts.Day_Ice_Unit: =  "); Serial.println(weather.DailyForecasts[i].Day_Ice_Unit);
		Serial.print("DailyForecasts.Day_Ice_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Day_Ice_UnitType);
		Serial.print("DailyForecasts.Day_HoursOfPrecipitation: =  "); Serial.println(weather.DailyForecasts[i].Day_HoursOfPrecipitation);
		Serial.print("DailyForecasts.Day_HoursOfRain: =  "); Serial.println(weather.DailyForecasts[i].Day_HoursOfRain);
		Serial.print("DailyForecasts.Day_HoursOfSnow: =  "); Serial.println(weather.DailyForecasts[i].Day_HoursOfSnow);
		Serial.print("DailyForecasts.Day_HoursOfIce: =  "); Serial.println(weather.DailyForecasts[i].Day_HoursOfIce);
		Serial.print("DailyForecasts.Day_CloudCover: =  "); Serial.println(weather.DailyForecasts[i].Day_CloudCover);
		Serial.print("DailyForecasts.Day_Evapotranspiration_Value: =  "); Serial.println(weather.DailyForecasts[i].Day_Evapotranspiration_Value);
		Serial.print("DailyForecasts.Day_Evapotranspiration_Unit: =  "); Serial.println(weather.DailyForecasts[i].Day_Evapotranspiration_Unit);
		Serial.print("DailyForecasts.Day_Evapotranspiration_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Day_Evapotranspiration_UnitType);
		Serial.print("DailyForecasts.Day_SolarIrradiance_Value: =  "); Serial.println(weather.DailyForecasts[i].Day_SolarIrradiance_Value);
		Serial.print("DailyForecasts.Day_SolarIrradiance_Unit: =  "); Serial.println(weather.DailyForecasts[i].Day_SolarIrradiance_Unit);
		Serial.print("DailyForecasts.Day_SolarIrradiance_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Day_SolarIrradiance_UnitType);
		Serial.print("DailyForecasts.Night_Icon: =  "); Serial.println(weather.DailyForecasts[i].Night_Icon);
		Serial.print("DailyForecasts.Night_IconPhrase: =  "); Serial.println(weather.DailyForecasts[i].Night_IconPhrase);
		Serial.print("DailyForecasts.Night_HasPrecipitation: =  "); Serial.println(weather.DailyForecasts[i].Night_HasPrecipitation);
        Serial.print("DailyForecasts.Night_ShortPhrase: =  "); Serial.println(weather.DailyForecasts[i].Night_ShortPhrase);
		Serial.print("DailyForecasts.Night_LongPhrase: =  "); Serial.println(weather.DailyForecasts[i].Night_LongPhrase);
		Serial.print("DailyForecasts.Night_PrecipitationProbability: =  "); Serial.println(weather.DailyForecasts[i].Night_PrecipitationProbability);
		Serial.print("DailyForecasts.Night_ThunderstormProbability: =  "); Serial.println(weather.DailyForecasts[i].Night_ThunderstormProbability);
		Serial.print("DailyForecasts.Night_IceProbability: =  "); Serial.println(weather.DailyForecasts[i].Night_IceProbability);
		Serial.print("DailyForecasts.Night_Wind_Speed_Value: =  "); Serial.println(weather.DailyForecasts[i].Night_Wind_Speed_Value);
		Serial.print("DailyForecasts.Night_Wind_Speed_Unit: =  "); Serial.println(weather.DailyForecasts[i].Night_Wind_Speed_Unit);
		Serial.print("DailyForecasts.Night_Wind_Speed_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Night_Wind_Speed_UnitType);
		Serial.print("DailyForecasts.Night_Wind_Direction_Degrees: =  "); Serial.println(weather.DailyForecasts[i].Night_Wind_Direction_Degrees);
		Serial.print("DailyForecasts.Night_Wind_Direction_Localized: =  "); Serial.println(weather.DailyForecasts[i].Night_Wind_Direction_Localized);
		Serial.print("DailyForecasts.Night_Wind_Direction_English: =  "); Serial.println(weather.DailyForecasts[i].Night_Wind_Direction_English);
		Serial.print("DailyForecasts.Night_WindGust_Speed_Value: =  "); Serial.println(weather.DailyForecasts[i].Night_WindGust_Speed_Value);
		Serial.print("DailyForecasts.Night_WindGust_Speed_Unit: =  "); Serial.println(weather.DailyForecasts[i].Night_WindGust_Speed_Unit);
		Serial.print("DailyForecasts.Night_WindGust_Speed_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Night_WindGust_Speed_UnitType);
		Serial.print("DailyForecasts.Night_WindGust_Direction_Degrees: =  "); Serial.println(weather.DailyForecasts[i].Night_WindGust_Direction_Degrees);
		Serial.print("DailyForecasts.Night_WindGust_Direction_Localized: =  "); Serial.println(weather.DailyForecasts[i].Night_WindGust_Direction_Localized);
		Serial.print("DailyForecasts.Night_WindGust_Direction_English: =  "); Serial.println(weather.DailyForecasts[i].Night_WindGust_Direction_English);
		Serial.print("DailyForecasts.Night_TotalLiquid_Value: =  "); Serial.println(weather.DailyForecasts[i].Night_TotalLiquid_Value);
		Serial.print("DailyForecasts.Night_TotalLiquid_Unit: =  "); Serial.println(weather.DailyForecasts[i].Night_TotalLiquid_Unit);
		Serial.print("DailyForecasts.Night_TotalLiquid_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Night_TotalLiquid_UnitType);
		Serial.print("DailyForecasts.Night_Rain_Value: =  "); Serial.println(weather.DailyForecasts[i].Night_Rain_Value);
		Serial.print("DailyForecasts.Night_Rain_Unit: =  "); Serial.println(weather.DailyForecasts[i].Night_Rain_Unit);
		Serial.print("DailyForecasts.Night_Rain_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Night_Rain_UnitType);
		Serial.print("DailyForecasts.Night_Snow_Value: =  "); Serial.println(weather.DailyForecasts[i].Night_Snow_Value);
		Serial.print("DailyForecasts.Night_Snow_Unit: =  "); Serial.println(weather.DailyForecasts[i].Night_Snow_Unit);
		Serial.print("DailyForecasts.Night_Snow_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Night_Snow_UnitType);
		Serial.print("DailyForecasts.Night_Ice_Value: =  "); Serial.println(weather.DailyForecasts[i].Night_Ice_Value);
		Serial.print("DailyForecasts.Night_Ice_Unit: =  "); Serial.println(weather.DailyForecasts[i].Night_Ice_Unit);
		Serial.print("DailyForecasts.Night_Ice_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Night_Ice_UnitType);
		Serial.print("DailyForecasts.Night_HoursOfPrecipitation: =  "); Serial.println(weather.DailyForecasts[i].Night_HoursOfPrecipitation);
		Serial.print("DailyForecasts.Night_HoursOfRain: =  "); Serial.println(weather.DailyForecasts[i].Night_HoursOfRain);
		Serial.print("DailyForecasts.Night_HoursOfSnow: =  "); Serial.println(weather.DailyForecasts[i].Night_HoursOfSnow);
		Serial.print("DailyForecasts.Night_HoursOfIce: =  "); Serial.println(weather.DailyForecasts[i].Night_HoursOfIce);
		Serial.print("DailyForecasts.Night_CloudCover: =  "); Serial.println(weather.DailyForecasts[i].Night_CloudCover);
		Serial.print("DailyForecasts.Night_Evapotranspiration_Value: =  "); Serial.println(weather.DailyForecasts[i].Night_Evapotranspiration_Value);
		Serial.print("DailyForecasts.Night_Evapotranspiration_Unit: =  "); Serial.println(weather.DailyForecasts[i].Night_Evapotranspiration_Unit);
		Serial.print("DailyForecasts.Night_Evapotranspiration_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Night_Evapotranspiration_UnitType);
		Serial.print("DailyForecasts.Night_SolarIrradiance_Value: =  "); Serial.println(weather.DailyForecasts[i].Night_SolarIrradiance_Value);
		Serial.print("DailyForecasts.Night_SolarIrradiance_Unit: =  "); Serial.println(weather.DailyForecasts[i].Night_SolarIrradiance_Unit);
		Serial.print("DailyForecasts.Night_SolarIrradiance_UnitType: =  "); Serial.println(weather.DailyForecasts[i].Night_SolarIrradiance_UnitType);
//		Serial.print("DailyForecasts.Sources: =  "); Serial.println(weather.DailyForecasts[i].Sources);
//		Serial.print("DailyForecasts.MobileLink: =  "); Serial.println(weather.DailyForecasts[i].MobileLink);
		Serial.print("DailyForecasts.Link: =  "); Serial.println(weather.DailyForecasts[i].Link);
      } //end for
#endif

      client.stop();
      http.end();
      flag_weater = true;
     }  else
      {
        Serial.println("Connection failed");
        client.stop();
        http.end();
        flag_weater = false;
      }
    }
  return flag_weater;
} 

functions.h

#include <Arduino.h>
/*-------------- Weather code -------------------------*/
typedef struct
{
    String EffectiveDate;
    long EffectiveEpochDate;
    int Severity;
    String Text;
    String Category;
    String EndDate;
    int EndEpochDate;
    String MobileLink;
    String Link;
} Headline_t;

typedef struct
{
    String AirAndPollen_Name;  // 6
    int AirAndPollen_Value;	
    String AirAndPollen_Category;
    int AirAndPollen_CategoryValue;	
    String AirAndPollen_Type;
} AirAndPollen_t;

typedef struct
{
    String Date;
    long EpochDate;
//    String Temperature;	
	String Sun_Rise;
	long Sun_EpochRise;
	String Sun_Set;
	long Sun_EpochSet;
	String Moon_Rise;
	long Moon_EpochRise;
	String Moon_Set;
	long Moon_EpochSet;
	String Moon_Phase;
	int Moon_Age;	
    float Temperature_min_Value;
    String Temperature_min_Unit;
    int Temperature_min_UnitType;
    float Temperature_max_Value;
    String Temperature_max_Unit;
    int Temperature_max_UnitType;
    float RealFeelTemperature_min_Value;
    String RealFeelTemperature_min_Unit;
    int RealFeelTemperature_min_UnitType;
    String RealFeelTemperature_min_Phrase;
    float RealFeelTemperature_max_Value;
    String RealFeelTemperature_max_Unit;
    int RealFeelTemperature_max_UnitType;
    String RealFeelTemperature_max_Phrase;
    float RealFeelTemperatureShade_min_Value;
    String RealFeelTemperatureShade_min_Unit;
    int RealFeelTemperatureShade_min_UnitType;
    String RealFeelTemperatureShade_min_Phrase;
    float RealFeelTemperatureShade_max_Value;
    String RealFeelTemperatureShade_max_Unit;
    int RealFeelTemperatureShade_max_UnitType;
    String RealFeelTemperatureShade_max_Phrase;
    float HoursOfSun;
    int DegreeDaySummary_Heating_Value;
    String DegreeDaySummary_Heating_Unit;
    int DegreeDaySummary_Heating_UnitType;
    int DegreeDaySummary_Cooling_Value;
    String DegreeDaySummary_Cooling_Unit;
    int DegreeDaySummary_Cooling_UnitType;
    AirAndPollen_t AirAndPollen[6];
    int Day_Icon;
    String Day_IconPhrase;
    bool Day_HasPrecipitation;
    String Day_PrecipitationType;
    String Day_PrecipitationIntensity;	
    String Day_ShortPhrase;
    String Day_LongPhrase;
    int Day_PrecipitationProbability;
    int Day_ThunderstormProbability;
    int Day_RainProbability;
    int Day_SnowProbability;
    int Day_IceProbability;	
    float Day_Wind_Speed_Value;
    String Day_Wind_Speed_Unit;
    int Day_Wind_Speed_UnitType;
    int Day_Wind_Direction_Degrees;
    String Day_Wind_Direction_Localized;
    String Day_Wind_Direction_English;
    float Day_WindGust_Speed_Value;
    String Day_WindGust_Speed_Unit;
    int Day_WindGust_Speed_UnitType;
    int Day_WindGust_Direction_Degrees;
    String Day_WindGust_Direction_Localized;
    String Day_WindGust_Direction_English;
    int Day_TotalLiquid_Value;
    String Day_TotalLiquid_Unit;
    int Day_TotalLiquid_UnitType;
    int Day_Rain_Value;
    String Day_Rain_Unit;
    int Day_Rain_UnitType;
    int Day_Snow_Value;
    String Day_Snow_Unit;
    int Day_Snow_UnitType;
    int Day_Ice_Value;
    String Day_Ice_Unit;
    int Day_Ice_UnitType;
    int Day_HoursOfPrecipitation;
	int Day_HoursOfRain;
	int Day_HoursOfSnow;
	int Day_HoursOfIce;
    int Day_CloudCover;
    float Day_Evapotranspiration_Value;
    String Day_Evapotranspiration_Unit;
    int Day_Evapotranspiration_UnitType;
    float Day_SolarIrradiance_Value;
    String Day_SolarIrradiance_Unit;
    int Day_SolarIrradiance_UnitType;	
    int Night_Icon; 
    const char* Night_IconPhrase;
    bool Night_HasPrecipitation;
    const char* Night_ShortPhrase;
    const char* Night_LongPhrase;
    int Night_PrecipitationProbability;
    int Night_ThunderstormProbability;
    int Night_RainProbability;
    int Night_SnowProbability;
    int Night_IceProbability;
    float Night_Wind_Speed_Value;
    const char* Night_Wind_Speed_Unit;
    int Night_Wind_Speed_UnitType;
    int Night_Wind_Direction_Degrees;
    const char* Night_Wind_Direction_Localized;
    const char* Night_Wind_Direction_English;
    float Night_WindGust_Speed_Value;
    const char* Night_WindGust_Speed_Unit;
    int Night_WindGust_Speed_UnitType;
    int Night_WindGust_Direction_Degrees;
    const char* Night_WindGust_Direction_Localized;
    const char* Night_WindGust_Direction_English;
    int Night_TotalLiquid_Value;
    const char* Night_TotalLiquid_Unit;
    int Night_TotalLiquid_UnitType; 
    int Night_Rain_Value;
    const char* Night_Rain_Unit;
    int Night_Rain_UnitType;
    int Night_Snow_Value;
    const char* Night_Snow_Unit;
    int Night_Snow_UnitType;
    int Night_Ice_Value;
    const char* Night_Ice_Unit;
    int Night_Ice_UnitType;  
    int Night_HoursOfPrecipitation;
    int Night_HoursOfRain;
    int Night_HoursOfSnow;
    int Night_HoursOfIce;
    int Night_CloudCover;
    float Night_Evapotranspiration_Value;
    const char* Night_Evapotranspiration_Unit;
    int Night_Evapotranspiration_UnitType;
    float Night_SolarIrradiance_Value;
    const char* Night_SolarIrradiance_Unit;
    int Night_SolarIrradiance_UnitType;
//    String Sources;
//    String MobileLink;
    String Link;
} DailyForecasts_t;

typedef struct
{
    Headline_t Headline;
    DailyForecasts_t DailyForecasts[5];
} weather_t;

String convert_unix_time(int unix_time)
{
  time_t tm = unix_time;
  struct tm *now_tm = localtime(&tm);
  char output[40];
  strftime(output, sizeof(output), "%H:%M %d.%m.%y", now_tm);
  return output;
}

void printStr(String& s) {
  Serial.println(s);
}


Остальное в архиве.

Скажите пожалуйста, вот Вы уже во второй теме называете запрос к API парсингом. Почему? Вы не знаете что такое парсинг? Или просто хотите выглядеть посолиднее?

Вы всегда так пишете?

String convert_unix_time(int unix_time)
{
  time_t tm = unix_time;
  struct tm *now_tm = localtime(&tm);
  char output[40];
  strftime(output, sizeof(output), "%H:%M %d.%m.%y", now_tm);
  return output;
}

Нет, я понимаю, что в строке №7 - это не возврат локальной переменной - это только так выглядит. Но выглядит ужасно - по глазам резануло сразу, даже при беглом просмотре кода.

Ну и использование tm в качестве и имени типа, и имени переменной.

Вам доставляет удовольствие так писать?

а что это?

Посмотри на возвращаемый тип. Там при возврате вызовется конструктор String, он хапнет память malloc’ом, скопирует строку и этот объект будет возвращён. такое работает. Но выглядит … :frowning:

А, да, точно у него возвращаемый тип String, тогда да, я просто невнимателен. :frowning:

OFFTOP.
Обсуждаемый код напомнил. О вечном, как спор между Виндой и Линукс споре о формате хранения времени в базе и API.
Вот прямо в проекте, с которым работаю, один из коллег - как и вся молодежь - очень пафосный, стал от меня требовать везде формат времени ISO 8601. Это примерно та хрень, в которую переводит юникс-тайм обсуждаемый код ТС.

Он потратил пару часов переписки в телеге на то, что бы доказывать, что ISO - лучше! :wink:
Мне, как и любому, в принципе все равно. НО сам факт участия в реальном - не выдуманном споре “UnixTime vs ISO8601” - это какой-то дикий пипец!

так радуйся, от тебя кто-то еще чего-то требует, значит живём )))

Текущий прогноз погоды от AccuWeather - “GETCurrent Conditions”, (ESP8266).

Тариф - “Free”, 50 запросов в сутки, необходимо получить ключ API.

Вы читали описание этого раздела форума? Здесь автор отвечает на вопросы читателей. Я задал вопросы. Вы их игнорируете принципиально? Или беспринципно?

На все эти ваши принципы мы ответим полной беспринципностью. Имеем право. ((С) Бернштейн) Умный догадаецца, а дураку и не нужна.

1 лайк

Извините глубокоуважаемый ADMIN , не смог сразу ответить на Ваши вопросы. Отвечаю в порядке поступления:
1 . Да я всегда пишу слева направо, пытался по другому - не получается.
2, Я не знаю что такое “Парсинг” - и просто жму кнопки на клаве, а “Клава” довольна молчит - не издаёт ни звука.

А зачем тогда используете это слово в заголовке темы?

Парсинг — автоматизированный сбор и систематизация данных. Его проводят с помощью программ, которые называются парсерами. Парсинг нужен, чтобы ускорить рутинную работу.
Что Вас не устраивает, моё название полностью соответствует названию темы.

  1. запрос
  2. получение данных
  3. вывод
    4 автоматизация вывода куда надо

5…10 что не так с названием темы?

Предлагаю Вам ответить на тот же вопрос.
ИЛИ? - признать не правым меня, себя?

Мне? Зачем? Вы читали правила данного раздела?

Так что, как видите …

Я не могу быть ни правым, ни неправым, ибо я ничего не утверждал.

Я задал два вопроса: “Знаете ли Вы что такое парсинг?” (получил ответ “нет, не знаю”) и “всегда ли Вы так пишете?” (в ответ получил глум).

Я вполне удовлетворён ответами. В чём именно я, по- Вашему, могу быть прав или не прав?

Кстати, вопрос выше риторический - можете не отвечать, всё равно я продолжать эту тему не намерен (ну, или ответьте, если непременно хотите сказать последнее слово).

слив засчитан.

1 лайк

Добрый день. Ссылки на архивы Ваши сейчас не рабочие, пожалуйста исправьте, а то очень нужен чистый код на текущий прогноз. Спасибо

Если вы не поняли - вам указали на то, что ваш код безумно кривой. Вместо того чтоб ответить по существу, вы принялись паясничать. Так что чей слив-то мы тут засчитали? ваш?

это ты ещё мой код не видел и вааще…требовать от художника писать в стиле реализм, когда он подражатель Моне (к примеру) мне кажется моветоном…
PS просто интересно, ты в живопись Моне въезжаешь? (оффтоп)

1 лайк