Парсер погоды на ESP8266

Пользовательский блок для использования интернет ресурсов текущих данных о погоде.

Пользовательские блоки для коммкникации и связи GSM, GPRS, IR, Bluetooth и другие
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
rogekam
Рядовой
Сообщения: 77
Зарегистрирован: 24.06.2020{, 21:21}
Репутация: 28
Откуда: RUS31
Имя: Egor

Парсер погоды на ESP8266

#1

Сообщение rogekam » 09.03.2021{, 02:27}

Тема погоды на форуме: viewtopic.php?f=63&t=4645 а также большого количества условно бесплатных программ в интернете, вдохновили к написанию пользовательского блока. Основа всех программ, в вышеуказанном топике, написана на библиотеке ArduinoJson 5 версий. В FLProg последних версий используется 6 Json. Отсюда и "пляски с бубном".
Пользовательский блок написан в 6 Json. Для сервиса используется интернет ресурс: https://openweathermap.org, в котором зарегистрировавшись, можно получить бесплатно ключ API. На странице: https://openweathermap.org/city/ введя свой город, в конце адреса ссылки получите код города ( https://openweathermap.org/city/578072). Здесь: https://home.openweathermap.org/api_keys хранятся ваши ключи API, а также высылаются на указанный вами адрес почты. Назначение входов и выходов в комментариях.
Сам блок:
WEATHER_JSON6_631_020_(CODE).ubi
(113.51 КБ) 142 скачивания
СпойлерПоказать
4.jpg
Скриншот ESPUI
СпойлерПоказать
3.jpg
Пример использования блока:
pogoda ESPUI 631.flp
(5.23 МБ) 195 скачиваний
Для контроля времени опроса погоды добавил выход unix в пользовательский блок:
WEATHER_JSON6_631_021_(CODE).ubi
(136.1 КБ) 120 скачиваний
Для перевода UNIX, пользовательский блок брать здесь: viewtopic.php?f=84&t=6879
Пользовательский блок прогноза погоды по выбору временной точки. Период точек на сайте: openweathermap.org равен 3 часам. При установке переменной mCnt числа от 1 до 23 (временной точки), прогноз выдается по конечному числу, т.е. например: число 5 Х 3 =15 часов. Прогноз на время через 15 часов.
Из за ограничения динамической памяти в ESP8266, прогноз на 2 суток.
Пользовательский блок прогноза погоды:
forecast06_(CODE).ubi
(227.59 КБ) 131 скачивание
СпойлерПоказать
ПРОГНОЗ 5.jpg
Последний раз редактировалось rogekam 20.03.2021{, 10:33}, всего редактировалось 5 раз.

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

Парсер погоды на ESP8266

#2

Сообщение Qwert855 » 14.03.2021{, 19:28}

Добрый день.

скетч выдает ошибку
'DynamicJsonDocument' was not declared in this scope

выделяется строка

Код: Выделить всё

            DynamicJsonDocument doc(2048);
json ver 6.17.3

Отправлено спустя 3 минуты 36 секунд:
Qwert855 писал(а):
14.03.2021{, 19:28}
Добрый день.

скетч выдает ошибку
'DynamicJsonDocument' was not declared in this scope

выделяется строка

Код: Выделить всё

            DynamicJsonDocument doc(2048);
json ver 6.17.3
помогла зачистка старой библиотеки ArduinoJson вручную

Отправлено спустя 2 часа 42 минуты 2 секунды:
rogekam,
вы не рассматривали возможности ЕСП8266 на обработку данного запроса?
https://openweathermap.org/forecast5

ответ приходит на 15690 знаков
246 строк

rogekam
Рядовой
Сообщения: 77
Зарегистрирован: 24.06.2020{, 21:21}
Репутация: 28
Откуда: RUS31
Имя: Egor

Парсер погоды на ESP8266

#3

Сообщение rogekam » 14.03.2021{, 22:42}

Qwert855 писал(а):
14.03.2021{, 22:13}
rogekam,
вы не рассматривали возможности ЕСП8266 на обработку данного запроса?
https://openweathermap.org/forecast5
Да, прогноз погоды на 5 дней, с интервалом 3 часа. Ограничив избыточную информацию(конечно субъективно), выборочно, основные параметры: температура, давление, осадки в виде стилизованной таблицы. Выйдет три строки по 8 столбцов.

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

Парсер погоды на ESP8266

#4

Сообщение Qwert855 » 17.03.2021{, 11:37}

можно поток входящий отрезать или нужно принять все 16тыс знаков а уже из них отрезать знаки?
при возможность попробую как есп себя поведет если поставить 16 тыс знаков и попытаться обработать их :smile427:

