Получение онлайн прогноза погоды

Материал из Sprut.hub Wiki

Данный набор сценариев, состоит из глобальных и блочных сценариев. Глобальные занимаются запросом данных, локальные отправляют показания в Telegram и обновляют показания виртуальных датчиков.

Для всех сервисов, кроме Yr.no - требуется получение API ключей. То есть вам нужно зарегистрироваться в сервисе как разработчик и получить API ключ, который потом необходимо вставить в один ключевой глобальный сценарий, который обязателен для работы всех остальных в наборе.

Все шаблоны можно скачать и импортировать в сценарии вашего Sprut.hub как показано в инструкции

Скачать все сценарии единым архивом

Структура сценариев для использования:

  • Глобальный сценарий "Погода Переменные и другие украшательства" хранит в себе данные API и различные функции по преобразованию различных показаний в "человеческие цифры"
  • Глобальный "Погода Яндекс" - отвечает за получение информации из Яндекса
  • Глобальный "Погода Openweather" - отвечает за получение информации из OpenWeather
  • Глобальный "Погода AccuWeather" - отвечает за получение информации из AccuWeather
  • Глобальный "Погода Yr.no" - отвечает за получение информации из Yr.no

Блочные сценарии для каждого сервиса

Блочные сценарии - двух типов: один присваивает полученные показания вашим созданным виртуальным датчикам, второй занимается отправкой прогноза погоды в Телеграм.

Ни один блочный сценарий не будет работать если не настроен глобальный сценарий с переменными и украшательствами и соответствующий сервису глобальный сценарий, получающий данные.

Блочные сценарии просто запрашивают полученные глобальными сценариями данные и отправляет их по назначению.

Главный глобальный сценарий для работы всех остальных

Обязательный глобальный сценарий, который содержит все переменные с координатами и ключами API для всех сервисов.

Сюда заполняются координаты и API ключи сервисов. Он находится в глобальных сценариях и называется "Погода Переменные и другие украшательства"


Вы можете заполнять не все ключи API а только выбранный вами один сервис, но даже если вы хотите пользоваться данными от Yr.no где не требуется ключ API, вам этот сценарий все равно будет нужен, так как он содержит ваши координаты для прогноза, которые необходимо так же заполнить, как и все остальное

Это главный сценарий, без которого остальные работать не будут

Шаблон глобального сценария с переменными и украшательствами для отправки в Телеграм

Yr.No

Самый простой и доступный сервис. Не требует регистрации и получения API ключей и каких либо дополнительных действий. Но отдает только часовые показания. То есть когда бы вы ни запросили данные, прогноз будет показываться от начала часа.

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

Шаблоны сценариев:

Отправка показаний Yr.no в Telegram

global.yr_request();
if (global.yr.error && !global.yr.temp) {log.warn("Данных YR нет: {}", global.yr.error_code)} else {
global.sendToTelegram(["Погода Yr.no:",
        "=================================",
		"Данные получены в: *" + global.yr.time + "*",
        "=================================",
        "Состояние: *" + global.yr.condition_1_hour + "*",
        "---------------------------------------------",
        "Температура (факт):* " + Hub.getCharacteristicValue(552,15) + " °C*",
        "Температура (прогноз):* " + global.yr.temp + " °C*",
        "Относительная влажность:* " + global.yr.hum + " %*",
        "---------------------------------------------",
        "Ветер: *" + global.yr.wind_dir + "*", 
        "Скорость ветра: *" + global.yr.wind + " м/с*", 
        "---------------------------------------------",
        "УФ Индекс: * " + global.yr.uv +"*",
        "---------------------------------------------",
		"Точка росы: *" + global.yr.dewpoint + "°C*",
        "---------------------------------------------",
		"Атмосферное давление: *" + global.yr.pressure + " мм.рт.ст.*",
        "---------------------------------------------",
		"Туман: *" + global.yr.fog + "%*",
        "=================================",
		"*Прогноз на ближайшие 6 часов*",
        "=================================",
        "*" + global.yr.condition_6_hours + "*",
		"Температура (мин):* " + global.yr.temp_min_6_hours + " °C*",
        "Температура (макс):* " + global.yr.temp_max_6_hours + " °C*",
        "Уровень осадков: *" + global.yr.prec + " мм.*",
        "=================================",
		"*Прогноз на ближайшие 12 часов*",
        "=================================",
        "*" + global.yr.condition_12_hours + "*",
        "================================="
        ]);
}


