Подключаемcя к умному дому СБЕР по MQTT через Node-RED | HelpMeChip
Электроника в помощь!

Подключаемcя к умному дому СБЕР по MQTT через Node-RED

October 3, 2025, 19 минуты

Я уже писал в предыдущей статье, как можно подключить свои устройства через протокол MQTT. С тех пор произошли некоторые изменения. Сначала, в августе 2024, СБЕР решил убрать DIYщиков от своего детища, запретили новые интеграции, и я плюнул на них. Но в конце декабря, снова вернули данный пункт в документацию. Ну что же, давайте снова попытаемся подключиться к их MQTT серверу, на этот раз без всяких программ агентов, напрямую из Node-RED.

Обновление: 16 января 2026 СБЕР опять убрал DIY со своего сайта. Интеграция всё ещё возможна, но некоторые ссылки на документацию не работают.

Программа агент, которую выпустили в СБЕР, хорошо подходит, если у вас в качестве сервера УД стоит WirenBoard.  Агента нельзя поставить, на что-то отличное от АРМ архитектуры, да и в моём случае, он был как пятое колесо в телеге.

Проще будет взаимодействовать с MQTT сервером СБЕРа напрямую. У меня в качестве сервера УД стоит старенький Intel NUC с Debian на борту. Я не использую никакой специальный софт, вроде Home Assistan, мне достаточно простого Node-RED, который я настраиваю под свои нужды. Он будет Хабом, для моих устройств и мостом в УД СБЕРа.

Приступим. Я подразумеваю, что у вас уже есть какой либо сервер. Это может быть обычный одноплатный компьютер, вроде Raspberry Pi, неттоп или мини ПК, как у меня, или же просто ваш стационарный компьютер. Главное, чтобы на нём был установлен Node-RED. Я так-же, надеюсь, что вы знаете, что это такое и умеете этим пользоваться. Если нет, то процесс установки множество раз описан в интернет, повторяться не буду, на сайте разработчика всё доходчиво. 

Затем, регистрируемся в Studio, получаем данные для подключения к MQTT серверу СБЕРа. Это я описывал в предыдущей статье, также выкатили нормальную документацию на сайте разработчика вот здесь.

Запускаем Node-RED из браузера http://ip_сервера:1880

Добавляем ноды MQTT IN в трёх экземплярах. Поля настройки нод заполните следующим образом:

Создайте новый Cервер, укажите путь. Во вкладке Безопасность внесите свой Логин и Пароль, полученный в личном кабинете Studio.
В поле Тема укажите следующее:
Где замените ваш_логин на свой. В двух других нодах на приём в полях Тема укажите следующее:
  1. sberdevices/v1/ваш_логин/down/commands - передача команд на устройства
  2. sberdevices/v1/ваш_логин/down/config_request - запрос конфигурации устройств

а также создайте две ноды отправки (MQTT OUT) данных на сервер СБЕРа, со следующими полями Тема:

  1. sberdevices/v1/ваш_логин/up/status - отправка текущего состояния устройств
  2. sberdevices/v1/ваш_логин/up/config - отправка данных о устройствах

между ними позже добавим функции, которые формируют информацию об устройствах и обрабатывают полученные команды. А пока, я советую добавить ещё одну ноду MQTT IN со следующей темой - sberdevices/v1/ваш_логин/# и соединить её с нодой DEBUG, чтобы видеть все сообщения. Очень может помочь для отлова ошибок.

Сделайте Deploy в Node-RED и, в идеале, вы должны увидеть "подключен" под нодами MQTT:

Если вы видите такое:

То ещё раз проверьте, что правильно указали логин, пароль и адрес сервера. Если всё правильно, и никак не зеленеет, то не спешите расстраиваться - у меня бывало, что несколько часов не активировались вновь созданные пользователи, попробуйте подождать. Или сгенерируйте новые данные для подключения.

Теперь создаём модели устройств в Studio на сайте СБЕРа. Подробнее читайте на их сайте.
Заходим в Studio и создаём две модели для теста:
ТЕРМОДАТЧИК:
РЕЛЕ:

Настало время создать наши устройства в Node-RED. Берём ноду Function и пишем следующий код:

Тут мы описали два наших устройства, которые будут отправлены в СБЕР. В model_id указываем имена, которые мы указали в Studio при создании моделей.

Создадим ещё одну ноду Function со следующим кодом:

const socketState = flow.get("socket") || false; // Берём состояние розетки
let myMessage = {
    "devices": {
        "mb_t": {
            "states": [
                {
                    "key": "online",
                    "value": {
                        "type": "BOOL",
                        "bool_value": true
                    }
                },
                {
                    "key": "temperature",
                    "value":
                        {
                            "type": "INTEGER",
                            "integer_value": msg.payload
                        }
                }
            ]
        },
        "my_relay": {
            "states": [
                {
                    "key": "online",
                    "value": {
                        "type": "BOOL",
                        "bool_value": true
                    }
                },
                {
                    "key": "on_off",
                    "value":
                        {
                            "type": "BOOL",
                            "bool_value": Boolean(socketState)
                        }
                }
            ]
        }
    }
}

msg.payload = myMessage;
return msg;

Здесь мы сформировали ответ на сервер СБЕРа с температурой нашего сервера и состоянием розетки.

Осталась последняя нода Function для обработки команд от СБЕРа.

const val = msg.payload;
let socketStatus = flow.get("socket") || false;
let response = {};

if ('devices' in val) {
    switch (val.devices.my_relay.states[0].key) {
        case 'on_off' :
            if ('bool_value' in val.devices.my_relay.states[0].value && val.devices.my_relay.states[0].value.bool_value == true)
{
                socketStatus = 1;
            } else {
                socketStatus = 0;
            }
    }
}

flow.set("socket", socketStatus);
response.payload = socketStatus;
return [msg, response];

Тут обрабатываем команду от сервера СБЕРа, приходит информация о включении и выключении розетки.

Загрузите мой пример для Node-RED, заполните данные сервера и приступайте к испытаниям. Перейдите на страничку https://activation.sber.ru/ или установите приложение Салют на мобильное устройство. 

Нажимаете +, Добавить устройства -> Других производителей ->Имя вашего HUB

После всех манипуляций вы увидите следующее:

Термодатчик должен отображать текущую температуру компьютера (если у вас Linux подобная система) и блок Розетка, при нажатии на которую будет меняться его состояние с ВКЛ на ВЫКЛ, и вы увидете соответствующее сообщение в DEBUG блоке Node-RED

Вы можете создавать свои устройства, описывая их, согласно требованиям Умного Дома СБЕР и подключить их к серверу. Далее, при помощи Node-RED подключать свои устройства через MQTT или другим, удобным вам способам и управлять голосом через устройство от СБЕРа. 

На данный момент, это несколько проще и дешевле Алисы. Надеюсь было полезно. Если есть вопросы, заходите в Телеграмм - https://t.me/helpmechip

Social Media
Github
Telegram
Powered by BS5 Simply Blog and Bludit
Отличный хостинг от TimeWEB
Navigation