Skip to content

Bridge from Yandex Smart Home to MQTT

License

Notifications You must be signed in to change notification settings

petrows/yandex2mqtt

 
 

Repository files navigation

yandex2mqtt (Форк PWS)

Maintenance

Мост из Яндекс УД в MQTT на Node.js.

Приложение позволяет подключать любой умный дом, работающий с шиной MQTT к Яндекс Умный Дом и колонке Алиса.

Важно

  • Обратите внимание что формат конфигурации изменен (в проекте lasthead0/yandex2mqtt, см оригинальный Readme).
  • Файлы базы данных перемещены в под-папку ./data, в Docker папка монтируется как Volume.
  • Файлы настройки устройств и глобальные настройки (такие как ключи, логины и т.п.) - разделены, для того что бы можно было харнить вашу конфигурацию в git, не публикуя секретов.

Отличия данного форка

  • Возможность использовать свою функцию в маппинге значений, это позволяет эмулировать on_off и другие умения, исходя из статуса устройства (отопление "включено", если термостат больше 15°, шторы "открыты", если открытие > 50% и т.п.). Так же позволяет делать любую конвертацию, например K <-> MIRED.
  • Возможность использовать один и тот же топик MQTT несколько раз (например, можно сделать для термостата отдельный property, который уже используется в capabilities, что бы отображать красиво текущую настройку термостата как датчик).
  • Поддержка относительных значений, например команда Алиса, сделай теплее - присылает команду +1, а не 1, как в оригинале.
  • Исправление поддержки управления цветовой температурой (в оригнале сломан из-за неправильного формата ответа).
  • Сделана поддержка параметров командной строки и поддержка встроенной помощи по node app.js --help.
  • Поддержка Docker и настройки приложения для нормальной работы в git и сохранение базы данных между перезапусками.
  • Разделение конфига на общий (который содержит чувствительные данные, такие как логины-пароли и ключи) и устройств, который можно публиковать в git.
  • Добавлена вменяемая отладка приложения при помощи логов и модуля debug.
  • Исправление множества багов.

Требования

  • "Белый" IP адрес и домен. Если нет своего домена и белого IP адреса можно воспользоваться Dynamic DNS сервисами (например, noip.com).
  • SSL сертификат (самоподписанный сертификат не подойдёт). Для получения сертификата можно воспользоваться https://letsencrypt.org.

Отладка приложения

Модули самого приложения, как и подключаемые используют модуль debug, вывод отладочных сообщений может быть включен установкой переменной окружения DEBUG=*.

docker run -e DEBUG='*' -v /tmp/y2m-data:/opt/yandex2mqtt/data ... yandex2mqtt
export DEBUG='*'
node app.js --log debug --cfg ./test/config --devices ./test/devices

Документация

Документация Яндекс

Логирование

Добавлено две "стратегии" логирования: сообщений об ошибках в файл log/error.log (аргумент запуска --log-error) и всех сообщений в консоль (--log-info). Для запуска y2m с логирование необходимо добавить аргумент запуска в команду запуска в файле настройки служба (раздел ниже) или запустить из консоли.

Создание навыка (в Яндекс Диалоги)

Заходим в Яндекс Диалоги => Создать диалог => Умный дом

Основные настройки

Публикация в каталоге

  • Подзаголовок Любой текст
  • Имя разработчика Ваше имя
  • Официальный навык Нет
  • Описание Любой текст
  • Иконка Своя иконка

Связка аккаунтов

  • Авторизация Кнопка "Создать"

Создание связки аккаунтов

Сохраняем навык. Далее можно работать с черновиком (тестировать навык) или опубликовать его (кнопка "Опубликовать").

На вкладке Тестирование (далее кнопка +(плюс)) необходимо Привязать к Яндексу наш мост, используя имя пользователя и пароль из файла конфигурации (блок users). После этого можно получить список устройств.

Известные "особенности поведения" ioBroker (iob)

Не изменяются и не читаются топики MQTT

Если случается такое, что Алиса получает голосовую команду и не сообщает об ошибке, но при этом топик не меняет своего значения или, при изменении стейта (объекта iob) MQTT топик не публикуется (Алиса не получает нового значения, а сообщает старое) необходимо перезапустить адаптер mqtt.

Аналогичная ситуация может возникнуть, если в качестве топика использовать объект iob созданный вручную. В данном случает адаптер mqtt не будет "знать", что данный объект является топиком mqtt. Для исправления этой ошибки необходимо отредактировать объект iob: зайти в редактирование объекта и на вкладке RAW (EXPERTS ONLY) в json в поле native добавить topic. Пример:

"native": {
  "topic": "/yandex/controls/light_BdR_002/state"
}

About

Bridge from Yandex Smart Home to MQTT

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages

  • JavaScript 81.6%
  • CSS 14.7%
  • EJS 3.0%
  • Dockerfile 0.7%