Получение онлайн прогноза погоды: различия между версиями

Материал из Sprut.hub Wiki
Нет описания правки
Нет описания правки
 
(не показано 110 промежуточных версий этого же участника)
Строка 1: Строка 1:
== OpenWeather ==
{{QuoteRed|Уровень сложности ВЫСОКИЙ. Подходит только для продвинутых пользователей, кто понимает как работают глобальные сценарии и умеет работать с кодом}}
 
Данный набор сценариев, состоит из '''глобальных и блочных''' сценариев. Глобальные занимаются запросом данных, локальные отправляют показания в Telegram и обновляют показания виртуальных датчиков.
 
Для всех сервисов, кроме Yr.no - требуется получение API ключей. То есть вам нужно зарегистрироваться в сервисе как разработчик и получить API ключ, который потом необходимо вставить в один ключевой глобальный сценарий, который обязателен для работы всех остальных в наборе.
{{QuoteYellow|Все шаблоны можно скачать и импортировать в сценарии вашего Sprut.hub как показано [[Сценарии в Sprut.hub - основные элементы управления#Общее окно управления сценариями|в инструкции]]}}
 
== Архив с шаблонами ==
[https://wiki.spruthub.ru/images/b/b6/%D0%A1%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B8_%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D1%8B.zip Скачать шаблоны всех сценариев одним архивом]


* '''ow_temp''' - Температура
== Структура сценариев для использования ==
* '''ow_hum''' - Влажность
* '''ow_pressure''' - Давление (мм. рт. ст.)
* '''ow_wind''' - Скорость ветра (м/с)
* '''ow_gust''' - Порывы ветра (м/с)
* '''ow_wind_dir''' - Направление ветра ([http://snowfence.umn.edu/Components/winddirectionanddegrees.htm в градусах])
* '''ow_feels_like''' - Температура (Ощущается)
* '''ow_temp_min''' - Минимальная температура
* '''ow_temp_max''' - Максимальная температура
* '''ow_clouds''' - Уровень облачности (%)
* '''ow_visibility''' - Видимость (м)
* '''ow_condition''' - Описание погоды (текстовое, для использования в Телеграм)
* '''ow_sunrise''' - Время восхода
* '''ow_sunset''' - Время заката


== Yr.No ==
=== Глобальные сценарии ===
1. [[Получение онлайн прогноза погоды#Главный глобальный сценарий для работы всех остальных "Погода Переменные и другие украшательства"|Глобальный сценарий '''"Погода Переменные и другие украшательства"''']]
{{QuoteYellow|{{Color|red|ЕДИН ДЛЯ ВСЕХ СЦЕНАРИЕВ. ИМПОРТИРУЕТСЯ В ЕДИНСТВЕННОМ ЭКЗЕМПЛЯРЕ}}. Хранит в себе данные API и различные функции по преобразованию различных показаний в "человеческие цифры". {{Color|red|Является обязательным}} для работы всех остальных}}
2. Глобальный '''"Погода Яндекс"''' - отвечает за получение информации из Яндекса


* '''yr_temp''' - Температура
3. Глобальный '''"Погода Openweather"''' - отвечает за получение информации из OpenWeather
* '''yr_wind''' - Скорость ветра
* '''yr_cloud''' - Уровень облачности (%)


== AccuWeather ==
4. Глобальный '''"Погода AccuWeather"''' - отвечает за получение информации из AccuWeather


* '''acc_condition''' - Описание погоды (текстовое, для использования в Телеграм)
5. Глобальный '''"Погода Yr.no"''' - отвечает за получение информации из Yr.no
* '''acc_cloud''' - Уровень облачности (%)
* '''acc_temp''' - Температура
* '''acc_temp_min''' - Минимальная температура
* '''acc_temp_max''' - Максимальная температура
* '''acc_real_temp''' - Температура RealTemp (зарегистрированная торговая марка AccuWeather)
* '''acc_real_shade''' - Температура RealTemp в тени
* '''acc_apparent_temp''' - Температура (Ощущается)
* '''acc_wind_chill_temp''' - Температура (Ощущается открытой кожей)
* '''acc_hum''' - Влажность
* '''acc_indoor_hum''' - Влажность воздуха попадающего в помещение с улицы
* '''acc_dewpoint''' - Точка росы
* '''acc_uv''' - Уровень ультрафиолета
* '''acc_uv_text''' - Уровень ультрафиолета (текстовое, для использования в Телеграм)
* '''acc_wind''' - Скорость ветра (м/с)
* '''acc_gust''' - Порывы ветра (м/с)
* '''acc_wind_dir''' - направление ветра (английский символ)


== Яндекс ==
=== Блочные сценарии для каждого сервиса ===
#Блочный '''AccuWeather City ID''' - отвечает за получение ID вашего города из координат, указанных в первом глобальном сценарии. Полученные данные вставить так же в первый глобальный сценарий в поле '''accuweather_city'''
#Блочный '''"Погода AccuWeather в Телеграм"''' - отправляет данные в Телеграм
# Блочный '''"Погода AccuWeather"''' - устанавливает значения виртуальных датчиков
# Блочный '''"Погода Яндекс в Телеграм"''' - отправляет данные в Телеграм
# Блочный '''"Погода Яндекс"''' - устанавливает значения виртуальных датчиков
# Блочный '''"Погода Yr.no датчики"''' - устанавливает значения виртуальных датчиков
# Блочный '''"Погода Yr.no в Телеграм"''' - отправляет данные в Телеграм
# Блочный '''"Погода OpenWeather в Телеграм"''' - отправляет данные в Телеграм
# Блочный '''"Погода OpenWeather"''' - устанавливает значения виртуальных датчиков
{{Color|red|Ни один блочный сценарий не будет работать если не настроен глобальный сценарий с переменными и украшательствами и соответствующий сервису глобальный сценарий, получающий данные.}}


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


* '''ya_condition''' - Описание погоды (текстовое, для использования в Телеграм)
То есть, если вам нужны данные Яндекса отправлять в телеграм и присваивать значения датчикам, то вам необходимо будет два глобальных сценария (один главный, с переменными и собственно сам глобальный Яндекса) и два блочных (для датчиков и для телеграма, которые в принципе можно объединить в один).
* '''ya_moon_text''' - Фаза луны (текстовое поле для использования в Телеграм)
* '''ya_temp''' - Температура
* '''ya_feels_like''' - Температура (Ощущается)
* '''ya_hum''' - Влажность
* '''ya_wind_dir''' - Направление ветра (текстовое поле для использования в Телеграм)
* '''ya_wind''' - Скорость ветра (м/с)
* '''ya_gust''' - Порывы ветра (м/с)
* '''ya_sunrise''' - Время восхода
* '''ya_sunset''' - Время заката


=== Прогноз на следующий период суток (Если текущий период день, то на вечер) ===
{{QuoteBlue|Пример: Для получения погоды Яндекса, отправки ее в Telegram и присвоения данных виртуальным датчикам, необходимо импортировать Глобальные сценарии №1 и №2, а также блочные сценарии №4 и №5}}


* '''ya_part_1_name''' - Наименование периода суток
== Как пользоваться ==
* '''ya_1_condition''' - Описание погоды
* '''ya_1_temp_min''' - Минимальная температура
* '''ya_1_temp_max''' - Максимальная температура
* '''ya_1_feels_like''' - Температура (Ощущается)
* '''ya_1_hum''' - Влажность
* '''ya_1_wind_dir''' - Направление ветра (текстовое поле для использования в Телеграм)
* '''ya_1_wind''' - Скорость ветра (м/с)
* '''ya_1_gust''' - Порывы ветра (м/с)
* '''ya_1_prec''' - Вероятность осадков
* '''ya_1_prec_period''' - Продолжительность осадков
* '''ya_1_prec_mm''' - Уровень осадков (мм)


=== Прогноз на последующий период суток (Если текущий период день, то на ночь) ===
* [https://wiki.spruthub.ru/images/b/b6/%D0%A1%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D0%B8_%D0%BF%D0%BE%D0%B3%D0%BE%D0%B4%D1%8B.zip Скачать шаблоны сценариев] для дальнейшего импорта их в Sprut.hub
* [[Сценарии в Sprut.hub - основные элементы управления#Общее окно управления сценариями|Импортировать в Sprut.hub]] обязательный глобальный сценарий '''№1 "Погода Переменные и другие украшательства"'''
* Заполнить [[Получение онлайн прогноза погоды#Главный глобальный сценарий для работы всех остальных "Погода Переменные и другие украшательства"|координаты и API ключи в глобальном сценарии Погода Переменные и другие украшательства]]
* При использовании сервиса AccuWeather - импортировать шаблон блочного сценария '''Accuweather City ID''' для получения ID вашего города и вставить полученный ID города (его видно в логе или в телеграме) в глобальный сценарий №1
* [[Получение онлайн прогноза погоды#Присвоение данных прогноза погоды виртуальным датчикам|Создать виртуальные датчики]] температуры, влажности и другие для отображения показаний как описано в [[Создание виртуальных аксессуаров|инструкции о создании виртуальных аксессуаров]]. Для каждого сервиса погоды - свой набор датчиков.
* Импортировать соответствующий нужному сервису погоды '''глобальный''' сценарий этого сервиса
* Импортировать соответствующий нужному сервису погоды '''блочный сценарий отправки данных в Телеграм'''
* Импортировать соответствующий нужному сервису погоды '''блочный сценарий установки значений датчиков'''
* Прописать ID созданных аксессуаров и датчиков в [[Получение онлайн прогноза погоды#Присвоение данных прогноза погоды виртуальным датчикам|блочном сценарии установки значений датчиков]]
* Пользоваться


* '''ya_part_2_name''' - Наименование периода суток
== Главный глобальный сценарий для работы всех остальных "Погода Переменные и другие украшательства" ==
* '''ya_2_condition''' - Описание погоды (текстовое, для использования в Телеграм)
Обязательный глобальный сценарий, который содержит все переменные с координатами и ключами API для всех сервисов.
* '''ya_2_temp_min''' - Минимальная температура
* '''ya_2_temp_max''' - Максимальная температура
* '''ya_2_feels_like''' - Температура (Ощущается)
* '''ya_2_hum''' - Влажность
* '''ya_2_wind_dir''' - Направление ветра (текстовое поле для использования в Телеграм)
* '''ya_2_wind''' - Скорость ветра (м/с)
* '''ya_2_gust''' - Порывы ветра (м/с)
* '''ya_2_prec''' - Вероятность осадков
* '''ya_2_prec_period''' - Продолжительность осадков
* '''ya_2_prec_mm''' - Уровень осадков (мм)


== Отправка показаний OpenWeather в Telegram ==
{{Color|red|В верхней части сценария заполняются координаты и API ключи сервисов. Сам сценарий - находится в глобальных и называется "Погода Переменные и другие украшательства"}}
<syntaxhighlight lang="js" line="1">
<syntaxhighlight lang="js" line="1">
if (!global.openweather_api) {
var accuweather_api = "" /** API ключ от приложения для Core Weather из личного кабинета https://developer.accuweather.com/user/me/apps */
global.sendToTelegram("Погода OpenWeather не настроена"); log.info("Погода OpenWeather не настроена")} else {
var yandex_api = "" /** API ключ из личного кабинета https://developer.tech.yandex.ru/services/ */
let deg = global.weather().ow_wind_deg();
var openweather_api = "" /** API ключ из личного кабинета OpenWeather https://home.openweathermap.org/api_keys */
switch (true) {
var lat = "55.786095" /** Широта вашего местоположения (можно взять из настроек хаба. там же есть карта для выбора точки) */
case deg >= 348.75 || deg <= 11.25:
var lon = "37.577768" /** Долгота вашего местоположения (можно взять из настроек хаба. там же есть карта для выбора точки) */
deg = "Северный";
var accuweather_city = "292929"; /** ID города для сервиса AccuWeather. Заполняется вручную. Получается запросом из отдельного сценария после заполнения ключа API и координат здесь */
break;
 
case deg > 11.25 && deg < 33.75:
</syntaxhighlight>
deg = "Северо-северо-восточный";
 
break;
Вы можете заполнять не все ключи API а только выбранный вами один сервис, но даже если вы хотите пользоваться данными от Yr.no где не требуется ключ API, вам этот сценарий все равно будет нужен, так как он содержит ваши координаты для прогноза, которые необходимо так же заполнить, как и все остальное
case deg >= 33.75 && deg <= 56.25:
{{QuoteRed|Это главный сценарий, без которого остальные работать не будут}}
deg = "Северо-восточный";
 
break;
== Yr.No ==
case deg > 56.25 && deg < 78.75:
Самый простой и доступный сервис. Не требует регистрации и получения API ключей и каких либо дополнительных действий. Но отдает только часовые показания. То есть когда бы вы ни запросили данные, прогноз будет показываться от начала часа.
deg = "Восточно-северо-восточный";
 
break;
{{QuoteBlue|Для работы, понадобятся [[Получение_онлайн_прогноза_погоды#Структура_сценариев_для_использования|глобальные сценарии №1 и №5, а также блочные сценарии №6 и №7]]}}Необходимо заполнить только координаты в глобальном сценарии №1 и ID виртуальных датчиков для сценария №6
case deg >= 78.75 && deg <= 101.25:
 
deg = "Восточный";
=== Переменные ===
break;
* '''global.yr.time''' - Время прогноза
case deg > 101.25 && deg < 123.75:
* '''global.yr.pressure''' - Атмосферное давление
deg = "Восточный-юго-восточный";
* '''global.yr.temp''' - Температура
break;
* '''global.yr.cloud''' - Уровень облачности (%)
case deg >= 123.75 && deg <= 146.25:
* '''global.yr.dewpoint''' - Точка росы
deg = "Юго-восточный";
* '''global.yr.fog''' - Уровень тумана (%)
break;
* '''global.yr.hum''' - Относительная влажность
case deg > 146.25 && deg < 168.75:
* '''global.yr.uv''' - Уровень ультрафиолета
deg = "Юго-юго-восточный";
* '''global.yr.wind_deg''' - Направление ветра (в градусах)
break;
* '''global.yr.wind_dir''' - Направление ветра (текстовое)
case deg >= 168.75 && deg <= 191.25:
* '''global.yr.wind''' - Скорость ветра
deg = "Южный";
* '''global.yr.condition_1_hour''' - Состояние погоды в ближайший час
break;
* '''global.yr.condition_6_hours''' - Состояние погоды в ближайшие 6 часов
case deg > 191.25 && deg < 213.75:
* '''global.yr.condition_6_hours''' - Состояние погоды в ближайшие 12 часов
deg = "Юго-юго-Западный";
* '''global.yr.temp_max_6_hours''' - Максимальная температура в ближайшие 6 часов
break;
* '''global.yr.temp_min_6_hours''' - Минимальная температура в ближайшие 6 часов
case deg >= 213.75 && deg <= 236.25:
* '''global.yr.prec''' - Уровень осадков в ближайшие 6 часов
deg = "Юго-западный";
 
break;
== OpenWeather ==
case deg > 236.25 && deg < 258.75:
Для работы с этим сервисом, требуется регистрация на сайте и получение ключа API. Вам необходимо выбрать бесплатный тариф по [https://openweathermap.org/price#weather этой ссылке], а потом сгенерировать свой API ключ, который находится в [https://home.openweathermap.org/myservices личном кабинете].
deg = "Западно-юго-западный";
 
break;
{{QuoteBlue|Для работы, понадобятся [[Получение_онлайн_прогноза_погоды#Структура_сценариев_для_использования|глобальные сценарии №1 и №3, а также блочные сценарии №8 и №9]]}} Необходимо заполнить координаты и API ключ в глобальном сценарии №1 и ID виртуальных датчиков для сценария №9
case deg >= 258.75 && deg <= 281.25:
=== Переменные для сценариев ===
deg = "Западный";
* '''global.ow.time''' - Время прогноза
break;
* '''global.ow.temp''' - Температура
case deg > 281.25 && deg < 303.75:
* '''global.ow.hum''' - Влажность
deg = "Западно-северо-западный";
* '''global.ow.pressure''' - Давление (мм. рт. ст.)
break;
* '''global.ow.wind''' - Скорость ветра (м/с)
case deg >= 303.75 && deg <= 326.25:
* '''global.ow.gust''' - Порывы ветра (м/с)
deg = "Северо-западный";
* '''global.ow.wind_deg''' - Направление ветра ([http://snowfence.umn.edu/Components/winddirectionanddegrees.htm в градусах])
break;
* '''global.ow.wind_deg_text''' - Направление ветра в текстовом формате
case deg > 326.25 && deg < 348.75:
* '''global.ow.feels_like''' - Температура (Ощущается)
deg = "Северо-северо-западный";
* '''global.ow.temp_min''' - Минимальная температура
break;
* '''global.ow.temp_max''' - Максимальная температура
default:
* '''global.ow.clouds''' - Уровень облачности (%)
deg = "Нет данных";
* '''global.ow.visibility''' - Видимость (м)
}
* '''global.ow.condition''' - Описание погоды (текстовое, для использования в Телеграм)
* '''global.ow.sunrise''' - Время восхода
* '''global.ow.sunset''' - Время заката
 
== Яндекс ==
Для работы с Яндекс.Погодой, вам необходимо иметь учетную запись Яндекс.Паспорта и с ее помощью зарегистрироваться в [https://developer.tech.yandex.ru разделе для разработчиков]. Там необходимо подключить API Яндекс.Погоды и подключить бесплатный тариф. После того, как вы его подключите, вам необходимо в настройках сервиса сменить Тестовый тариф на бесплатный тариф '''"Погода на вашем сайте"''', который подразумевает 50 запросов в сутки.
 
{{color|red|Несмотря на то, что вы можете выбрать нужный вам тариф "Погода на вашем сайте" при первичном подключении API, в итоге в вашем личном кабинете может все равно показываться Тестовый тариф. Поэтому вам нужно еще раз переключить тариф на нужный.}}
{{QuoteYellow|Если у вас периодически появляется ошибка при обновлении данных - увеличьте время в блочном сценарии с 30 минут на бОльший период. Например 1 час}}
{{QuoteBlue|Для работы, понадобятся [[Получение_онлайн_прогноза_погоды#Структура_сценариев_для_использования|глобальные сценарии №1 и №2, а также блочные сценарии №4 и №5]]}} Необходимо заполнить координаты и API ключ в глобальном сценарии №1 и ID виртуальных датчиков для сценария №5
 
=== Переменные ===
==== Текущий прогноз ====
 
* '''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.sendToTelegram([
* '''global.ya.part_1_name''' - Наименование периода суток
      "☀️ Погода: " + global.weather().ow_condition(), ,
* '''global.ya.condition_1''' - Описание погоды
      "☁️ Облачность: " + global.weather().ow_clouds() + "%",
* '''global.ya.temp_min_1''' - Минимальная температура
      "🔭 Видимость: " + global.weather().ow_visibility() + " м", ,
* '''global.ya.temp_max_1''' - Максимальная температура
      "🌡 Температура на улице: " + global.weather().ow_temp() + "°",
* '''global.ya.feels_like_1''' - Температура (Ощущается)
      "      Минимальная: " + global.weather().ow_temp_min() + "°",
* '''global.ya.hum_1''' - Влажность
      "      Максимальная: " + global.weather().ow_temp_max() + "°",
* '''global.ya.wind_direction_1_text''' - Направление ветра (текстовое поле для использования в Телеграм)
      "      Ощущается как: " + global.weather().ow_feels_like() + "°", ,
* '''global.ya.wind_direction_1''' - Направление ветра (символ)
      "💧 Влажность: " + global.weather().ow_hum() + "%",
* '''global.ya.wind_1''' - Скорость ветра (м/с)
      "🩺 Давление: " + global.weather().ow_pressure() + " мм.рт.ст.", ,
* '''global.ya.gust_1''' - Порывы ветра (м/с)
      "💨 Скорость ветра: " + global.weather().ow_wind() + " м/с",
* '''global.ya.prec_1''' - Вероятность осадков
      "🧭 Напревление ветра: " + deg,
* '''global.ya.prec_period_1''' - Продолжительность осадков
      "🌬 Порывы ветра: " + global.weather().ow_gust() + " м/с", ,
* '''global.ya.prec_mm_1''' - Уровень осадков (мм)
      "🌅 Восход: " + global.weather().ow_sunrise(),
      "🌇 Закат: " + global.weather().ow_sunset()
    ]);
}
</syntaxhighlight>Скачать шаблон [https://wiki.spruthub.ru/images/c/c6/%D0%A8%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D1%81%D1%86%D0%B5%D0%BD%D0%B0%D1%80%D0%B8%D1%8F_OpenWeather_%D0%B2_%D0%A2%D0%B5%D0%BB%D0%B5%D0%B3%D1%80%D0%B0%D0%BC.json сценария OpenWeather в Telegram]


== Отправка показаний Яндекс.Погоды в Telegram ==
==== Прогноз на последующий период суток (Если текущий период день, то на ночь) ====
<syntaxhighlight lang="js" line="1">
if (!global.yandex_api) {
global.sendToTelegram("Погода Яндекса не настроена"); log.info("Погода Яндекса не настроена")} else {
var cond
switch(global.weather().ya_condition())
{
    case 'clear' : cond = "*Ясно 🌞*"; break;
    case 'partly-cloudy' : cond = "*Малооблачно 🌥*"; break;
    case 'cloudy' : cond = "*Облачно с прояснениями 🌤*"; break;
    case 'overcast' : cond = "*Пасмурно ☁️*"; break;
    case 'drizzle' : cond = "*Морось 🌦*"; break;
    case 'light-rain' : cond = "*Небольшой дождь 🌧*"; break;
    case 'rain' : cond = "*Дождь 🌧*"; break;
    case 'moderate-rain' : cond = "*Умеренно сильный дождь 🌧*"; break;
    case 'heavy-rain' : cond = "*Сильный дождь 🌧*"; break;
    case 'continuous-heavy-rain' : cond = "*Длительный сильный дождь 🌧*"; break;
    case 'showers' : cond = "*Ливень 🌧*"; break;
    case 'wet-snow' : cond = "*Дождь со снегом 🌧🌨*"; break;
    case 'light-snow' : cond = "*Небольшой снег 🌧*"; break;
    case 'snow' : cond = "*Снег 🌧*"; break;
    case 'snow-showers' : cond = "*Снегопад 🌧*"; break;
    case 'hail' : cond = "*град*"; break;
    case 'thunderstorm' : cond = "*гроза*"; break;
    case 'thunderstorm-with-rain' : cond = "*Дождь с грозой*"; break;
    case 'thunderstorm-with-hail' : cond = "*Гроза с градом*"; break;


}
* '''global.ya.part_2_name''' - Наименование периода суток
let cond0
* '''global.ya.condition_2''' - Описание погоды (текстовое, для использования в Телеграм)
switch(global.weather().ya_1_condition())
* '''global.ya.temp_min_2''' - Минимальная температура
{
* '''global.ya.temp_max_2''' - Максимальная температура
    case 'clear' : cond0 = "*Ясно 🌞*"; break;
* '''global.ya.feels_like_2''' - Температура (Ощущается)
    case 'partly-cloudy' : cond0 = "*Малооблачно 🌥*"; break;
* '''global.ya.hum_2''' - Влажность
    case 'cloudy' : cond0 = "*Облачно с прояснениями 🌤*"; break;
* '''global.ya.wind_direction_2_text''' - Направление ветра (текстовое поле для использования в Телеграм)
    case 'overcast' : cond0 = "*Пасмурно ☁️*"; break;
* '''global.ya.wind_dir_2''' - Направление ветра (символ)
    case 'drizzle' : cond0 = "*Морось 🌦*"; break;
* '''global.ya.wind_2''' - Скорость ветра (м/с)
    case 'light-rain' : cond0 = "*Небольшой дождь 🌧*"; break;
* '''global.ya.gust_2''' - Порывы ветра (м/с)
    case 'rain' : cond0 = "*Дождь 🌧*"; break;
* '''global.ya.prec_2''' - Вероятность осадков
    case 'moderate-rain' : cond0 = "*Умеренно сильный дождь 🌧*"; break;
* '''global.ya.prec_period_2''' - Продолжительность осадков
    case 'heavy-rain' : cond0 = "*Сильный дождь 🌧*"; break;
* '''global.ya.prec_mm_2''' - Уровень осадков (мм)
    case 'continuous-heavy-rain' : cond0 = "*Длительный сильный дождь 🌧*"; break;
    case 'showers' : cond0 = "*Ливень 🌧*"; break;
    case 'wet-snow' : cond0 = "*Дождь со снегом 🌧🌨*"; break;
    case 'light-snow' : cond0 = "*Небольшой снег 🌧*"; break;
    case 'snow' : cond0 = "*Снег 🌧*"; break;
    case 'snow-showers' : cond0 = "*Снегопад 🌧*"; break;
    case 'hail' : cond0 = "*град*"; break;
    case 'thunderstorm' : cond0 = "*гроза*"; break;
    case 'thunderstorm-with-rain' : cond0 = "*Дождь с грозой*"; break;
    case 'thunderstorm-with-hail' : cond0 = "*Гроза с градом*"; break;


}
== AccuWeather ==
let cond1
Для работы с сервисом AccuWeather, потребуется регистрация в системе и после регистрации, необходимо [https://developer.accuweather.com/user/me/apps создать ключ API в разделе My Apps], где вы указываете необходимые параметры и подключение приложения к разделу '''Core Weather.'''
switch(global.weather().ya_2_condition())
{
    case 'clear' : cond1 = "*Ясно 🌞*"; break;
    case 'partly-cloudy' : cond1 = "*Малооблачно 🌥*"; break;
    case 'cloudy' : cond1 = "*Облачно с прояснениями 🌤*"; break;
    case 'overcast' : cond1 = "*Пасмурно ☁️*"; break;
    case 'drizzle' : cond1 = "*Морось 🌦*"; break;
    case 'light-rain' : cond1 = "*Небольшой дождь 🌧*"; break;
    case 'rain' : cond1 = "*Дождь 🌧*"; break;
    case 'moderate-rain' : cond1 = "*Умеренно сильный дождь 🌧*"; break;
    case 'heavy-rain' : cond1 = "*Сильный дождь 🌧*"; break;
    case 'continuous-heavy-rain' : cond1 = "*Длительный сильный дождь 🌧*"; break;
    case 'showers' : cond1 = "*Ливень 🌧*"; break;
    case 'wet-snow' : cond1 = "*Дождь со снегом 🌧🌨*"; break;
    case 'light-snow' : cond1 = "*Небольшой снег 🌧*"; break;
    case 'snow' : cond1 = "*Снег 🌧*"; break;
    case 'snow-showers' : cond1 = "*Снегопад 🌧*"; break;
    case 'hail' : cond1 = "*град*"; break;
    case 'thunderstorm' : cond1 = "*гроза*"; break;
    case 'thunderstorm-with-rain' : cond1 = "*Дождь с грозой*"; break;
    case 'thunderstorm-with-hail' : cond1 = "*Гроза с градом*"; break;


}
Получение погоды в системе работает несколько "по хитрому", поэтому вам для начала потребуется получить ID вашего города. Для этого вам надо загрузить дополнительный блочный шаблон для получения данных под названием AccuWeather City ID, который использует координаты, указанные в главном сценарии с переменными и украшательствами и отправляет вам в лог и в телеграм ID вашего города, который вы прописываете в переменную accuweather_city в том же глобальном сценарии, где указаны координаты. Его надо выполнить только один раз и получив ID города, этот сценарий можно удалить.
let wind_dir
switch(global.weather().ya_wind_direction())
{
    case 'nw' : wind_dir = "северо-западный";  break;
    case 'n' : wind_dir = "северный";  break;
    case 'ne' : wind_dir = "северо-восточный";  break;
    case 'e' : wind_dir = "восточный";  break;
    case 'se' : wind_dir = "юго-восточный";  break;
    case 's' : wind_dir = "южный";  break;
    case 'sw' : wind_dir = "юго-западный";  break;
    case 'w' : wind_dir = "западный";  break;
    case 'c' : wind_dir = "штиль";  break;
}


let wind_dir0
{{QuoteBlue|Для работы, понадобятся [[Получение_онлайн_прогноза_погоды#Структура_сценариев_для_использования|глобальные сценарии №1 и №4, а также блочные сценарии №1, №2 и №3]]}} Необходимо однократно выполнить блочный сценарий №1, взять из лога или из сообщения в Телеграм ID города и заполнить поле accuweather_city и API ключ в глобальном сценарии №1, а также ID виртуальных датчиков для сценария №3
switch(global.weather().ya_1_wind_direction())
{
    case 'nw' : wind_dir0 = "северо-западный";  break;
    case 'n' : wind_dir0 = "северный";  break;
    case 'ne' : wind_dir0 = "северо-восточный";  break;
    case 'e' : wind_dir0 = "восточный";  break;
    case 'se' : wind_dir0 = "юго-восточный";  break;
    case 's' : wind_dir0 = "южный";  break;
    case 'sw' : wind_dir0 = "юго-западный";  break;
    case 'w' : wind_dir0 = "западный";  break;
    case 'c' : wind_dir0 = "штиль";  break;
}


let wind_dir1
=== Переменные ===
switch(global.weather().ya_2_wind_direction())
* '''global.acc.time''' - Время прогноза
{
* '''global.acc.condition''' - Описание погоды (текстовое, для использования в Телеграм)
    case 'nw' : wind_dir1 = "северо-западный";  break;
* '''global.acc.cloud''' - Уровень облачности (%)
    case 'n' : wind_dir1 = "северный";  break;
* '''global.acc.temp''' - Температура
    case 'ne' : wind_dir1 = "северо-восточный";  break;
* '''global.acc.temp_min''' - Минимальная температура
    case 'e' : wind_dir1 = "восточный";  break;
* '''global.acc.temp_max''' - Максимальная температура
    case 'se' : wind_dir1 = "юго-восточный";  break;
* '''global.acc.real_temp''' - Температура RealTemp (зарегистрированная торговая марка AccuWeather)
    case 's' : wind_dir1 = "южный";  break;
* '''global.acc.real_shade''' - Температура RealTemp в тени
    case 'sw' : wind_dir1 = "юго-западный";  break;
* '''global.acc.apparent_temp''' - Температура (Ощущается)
    case 'w' : wind_dir1 = "западный";  break;
* '''global.acc.wind_chill_temp''' - Температура (Ощущается открытой кожей)
    case 'c' : wind_dir1 = "штиль";  break;
* '''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''' - уровень осадков (мм)


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


let moon
На примере OpenWeather это выглядит так:<syntaxhighlight lang="js" line="1">
switch(global.weather().ya_moon_text())
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 {
case 'moon-code-0' : moon = "полнолуние";  break;
case 'moon-code-1' : moon = "убывающая луна";  break;
case 'moon-code-2' : moon = "убывающая луна";  break;
case 'moon-code-3' : moon = "убывающая луна";  break;
case 'moon-code-4' : moon = "последняя четверть";  break;
case 'moon-code-5' : moon = "убывающая луна";  break;
case 'moon-code-6' : moon = "убывающая луна";  break;
case 'moon-code-7' : moon = "убывающая луна";  break;
case 'moon-code-8' : moon = "новолуние";  break;
case 'moon-code-9' : moon = "растущая луна";  break;
case 'moon-code-10' : moon = "растущая луна";  break;
case 'moon-code-11' : moon = "растущая луна";  break;
case 'moon-code-12' : moon = "первая четверть";  break;
case 'moon-code-13' : moon = "растущая луна";  break;
case 'moon-code-14' : moon = "растущая луна";  break;
case 'moon-code-15' : moon = "растущая луна";  break;
}
let part0
switch(global.weather().ya_part_1_name())
{
case 'night' : part0 = "*Ночью*";  break;
case 'morning' : part0 = "*Утром*";  break;
case 'day' : part0 = "*Днем*";  break;
case 'evening' : part0 = "*Вечером*";  break;
}
let part1
switch(global.weather().ya_part_2_name())
{
case 'night' : part1 = "*Ночью*";  break;
case 'morning' : part1 = "*Утром*";  break;
case 'day' : part1 = "*Днем*"; break;
case 'evening' : part1 = "*Вечером*";  break;
}


global.sendToTelegram(["Погода Яндекс:",
global.sendToTelegram(["*Прогноз OpenWeather*",
         "=================================",
         "=================================",
        "Данные получены в *: " + global.ow.time + "*",
         "=================================",
         "=================================",
        cond,
         "На улице *" + global.ow.condition + "*",
        "---------------------------------------------",
         "Облачность: *" + global.ow.clouds + "%*",
        "Температура (факт):* " + Hub.getCharacteristicValue(1199,15) + " °C*",
         "Видимость: *" + global.ow.visibility + " м.*",
        "Температура (прогноз):* " + global.weather().ya_temp() + " °C*",
         "Ощущается:* " + global.weather().ya_feels_like() +" °C*",
         "Относительная влажность:* " + global.weather().ya_hum() + " %*",
         "---------------------------------------------",
        "Ветер: *" + wind_dir +"*",
        "Скорость ветра: *" + global.weather().ya_wind() + " м/с*",
        "С порывами до: *" + global.weather().ya_gust() + " м/с*",
         "---------------------------------------------",
         "---------------------------------------------",
         "Фаза луны: * " + moon +"*",
         "Температура (факт):* " + Hub.getCharacteristicValue(552,15) + " °C*",
         "---------------------------------------------",
        "Температура (прогноз):* " + global.ow.temp + " °C*",
         "Восход: *" + global.weather().ya_sunrise() +"*",
        "Ощущается:* " + global.ow.feels_like +" °C*",
         "Закат:   *" + global.weather().ya_sunset() +"*",
         "---------------------------------------------",      
         "=================================",
         "Минимальная: *" + global.ow.temp_min + "°C*",
         "=================================",
         "Максимальная: *" + global.ow.temp_max + "°C*",
        part0 + " ожидается:",
         "---------------------------------------------",      
        cond0,
         "Относительная влажность:* " + global.ow.hum + " %*",
         "---------------------------------------------",
         "---------------------------------------------",
         "Вероятность осадков: *" + global.weather().ya_1_prec() + " %*",
         "Атмосферное давление: *" + global.ow.pressure + " мм.рт.ст.*",
        "Длительность осадков: *" + global.weather().ya_1_prec_period() + " минут*",
        "Количество осадков: *" + global.weather().ya_1_prec_mm() + " мм.*",
         "---------------------------------------------",
         "---------------------------------------------",
         "Температура (мин):* " + global.weather().ya_1_temp_min() + " °C*",
         "Ветер: *" + global.ow.wind_deg_text +"*",  
         "Температура (макс):* " + global.weather().ya_1_temp_max() + " °C*",
         "Скорость ветра: *" + global.ow.wind + " м/с*",  
         "Ощущается:* " + global.weather().ya_1_feels_like() +" °C*",
         "С порывами до: *" + global.ow.gust + " м/с*",
        "Относительная влажность:* " + global.weather().ya_1_hum() + " %*",
         "---------------------------------------------",
         "---------------------------------------------",
         "Ветер: *" + wind_dir0 +"*",
         "Восход: *" + global.ow.sunrise +"*",
        "Скорость ветра: *" + global.weather().ya_1_wind() + " м/с*",  
         "Закат:   *" + global.ow.sunset +"*",
         "С порывами до: *" + global.weather().ya_1_gust() + " м/с*",
        "=================================",
         "=================================",
         "=================================",
        part1 + " ожидается:",
        cond1,
        "---------------------------------------------",
        "Вероятность осадков: *" + global.weather().ya_2_prec() + " %*",
        "Длительность осадков: *" + global.weather().ya_2_prec_period() + " минут*",
        "Количество осадков: *" + global.weather().ya_2_prec_mm() + " мм.*",
        "---------------------------------------------",
        "Температура (мин):* " + global.weather().ya_2_temp_min() + " °C*",
        "Температура (макс):* " + global.weather().ya_2_temp_max() + " °C*",
        "Ощущается:* " + global.weather().ya_2_feels_like() +" °C*",
        "Относительная влажность:* " + global.weather().ya_2_hum() + " %*",
        "---------------------------------------------",
        "Ветер: *" + wind_dir1 +"*",
        "Скорость ветра: *" + global.weather().ya_2_wind() + " м/с*",
        "С порывами до: *" + global.weather().ya_2_gust() + " м/с*",
        "---------------------------------------------",
         ]);
         ]);
}
}
</syntaxhighlight>Скачать шаблон [https://wiki.spruthub.ru/images/7/7e/Шаблон_сценария_отправки_Яндекс.Погоды_в_Telegram.json сценария Яндекс.Погоды в Telegram]
</syntaxhighlight>Где '''Hub.getCharacteristicValue(552,15)''' - это значение характеристики 15 у аксессуара номер 552. Как их узнать у реального датчика температуры, рассказано в [[Аксессуары, сервисы и характеристики#Идентификаторы аксессуара, сервиса и характеристики|этой инструкции]].
 
== Присвоение данных прогноза погоды виртуальным датчикам ==
Для присвоения значений, полученных из Яндекс Погоды датчикам в Sprut.hub - необходимо создать виртуальное устройство и наполнить его следующими датчиками (в скобках указан номер строки в блоке кода ниже, которая относится к этому датчику):
 
# Датчик текущей температуры (строка 3)
# Датчик минимальной температуры (строка 4)
# Датчик максимальной температуры (строка 5)
# Датчик температуры "ощущается" (строка 6)
# Датчик влажности (строка 7)
# Датчик атмосферного давления (строка 8)
# Угол - который используется для отображения скорости ветра (строка 9)
[[Файл:Сценарии 025 Датчики погоды.png|центр|обрамить]]
У каждого из этих датчиков есть идентификатор аксессуара и идентификатор нужного вам сервиса. Для датчика температуры - это температура, для датчика влажности это влажность. Необходимо выяснить [[Аксессуары, сервисы и характеристики#Идентификаторы аксессуара, сервиса и характеристики|в соответствии с инструкцией]] - идентификаторы аксессуара и сервиса для "Температура" у каждого датчика температуры из списка и идентификаторы аксессуаров для датчика влажности, давления и скорости ветра.
 
В указанном примере, например в строке 3:
 
590 - это идентификатор аксессуара датчика текущей температуры
 
13 - это идентификатор сервиса датчика температуры
<syntaxhighlight lang="js" line="1">
global.ya_request();
if (global.ya.error && !global.ya.temp) {log.warn("Данных Yandex нет: {}", global.ya.error_code)} else {
Hub.getAccessory(590).getService(13).getCharacteristic(HC.CurrentTemperature).setValue(global.ya.temp)
Hub.getAccessory(590).getService(22).getCharacteristic(HC.CurrentTemperature).setValue(global.ya.temp_min_1)
Hub.getAccessory(590).getService(25).getCharacteristic(HC.CurrentTemperature).setValue(global.ya.temp_max_1)
Hub.getAccessory(590).getService(28).getCharacteristic(HC.CurrentTemperature).setValue(global.ya.feels_like)
Hub.getAccessory(590).getService(HS.HumiditySensor).getCharacteristic(HC.CurrentRelativeHumidity).setValue(global.ya.hum)
Hub.getAccessory(590).getService(HS.C_AtmosphericPressureSensor).getCharacteristic(HC.C_CurrentAtmosphericPressure).setValue(global.ya.pressure)
Hub.getAccessory(590).getService(HS.C_AngleMeter).getCharacteristic(HC.C_Angle).setValue(global.ya.wind)
}
</syntaxhighlight>Для остальных сервисов необходимо проделать такие же манипуляции. Все эти блочные сценарии есть в архиве.

Текущая версия от 12:36, 9 апреля 2024

Уровень сложности ВЫСОКИЙ. Подходит только для продвинутых пользователей, кто понимает как работают глобальные сценарии и умеет работать с кодом

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

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

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

Архив с шаблонами

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

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

Глобальные сценарии

1. Глобальный сценарий "Погода Переменные и другие украшательства"

ЕДИН ДЛЯ ВСЕХ СЦЕНАРИЕВ. ИМПОРТИРУЕТСЯ В ЕДИНСТВЕННОМ ЭКЗЕМПЛЯРЕ . Хранит в себе данные API и различные функции по преобразованию различных показаний в "человеческие цифры". Является обязательным для работы всех остальных

2. Глобальный "Погода Яндекс" - отвечает за получение информации из Яндекса

3. Глобальный "Погода Openweather" - отвечает за получение информации из OpenWeather

4. Глобальный "Погода AccuWeather" - отвечает за получение информации из AccuWeather

5. Глобальный "Погода Yr.no" - отвечает за получение информации из Yr.no

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

  1. Блочный AccuWeather City ID - отвечает за получение ID вашего города из координат, указанных в первом глобальном сценарии. Полученные данные вставить так же в первый глобальный сценарий в поле accuweather_city
  2. Блочный "Погода AccuWeather в Телеграм" - отправляет данные в Телеграм
  3. Блочный "Погода AccuWeather" - устанавливает значения виртуальных датчиков
  4. Блочный "Погода Яндекс в Телеграм" - отправляет данные в Телеграм
  5. Блочный "Погода Яндекс" - устанавливает значения виртуальных датчиков
  6. Блочный "Погода Yr.no датчики" - устанавливает значения виртуальных датчиков
  7. Блочный "Погода Yr.no в Телеграм" - отправляет данные в Телеграм
  8. Блочный "Погода OpenWeather в Телеграм" - отправляет данные в Телеграм
  9. Блочный "Погода OpenWeather" - устанавливает значения виртуальных датчиков

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


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

То есть, если вам нужны данные Яндекса отправлять в телеграм и присваивать значения датчикам, то вам необходимо будет два глобальных сценария (один главный, с переменными и собственно сам глобальный Яндекса) и два блочных (для датчиков и для телеграма, которые в принципе можно объединить в один).

Пример: Для получения погоды Яндекса, отправки ее в Telegram и присвоения данных виртуальным датчикам, необходимо импортировать Глобальные сценарии №1 и №2, а также блочные сценарии №4 и №5

Как пользоваться

Главный глобальный сценарий для работы всех остальных "Погода Переменные и другие украшательства"

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

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

var accuweather_api = "" /** API ключ от приложения для Core Weather из личного кабинета https://developer.accuweather.com/user/me/apps */
var yandex_api = "" /** API ключ из личного кабинета https://developer.tech.yandex.ru/services/ */
var openweather_api = "" /** API ключ из личного кабинета OpenWeather https://home.openweathermap.org/api_keys */
var lat = "55.786095" /** Широта вашего местоположения (можно взять из настроек хаба. там же есть карта для выбора точки) */
var lon = "37.577768" /** Долгота вашего местоположения (можно взять из настроек хаба. там же есть карта для выбора точки) */
var accuweather_city = "292929"; /** ID города для сервиса AccuWeather. Заполняется вручную. Получается запросом из отдельного сценария после заполнения ключа API и координат здесь */

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

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

Yr.No

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

Для работы, понадобятся глобальные сценарии №1 и №5, а также блочные сценарии №6 и №7

Необходимо заполнить только координаты в глобальном сценарии №1 и ID виртуальных датчиков для сценария №6

Переменные

  • 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 ключ, который находится в личном кабинете.

Для работы, понадобятся глобальные сценарии №1 и №3, а также блочные сценарии №8 и №9

Необходимо заполнить координаты и API ключ в глобальном сценарии №1 и ID виртуальных датчиков для сценария №9

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

  • 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 запросов в сутки.

Несмотря на то, что вы можете выбрать нужный вам тариф "Погода на вашем сайте" при первичном подключении API, в итоге в вашем личном кабинете может все равно показываться Тестовый тариф. Поэтому вам нужно еще раз переключить тариф на нужный.

Если у вас периодически появляется ошибка при обновлении данных - увеличьте время в блочном сценарии с 30 минут на бОльший период. Например 1 час

Для работы, понадобятся глобальные сценарии №1 и №2, а также блочные сценарии №4 и №5

Необходимо заполнить координаты и API ключ в глобальном сценарии №1 и ID виртуальных датчиков для сценария №5

Переменные

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

  • 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 города, этот сценарий можно удалить.

Для работы, понадобятся глобальные сценарии №1 и №4, а также блочные сценарии №1, №2 и №3

Необходимо однократно выполнить блочный сценарий №1, взять из лога или из сообщения в Телеграм ID города и заполнить поле accuweather_city и API ключ в глобальном сценарии №1, а также ID виртуальных датчиков для сценария №3

Переменные

  • 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 - уровень осадков (мм)

Добавить показания реального датчика к прогнозу

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

На примере OpenWeather это выглядит так:

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 + " м.*",
        "---------------------------------------------",
        "Температура (факт):* " + Hub.getCharacteristicValue(552,15) + " °C*",
        "Температура (прогноз):* " + 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 +"*",
        "=================================",
        ]);
}

Где Hub.getCharacteristicValue(552,15) - это значение характеристики 15 у аксессуара номер 552. Как их узнать у реального датчика температуры, рассказано в этой инструкции.

Присвоение данных прогноза погоды виртуальным датчикам

Для присвоения значений, полученных из Яндекс Погоды датчикам в Sprut.hub - необходимо создать виртуальное устройство и наполнить его следующими датчиками (в скобках указан номер строки в блоке кода ниже, которая относится к этому датчику):

  1. Датчик текущей температуры (строка 3)
  2. Датчик минимальной температуры (строка 4)
  3. Датчик максимальной температуры (строка 5)
  4. Датчик температуры "ощущается" (строка 6)
  5. Датчик влажности (строка 7)
  6. Датчик атмосферного давления (строка 8)
  7. Угол - который используется для отображения скорости ветра (строка 9)

У каждого из этих датчиков есть идентификатор аксессуара и идентификатор нужного вам сервиса. Для датчика температуры - это температура, для датчика влажности это влажность. Необходимо выяснить в соответствии с инструкцией - идентификаторы аксессуара и сервиса для "Температура" у каждого датчика температуры из списка и идентификаторы аксессуаров для датчика влажности, давления и скорости ветра.

В указанном примере, например в строке 3:

590 - это идентификатор аксессуара датчика текущей температуры

13 - это идентификатор сервиса датчика температуры

global.ya_request();
if (global.ya.error && !global.ya.temp) {log.warn("Данных Yandex нет: {}", global.ya.error_code)} else {
Hub.getAccessory(590).getService(13).getCharacteristic(HC.CurrentTemperature).setValue(global.ya.temp)
Hub.getAccessory(590).getService(22).getCharacteristic(HC.CurrentTemperature).setValue(global.ya.temp_min_1)
Hub.getAccessory(590).getService(25).getCharacteristic(HC.CurrentTemperature).setValue(global.ya.temp_max_1)
Hub.getAccessory(590).getService(28).getCharacteristic(HC.CurrentTemperature).setValue(global.ya.feels_like)
Hub.getAccessory(590).getService(HS.HumiditySensor).getCharacteristic(HC.CurrentRelativeHumidity).setValue(global.ya.hum)
Hub.getAccessory(590).getService(HS.C_AtmosphericPressureSensor).getCharacteristic(HC.C_CurrentAtmosphericPressure).setValue(global.ya.pressure)
Hub.getAccessory(590).getService(HS.C_AngleMeter).getCharacteristic(HC.C_Angle).setValue(global.ya.wind)
}

Для остальных сервисов необходимо проделать такие же манипуляции. Все эти блочные сценарии есть в архиве.