Переменные

  • global.yr.time - Время прогноза
  • global.yr.pressure - Атмосферное давление
  • global.yr.temp - Температура
  • global.yr.cloud - Уровень облачности (%)
  • global.yr.dewpoint - Точка росы
  • global.yr.fog - Уровень тумана (%)
  • global.yr.hum - Относительная влажность
  • global.yr.uv - Уровень ультрафиолета
  • global.yr.wind_deg - Направление ветра (в градусах)
  • global.yr.wind_dir - Направление ветра (текстовое)
  • global.yr.wind - Скорость ветра
  • global.yr.condition_1_hour - Состояние погоды в ближайший час
  • global.yr.condition_6_hours - Состояние погоды в ближайшие 6 часов
  • global.yr.condition_6_hours - Состояние погоды в ближайшие 12 часов
  • global.yr.temp_max_6_hours - Максимальная температура в ближайшие 6 часов
  • global.yr.temp_min_6_hours - Минимальная температура в ближайшие 6 часов
  • global.yr.prec - Уровень осадков в ближайшие 6 часов

OpenWeather

Для работы с этим сервисом, требуется регистрация на сайте и получение ключа API. Вам необходимо выбрать бесплатный тариф по этой ссылке, а потом сгенерировать свой API ключ, который находится в личном кабинете.

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

Шаблоны сценариев:

Отправка показаний OpenWeather в Telegram

global.ow_request();
if (global.ow.error && !global.ow.temp) {log.warn("Данных OpenWeather нет: {}", global.ow.error_code); global.sendToTelegram(["Данных OpenWeather нет","Причина: " +  global.ow.error_code])} else {

global.sendToTelegram(["*Прогноз OpenWeather*",
        "=================================",
        "Данные получены в *: " + global.ow.time + "*",
        "=================================",
        "На улице *" + global.ow.condition + "*",
        "Облачность: *" + global.ow.clouds + "%*",
        "Видимость: *" + global.ow.visibility + " м.*",
        "---------------------------------------------",
        "Температура (прогноз):* " + global.ow.temp + " °C*",
        "Ощущается:* " + global.ow.feels_like +" °C*",
        "---------------------------------------------",        
        "Минимальная: *" + global.ow.temp_min + "°C*",
        "Максимальная: *" + global.ow.temp_max + "°C*",
        "---------------------------------------------",        
        "Относительная влажность:* " + global.ow.hum + " %*",
        "---------------------------------------------",
        "Атмосферное давление: *" + global.ow.pressure + " мм.рт.ст.*",
        "---------------------------------------------",
        "Ветер: *" + global.ow.wind_deg_text +"*", 
        "Скорость ветра: *" + global.ow.wind + " м/с*", 
        "С порывами до: *" + global.ow.gust + " м/с*",
        "---------------------------------------------",
        "Восход: *" + global.ow.sunrise +"*",
        "Закат:    *" + global.ow.sunset +"*",
        "=================================",
        ]);
}

Переменные для сценариев

  • global.ow.time - Время прогноза
  • global.ow.temp - Температура
  • global.ow.hum - Влажность
  • global.ow.pressure - Давление (мм. рт. ст.)
  • global.ow.wind - Скорость ветра (м/с)
  • global.ow.gust - Порывы ветра (м/с)
  • global.ow.wind_deg - Направление ветра (в градусах)
  • global.ow.wind_deg_text - Направление ветра в текстовом формате
  • global.ow.feels_like - Температура (Ощущается)
  • global.ow.temp_min - Минимальная температура
  • global.ow.temp_max - Максимальная температура
  • global.ow.clouds - Уровень облачности (%)
  • global.ow.visibility - Видимость (м)
  • global.ow.condition - Описание погоды (текстовое, для использования в Телеграм)
  • global.ow.sunrise - Время восхода
  • global.ow.sunset - Время заката