rogekam
Рядовой
Сообщения: 77
Зарегистрирован: 24.06.2020{, 21:21}
Репутация: 28
Откуда: RUS31
Имя: Egor

Парсер погоды на ESP8266

#5

Сообщение rogekam » 18.03.2021{, 19:38}

Qwert855 писал(а):
14.03.2021{, 22:13}
rogekam,
вы не рассматривали возможности ЕСП8266 на обработку данного запроса?
https://openweathermap.org/forecast5
Выложил в шапке пользовательский блок прогноза погоды. Прогноз на 2 суток из за малого объёма динамической памяти в ESP8266.

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

Парсер погоды на ESP8266

#6

Сообщение Qwert855 » 18.03.2021{, 21:21}

rogekam писал(а):
18.03.2021{, 19:38}
Qwert855 писал(а):
14.03.2021{, 22:13}
rogekam,
вы не рассматривали возможности ЕСП8266 на обработку данного запроса?
https://openweathermap.org/forecast5
Выложил в шапке пользовательский блок прогноза погоды. Прогноз на 2 суток из за малого объёма динамической памяти в ESP8266.
спасибо.
как раз интересует запрос не далее 2х суточного прогноза, дальше парсить прост нет смысла. там уже не прогноз а игра в шарады.
оптимальный прогноз на 3 и 24 часа.

Отправлено спустя 10 минут 30 секунд:
вход - mCnt - необходимо устанавливать 0,1,2 и производить опросы?

Отправлено спустя 15 минут 40 секунд:
если я правильно понял логику и данные парсятся последовательно из разных участков ответа, то вероятно на блоке не хватает статуса удачного ответа (Rtrig)

rogekam
Рядовой
Сообщения: 77
Зарегистрирован: 24.06.2020{, 21:21}
Репутация: 28
Откуда: RUS31
Имя: Egor

Парсер погоды на ESP8266

#7

Сообщение rogekam » 18.03.2021{, 23:19}

Qwert855 писал(а):
18.03.2021{, 21:47}
вход - mCnt - необходимо устанавливать 0,1,2 и производить опросы?

Отправлено спустя 15 минут 40 секунд:
если я правильно понял логику и данные парсятся последовательно из разных участков ответа, то вероятно на блоке не хватает статуса удачного ответа (Rtrig)
вход - mCnt -необходимо устанавливать 1, 2 и т.д. до 23. При "0" парсинга нет, так как нет запроса. 1, 2, 3 это метки времени, последовательно по нарастающей через 3 часа - 00, 03, 06, 09, - 12 именно эти метки установлены на сайте. Можно выбрать только количество меток, но не их расположение. Поэтому при метке например 8, ответ API будет такой:
HTTP/1.1 200 OK
Server: openresty
Date: Thu, 18 Mar 2021 20:14:47 GMT
Content-Type: application/json; charset=utf-8
Content-Length: 3233
Connection: close
X-Cache-Key: /data/2.5/forecast?cnt=8&id=578072&units=metric
Access-Control-Allow-Origin: *
Access-Control-Allow-Credentials: true
Access-Control-Allow-Methods: GET, POST

