Страница 1 из 1

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

Добавлено: 09.03.2021{, 02:27}
rogekam
Тема погоды на форуме: 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

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

Добавлено: 14.03.2021{, 19:28}
Qwert855
Добрый день.

скетч выдает ошибку
'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 строк

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

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

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

Добавлено: 17.03.2021{, 11:37}
Qwert855
можно поток входящий отрезать или нужно принять все 16тыс знаков а уже из них отрезать знаки?
при возможность попробую как есп себя поведет если поставить 16 тыс знаков и попытаться обработать их :smile427:

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

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

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

Добавлено: 18.03.2021{, 21:21}
Qwert855
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)

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

Добавлено: 18.03.2021{, 23:19}
rogekam
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 метка. В блоке выводиться время, соответствующее метке.

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

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

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

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

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

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

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

Добавлено: 12.12.2021{, 23:08}
oleg7
Доброго времени суток.

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

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

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

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

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

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

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

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

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

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

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

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

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

Добавлено: 12.05.2022{, 11:17}
m0l0dec
кто то может разъяснить, почему не отображается знак "+" или "-", моя ошибка или что, как исправить ?

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

Добавлено: 01.06.2022{, 11:14}
m0l0dec
Вопрос снимаю, знак минус отображается, знак плюс нет - мне подходит.