Яндекс

Для работы с Яндекс.Погодой, вам необходимо иметь учетную запись Яндекс.Паспорта и с ее помощью зарегистрироваться в разделе для разработчиков. Там необходимо подключить API Яндекс.Погоды и подключить бесплатный тариф. После того, как вы его подключите, вам необходимо в настройках сервиса сменить Тестовый тариф на бесплатный тариф, который подразумевает 50 запросов в сутки.

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

Шаблоны сценариев:

Отправка показаний Яндекс.Погоды в Telegram

global.ya_request();
if (global.ya.error && !global.ya.temp) {log.warn("Данных Yandex нет: {}", global.ya.error_code); global.sendToTelegram(["Данных Яндекс нет","Причина: " +  global.ya.error_code])} else {
global.sendToTelegram(["*Погода Яндекс:*",
        "=================================",
        "Текущие показания получены в: *" + global.ya.time + "*",
        "=================================",
        global.ya.condition,
        "---------------------------------------------",
        "Температура (факт):* " + Hub.getCharacteristicValue(552,15) + " °C*",
        "Температура (прогноз):* " + global.ya.temp + " °C*",
        "Ощущается:* " + global.ya.feels_like +" °C*",
        "Относительная влажность:* " + global.ya.hum + " %*",
        "---------------------------------------------",
        "Ветер: *" + global.ya.wind_direction_text +"*", 
        "Скорость ветра: *" + global.ya.wind + " м/с*", 
        "С порывами до: *" + global.ya.gust + " м/с*",
        "---------------------------------------------",
        "Фаза луны: * " + global.ya.moon_text +"*",
        "---------------------------------------------",
        "Восход: *" + global.ya.sunrise +"*",
        "Закат:    *" + global.ya.sunset +"*", 
        "================================="]);
global.sendToTelegram([
        "=================================",
        "*Прогноз на следующие 6 часов*",
        "=================================",
        "Данные получены в: *" + global.ya.forecast_time + "*",
        "---------------------------------------------",
        "*" + global.ya.part_1_name + "* ожидается: *" + global.ya.condition_1 + "*",
        "---------------------------------------------",
        "Вероятность осадков: *" + global.ya.prec_1 + " %*",
        "Длительность осадков: *" + global.ya.prec_period_1 + " минут*",
        "Количество осадков: *" + global.ya.prec_mm_1 + " мм.*",
        "---------------------------------------------",
        "Температура (мин):* " + global.ya.temp_min_1 + " °C*",
        "Температура (макс):* " + global.ya.temp_max_1 + " °C*",
        "Ощущается:* " + global.ya.feels_like_1 +" °C*",
        "Относительная влажность:* " + global.ya.hum_1 + " %*",
        "---------------------------------------------",
        "Ветер: *" + global.ya.wind_direction_1_text +"*", 
        "Скорость ветра: *" + global.ya.wind_1 + " м/с*", 
        "С порывами до: *" + global.ya.gust_1 + " м/с*",
        "=================================",
        "*" + global.ya.part_2_name + "* ожидается: *" + global.ya.condition_2 + "*", 
        "---------------------------------------------",
        "Вероятность осадков: *" + global.ya.prec_2 + " %*",
        "Длительность осадков: *" + global.ya.prec_period_2 + " минут*",
        "Количество осадков: *" + global.ya.prec_mm_2 + " мм.*",
        "---------------------------------------------",
        "Температура (мин):* " + global.ya.temp_min_2 + " °C*",
        "Температура (макс):* " + global.ya.temp_max_2 + " °C*",
        "Ощущается:* " + global.ya.feels_like_2 +" °C*",
        "Относительная влажность:* " + global.ya.hum_2 + " %*",
        "---------------------------------------------",
        "Ветер: *" + global.ya.wind_direction_2_text +"*", 
        "Скорость ветра: *" + global.ya.wind_2 + " м/с*", 
        "С порывами до: *" + global.ya.gust_2 + " м/с*",
        "================================="
        ]);
}

