Открыть меню
Переключить меню настроек
Открыть персональное меню
Вы не представились системе
Ваш IP-адрес будет виден всем, если вы внесёте какие-либо изменения.

Яндекс.Погода интеграция через MQTT

Материал из Лаборатория Девелики
Это утверждённая версия страницы. Она же — наиболее свежая версия.

Файл:Eva 205e9786 thumbnail.jpg Файл:Eva a67ef2b2 thumbnail.jpg

Интеграция сервиса «Яндекс.Погода» через MQTT из одного контроллера SH в другой.

Подробнее про интеграцию устройств через MQTT из одного контроллера SH в другой описано в инструкции.

Теперь подробнее о конкретных особенностях, связанных с Яндекс.Погодой.

Рассматривается ситуация, когда несколько контроллеров расположены рядом территориально (например, соседние дома) и не имеют раздельных аккаунтов Яндекс. Чтобы не сокращать и без того не очень большое количество доступных запросов, разделяя их пополам на 2 дома рационально использовать одни координаты для API яндекса и продублировать показания во второй дом.

Для этого нам нужно будет настроить MQTT связь между контроллерами согласно инструкции. Соответственно у нас будет создан отдельный MQTT-контроллер для погоды.

Затем нам нужен шаблон для устройства, куда будут выгружаться нужные нам погодные параметры.

Шаблон

Шаблон кодом

{ "manufacturer": "DVLK", "date": "25.06.2026", "model": "YANDEX_WEATHER", "modelId": "Sprut.hub-72F0DD49059573A5_1/accessories/272/1/7", "services": [ { "name": "Температура", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/13/15" } ] } ] }, { "name": "Ощущается", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/16/18" } ] } ] }, { "name": "Влажность", "type": "HumiditySensor", "characteristics": [ { "type": "CurrentRelativeHumidity", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/19/21" } ] } ] }, { "name": "Состояние", "type": "C_Option", "characteristics": [ { "type": "C_String", "link": [ { "type": "String", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/22/24" } ] } ] }, { "name": "Направление ветра", "type": "C_Option", "characteristics": [ { "type": "C_String", "link": [ { "type": "String", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/25/26" } ] } ] }, { "name": "Ультрафиолет", "type": "C_UltravioletSensor", "characteristics": [ { "type": "C_CurrentUltraviolet", "link": [ { "type": "Integer", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/28/30" } ] } ] }, { "name": "Макс Температура", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/31/33" } ] } ] }, { "name": "Мин Температура", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/34/36" } ] } ] }, { "name": "Скорость ветра", "type": "C_AngleMeter", "characteristics": [ { "type": "C_Angle", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/37/39" } ] } ] }, { "name": "Порывы", "type": "C_AngleMeter", "characteristics": [ { "type": "C_Angle", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/40/42" } ] } ] }, { "name": "Луна", "type": "C_Option", "characteristics": [ { "type": "C_String", "link": [ { "type": "String", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/43/45" } ] } ] } ] }
{ "manufacturer": "DVLK", "date": "25.06.2026", "model": "YANDEX_WEATHER", "modelId": "Sprut.hub-72F0DD49059573A5_1/accessories/272/1/7", "services": [ { "name": "Температура", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/13/15" } ] } ] }, { "name": "Ощущается", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/16/18" } ] } ] }, { "name": "Влажность", "type": "HumiditySensor", "characteristics": [ { "type": "CurrentRelativeHumidity", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/19/21" } ] } ] }, { "name": "Состояние", "type": "C_Option", "characteristics": [ { "type": "C_String", "link": [ { "type": "String", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/22/24" } ] } ] }, { "name": "Направление ветра", "type": "C_Option", "characteristics": [ { "type": "C_String", "link": [ { "type": "String", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/25/26" } ] } ] }, { "name": "Ультрафиолет", "type": "C_UltravioletSensor", "characteristics": [ { "type": "C_CurrentUltraviolet", "link": [ { "type": "Integer", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/28/30" } ] } ] }, { "name": "Макс Температура", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/31/33" } ] } ] }, { "name": "Мин Температура", "type": "TemperatureSensor", "characteristics": [ { "type": "CurrentTemperature", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/34/36" } ] } ] }, { "name": "Скорость ветра", "type": "C_AngleMeter", "characteristics": [ { "type": "C_Angle", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/37/39" } ] } ] }, { "name": "Порывы", "type": "C_AngleMeter", "characteristics": [ { "type": "C_Angle", "link": [ { "type": "Double", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/40/42" } ] } ] }, { "name": "Луна", "type": "C_Option", "characteristics": [ { "type": "C_String", "link": [ { "type": "String", "topicGet": "Sprut.hub-72F0DD49059573A5_1/accessories/272/43/45" } ] } ] } ] }

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

Сценарий

const acc = Hub.getAccessory(1048); // заменить 272 на ID MQTT-устройства на втором хабе

function syncNameFromString(serviceId) { const service = acc.getService(serviceId);

const value = service.getCharacteristic(HC.C_String).getValue();

if (value !== null && value !== undefined && String(value).trim() !== "") { service.getCharacteristic(HC.Name).setValue(String(value).trim()); log.info("Имя сервиса {} обновлено: {}", serviceId, value); } else { log.warn("У сервиса {} пустое значение C_String", serviceId); } }

syncNameFromString(22); // Состояние syncNameFromString(25); // Направление ветра syncNameFromString(43); // Луна

После добавления шаблона и сценария (сценарий не активировать), нужно запустить поиск на MQTT, контроллере. Должно появится устройство – мультисенсор со всеми характеристиками. Нужно будет узнать ID этого устройства (в примере на скриншоте 1048) :

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