{
"cod": "200",
"message": 0,
"cnt": 8,
"list": [
{
"dt": 1616101200,
"main": {
"temp": -0.25,
"feels_like": -4.54,
"temp_min": -0.51,
"temp_max": -0.25,
"pressure": 1008,
"sea_level": 1008,
"grnd_level": 989,
"humidity": 85,
"temp_kf": 0.26
},
"weather": [
{
"id": 804,
"main": "Clouds",
"description": "overcast clouds",
"icon": "04n"
}
],
"clouds": {
"all": 87
},
"wind": {
"speed": 2.81,
"deg": 16
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2021-03-18 21:00:00"
},
{
"dt": 1616112000,
"main": {
"temp": -0.68,
"feels_like": -5.08,
"temp_min": -0.87,
"temp_max": -0.68,
"pressure": 1010,
"sea_level": 1010,
"grnd_level": 990,
"humidity": 83,
"temp_kf": 0.19
},
"weather": [
{
"id": 804,
"main": "Clouds",
"description": "overcast clouds",
"icon": "04n"
}
],
"clouds": {
"all": 94
},
"wind": {
"speed": 2.85,
"deg": 12
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2021-03-19 00:00:00"
},
{
"dt": 1616122800,
"main": {
"temp": -2.06,
"feels_like": -6.13,
"temp_min": -2.2,
"temp_max": -2.06,
"pressure": 1010,
"sea_level": 1010,
"grnd_level": 989,
"humidity": 87,
"temp_kf": 0.14
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04n"
}
],
"clouds": {
"all": 60
},
"wind": {
"speed": 2.26,
"deg": 13
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2021-03-19 03:00:00"
},
{
"dt": 1616133600,
"main": {
"temp": -0.44,
"feels_like": -5.01,
"temp_min": -0.44,
"temp_max": -0.44,
"pressure": 1011,
"sea_level": 1011,
"grnd_level": 990,
"humidity": 74,
"temp_kf": 0
},
"weather": [
{
"id": 803,
"main": "Clouds",
"description": "broken clouds",
"icon": "04d"
}
],
"clouds": {
"all": 64
},
"wind": {
"speed": 2.88,
"deg": 21
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "d"
},
"dt_txt": "2021-03-19 06:00:00"
},
{
"dt": 1616144400,
"main": {
"temp": 0.97,
"feels_like": -3.4,
"temp_min": 0.97,
"temp_max": 0.97,
"pressure": 1012,
"sea_level": 1012,
"grnd_level": 991,
"humidity": 68,
"temp_kf": 0
},
"weather": [
{
"id": 804,
"main": "Clouds",
"description": "overcast clouds",
"icon": "04d"
}
],
"clouds": {
"all": 97
},
"wind": {
"speed": 2.63,
"deg": 17
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "d"
},
"dt_txt": "2021-03-19 09:00:00"
},
{
"dt": 1616155200,
"main": {
"temp": 1.68,
"feels_like": -2.25,
"temp_min": 1.68,
"temp_max": 1.68,
"pressure": 1012,
"sea_level": 1012,
"grnd_level": 992,
"humidity": 68,
"temp_kf": 0
},
"weather": [
{
"id": 804,
"main": "Clouds",
"description": "overcast clouds",
"icon": "04d"
}
],
"clouds": {
"all": 98
},
"wind": {
"speed": 2.11,
"deg": 6
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "d"
},
"dt_txt": "2021-03-19 12:00:00"
},
{
"dt": 1616166000,
"main": {
"temp": 1.08,
"feels_like": -2.81,
"temp_min": 1.08,
"temp_max": 1.08,
"pressure": 1013,
"sea_level": 1013,
"grnd_level": 993,
"humidity": 75,
"temp_kf": 0
},
"weather": [
{
"id": 804,
"main": "Clouds",
"description": "overcast clouds",
"icon": "04d"
}
],
"clouds": {
"all": 99
},
"wind": {
"speed": 2.18,
"deg": 4
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "d"
},
"dt_txt": "2021-03-19 15:00:00"
},
{
"dt": 1616176800,
"main": {
"temp": 0.29,
"feels_like": -3.66,
"temp_min": 0.29,
"temp_max": 0.29,
"pressure": 1014,
"sea_level": 1014,
"grnd_level": 994,
"humidity": 81,
"temp_kf": 0
},
"weather": [
{
"id": 804,
"main": "Clouds",
"description": "overcast clouds",
"icon": "04n"
}
],
"clouds": {
"all": 100
},
"wind": {
"speed": 2.31,
"deg": 37
},
"visibility": 10000,
"pop": 0,
"sys": {
"pod": "n"
},
"dt_txt": "2021-03-19 18:00:00"
}
],
"city": {
"id": 578072,
"name": "Belgorod",
"coord": {
"lat": 50.61,
"lon": 36.58
},
"country": "RU",
"population": 0,
"timezone": 10800,
"sunrise": 1616038857,
"sunset": 1616082154
Здесь 8 блоков, парсинг последнего 8 блока, соответственно и время. Т.е. если mCnt=2, то прогноз через 6 часов, а mCnt=8 - прогноз через 24 часа, те 8 метка. В блоке выводиться время, соответствующее метке.

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

Парсер погоды на ESP8266

#8

Сообщение Qwert855 » 19.03.2021{, 19:03}

потестил обновленный блок. очень удобный.
включил в него смену языка и вывод Weather condition codes ID отсюда https://openweathermap.org/weather-conditions

rogekam, просьба добавить в блок импульс на удачный запрос, с UNIX выходом все супер информативно. в целом можно и его отслеживать как статус чтения

rogekam
Рядовой
Сообщения: 77
Зарегистрирован: 24.06.2020{, 21:21}
Репутация: 28
Откуда: RUS31
Имя: Egor

Парсер погоды на ESP8266

#9

Сообщение rogekam » 20.03.2021{, 10:47}

Qwert855 писал(а):
19.03.2021{, 19:03}
потестил обновленный блок. очень удобный.
включил в него смену языка и вывод Weather condition codes ID отсюда https://openweathermap.org/weather-conditions

rogekam, просьба добавить в блок импульс на удачный запрос, с UNIX выходом все супер информативно. в целом можно и его отслеживать как статус чтения
Обновил п. блок прогноза погоды. Добавил "видимость". Изменил формат точки времени, теперь выход в формате string. Добавлять выходных параметров можно еще, (их два десятка), на любителя, но считаю избыточным. Данные на сервере погоды обновляются 10-20 минут. Так что стучать не стоит. В параметрах, период опроса, выставить в пределах 10 мин.

oleg7
Рядовой
Сообщения: 2
Зарегистрирован: 07.12.2021{, 16:07}
Репутация: 0
Откуда: Владивосток
Имя: Олег

Парсер погоды на ESP8266

#10

Сообщение oleg7 » 12.12.2021{, 23:08}

Доброго времени суток.

rogekam, вы не рассматривали возможность получения погоды с gismeteo.ru или с яндекс погоды?

Qwert855
Сержант
Сообщения: 159
Зарегистрирован: 19.12.2020{, 23:57}
Репутация: 7
Имя: Alex

Парсер погоды на ESP8266

#11

Сообщение Qwert855 » 27.12.2021{, 14:24}

Привет.
у всех работает стабильно блок?
обратил внимание что ЕСП 01 уходит в перезагрузку раз в 3-4 дня.
убрал все что можно кроме данного блока и блока адресных диодов (как дисплей)

Егор,
впечатление что где то что то переполняется, такое возможно?

m0l0dec
Рядовой
Сообщения: 5
Зарегистрирован: 25.03.2022{, 12:06}
Репутация: 0
Откуда: 55
Имя: Евгений

Парсер погоды на ESP8266

#12

Сообщение m0l0dec » 08.04.2022{, 06:19}

Уважаемые, приветствую. Подскажите, как знак "+" или "-" значения температуры получить ?
У меня при такой схеме выводится на дисплей просто числовое значение без знака...
crhby.jpg
скрин
crhby.jpg (24.77 КБ) 1764 просмотра

rogekam
Рядовой
Сообщения: 77
Зарегистрирован: 24.06.2020{, 21:21}
Репутация: 28
Откуда: RUS31
Имя: Egor

Парсер погоды на ESP8266

#13

Сообщение rogekam » 08.04.2022{, 21:30}

m0l0dec писал(а):
08.04.2022{, 06:19}
У меня при такой схеме выводится на дисплей просто числовое значение без знака...
При такой схеме включения..., на дисплее :smile453:

m0l0dec
Рядовой
Сообщения: 5
Зарегистрирован: 25.03.2022{, 12:06}
Репутация: 0
Откуда: 55
Имя: Евгений

Парсер погоды на ESP8266

#14

Сообщение m0l0dec » 11.04.2022{, 07:58}

rogekam писал(а):
08.04.2022{, 21:30}
При такой схеме включения..., на дисплее :smile453:
Схему приложил на скриншоте... в предыдущем сообщении. В личные сообщения я вам писал еще.
Там пользовательский блок "forecast" к выходу которого подключен преобразователь строк и затем стандартный блок дисплея 1602.
Залил на хостинг картинок и еще раз приложил скриншот ниже:
Изображение
Изображение

m0l0dec
Рядовой
Сообщения: 5
Зарегистрирован: 25.03.2022{, 12:06}
Репутация: 0
Откуда: 55
Имя: Евгений

Парсер погоды на ESP8266

#15

Сообщение m0l0dec » 19.04.2022{, 11:47}

rogekam писал(а):
08.04.2022{, 21:30}
При такой схеме включения..., на дисплее :smile453:
В личку ответил, файл проекта, для примера, приложил здесь и в личку тоже отправил.
пример.flp
(613.53 КБ) 96 скачиваний

m0l0dec
Рядовой
Сообщения: 5
Зарегистрирован: 25.03.2022{, 12:06}
Репутация: 0
Откуда: 55
Имя: Евгений

Парсер погоды на ESP8266

#16

Сообщение m0l0dec » 12.05.2022{, 11:17}

кто то может разъяснить, почему не отображается знак "+" или "-", моя ошибка или что, как исправить ?

m0l0dec
Рядовой
Сообщения: 5
Зарегистрирован: 25.03.2022{, 12:06}
Репутация: 0
Откуда: 55
Имя: Евгений

Парсер погоды на ESP8266

#17

Сообщение m0l0dec » 01.06.2022{, 11:14}

Вопрос снимаю, знак минус отображается, знак плюс нет - мне подходит.

Ответить

Вернуться в «Коммуникация и связь»