Переменные

Текущий прогноз

  • global.ya.time - Время текущего прогноза
  • global.ya.forecast_time - Время прогноза будущих периодов
  • global.ya.forecast_date - Дата прогноза будущих периодов
  • global.ya.condition - Описание погоды (текстовое, для использования в Телеграм)
  • global.ya.moon_text - Фаза луны (текстовое поле для использования в Телеграм)
  • global.ya.temp - Температура
  • global.ya.feels_like - Температура (Ощущается)
  • global.ya.hum - Влажность
  • global.ya.wind_direction_ - Направление ветра (символ)
  • global.ya.wind_direction_text - Направление ветра (текстовое поле для использования в Телеграм)
  • global.ya.wind - Скорость ветра (м/с)
  • global.ya.gust - Порывы ветра (м/с)
  • global.ya.sunrise - Время восхода
  • global.ya.sunset - Время заката

Прогноз на следующий период суток (Если текущий период день, то на вечер)

  • global.ya.part_1_name - Наименование периода суток
  • global.ya.condition_1 - Описание погоды
  • global.ya.temp_min_1 - Минимальная температура
  • global.ya.temp_max_1 - Максимальная температура
  • global.ya.feels_like_1 - Температура (Ощущается)
  • global.ya.hum_1 - Влажность
  • global.ya.wind_direction_1_text - Направление ветра (текстовое поле для использования в Телеграм)
  • global.ya.wind_direction_1 - Направление ветра (символ)
  • global.ya.wind_1 - Скорость ветра (м/с)
  • global.ya.gust_1 - Порывы ветра (м/с)
  • global.ya.prec_1 - Вероятность осадков
  • global.ya.prec_period_1 - Продолжительность осадков
  • global.ya.prec_mm_1 - Уровень осадков (мм)

Прогноз на последующий период суток (Если текущий период день, то на ночь)

  • global.ya.part_2_name - Наименование периода суток
  • global.ya.condition_2 - Описание погоды (текстовое, для использования в Телеграм)
  • global.ya.temp_min_2 - Минимальная температура
  • global.ya.temp_max_2 - Максимальная температура
  • global.ya.feels_like_2 - Температура (Ощущается)
  • global.ya.hum_2 - Влажность
  • global.ya.wind_direction_2_text - Направление ветра (текстовое поле для использования в Телеграм)
  • global.ya.wind_dir_2 - Направление ветра (символ)
  • global.ya.wind_2 - Скорость ветра (м/с)
  • global.ya.gust_2 - Порывы ветра (м/с)
  • global.ya.prec_2 - Вероятность осадков
  • global.ya.prec_period_2 - Продолжительность осадков
  • global.ya.prec_mm_2 - Уровень осадков (мм)

AccuWeather

Для работы с сервисом AccuWeather, потребуется регистрация в системе и после регистрации, необходимо создать ключ API в разделе My Apps, где вы указываете необходимые параметры и подключение приложения к разделу Core Weather.

Получение погоды в системе работает несколько "по хитрому", поэтому вам для начала потребуется получить ID вашего города. Для этого вам надо загрузить дополнительный блочный шаблон для получения данных под названием AccuWeather City ID, который использует координаты, указанные в главном сценарии с переменными и украшательствами и отправляет вам в лог и в телеграм ID вашего города, который вы прописываете в переменную accuweather_city в том же глобальном сценарии, где указаны координаты. Его надо выполнить только один раз и получив ID города, этот сценарий можно удалить.

Шаблоны сценариев:

Отправка показаний AccuWeather в Telegram

global.acc_request();
if (global.acc.error && !global.acc.temp) {log.warn("Данных AccuWeather нет: {}", global.acc.error_code); global.sendToTelegram(["Данных AccuWeather нет","Причина: " +  global.acc.error_code])} else {
global.sendToTelegram(["*Погода AccuWeather*:",
        "=================================",
        "Данные получены в: *" + global.acc.time + "*",
        "=================================",
        "На улице: *" + global.acc.condition + "*",
        "Облачность: *" + global.acc.cloud + " %*",
        "---------------------------------------------",
        "Температура (факт):* " + Hub.getCharacteristicValue(552,15) + " °C*",
        "Температура (прогноз):* " + global.acc.temp + " °C*",
        "Ощущается (RealFeel):* " + global.acc.real_temp +" °C*",
        "---------------------------------------------",
        "Ощущается (RealFeel в тени):* " + global.acc.real_shade +" °C*",
        "Ощущается (с учетом влажности и ветра):* " + global.acc.apparent_temp +" °C*",
        "Ощущается (открытой кожей с ветром):* " + global.acc.wind_chill_temp +" °C*",
        "---------------------------------------------",
        "Температура (мин):* " + global.acc.temp_min + " °C*",
        "Температура (макс):* " + global.acc.temp_max + " °C*",
        "---------------------------------------------",
        "Относительная влажность:* " + global.acc.hum + " %*",
        "Влажность уличного воздуха в помещении:* " + global.acc.indoor_hum + " %*",
        "---------------------------------------------",
        "Точка росы:* " + global.acc.dewpoint + " °C*",
        "---------------------------------------------",
        "УФ Индекс:* " + global.acc.uv + " (" + global.acc.uv_text + ")*",
        "---------------------------------------------",
        "Ветер: *" + global.acc.wind_deg_text +"*", 
        "Скорость ветра: *" + global.acc.wind + " м/с*", 
        "С порывами до: *" + global.acc.gust + " м/с*",
        "---------------------------------------------",
        "Атмосферное давление:* " + global.acc.pressure + " мм.рт.ст.*",
        "---------------------------------------------",
        "Видимость:* " + global.acc.visibility + " км.*",
        "---------------------------------------------",
        "Уровень осадков в ближайший час:* " + global.acc.precip + " мм.*",
        "================================="
        ])
}

Переменные

  • global.acc.time - Время прогноза
  • global.acc.condition - Описание погоды (текстовое, для использования в Телеграм)
  • global.acc.cloud - Уровень облачности (%)
  • global.acc.temp - Температура
  • global.acc.temp_min - Минимальная температура
  • global.acc.temp_max - Максимальная температура
  • global.acc.real_temp - Температура RealTemp (зарегистрированная торговая марка AccuWeather)
  • global.acc.real_shade - Температура RealTemp в тени
  • global.acc.apparent_temp - Температура (Ощущается)
  • global.acc.wind_chill_temp - Температура (Ощущается открытой кожей)
  • global.acc.hum - Влажность
  • global.acc.indoor_hum - Влажность воздуха попадающего в помещение с улицы
  • global.acc.dewpoint - Точка росы
  • global.acc.uv - Уровень ультрафиолета
  • global.acc.uv_text - Уровень ультрафиолета (текстовое, для использования в Телеграм)
  • global.acc.wind - Скорость ветра (м/с)
  • global.acc.gust - Порывы ветра (м/с)
  • global.acc.wind_dir - направление ветра (английский символ)
  • global.acc.wind_dir_text - направление ветра (текстовое)
  • global.acc.wind_deg - направление ветра (в градусах)
  • global.acc.wind_deg_text - направление ветра (текстовое, вычисленное из градусов)
  • global.acc.visibility - видимость (км)
  • global.acc.pressure - атмосферное давление (мм.рт.ст.)
  • global.acc.precip - уровень осадков (мм)