Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/popstas/yandex-dialogs-smarthome-mqtt
Умный дом Яндекса для MQTT устройств (Sonoff Tasmota и т.п.)
https://github.com/popstas/yandex-dialogs-smarthome-mqtt
mqtt-smarthome smarthome yandex-dialogs
Last synced: 8 days ago
JSON representation
Умный дом Яндекса для MQTT устройств (Sonoff Tasmota и т.п.)
- Host: GitHub
- URL: https://github.com/popstas/yandex-dialogs-smarthome-mqtt
- Owner: popstas
- License: mit
- Fork: true (controlll/smart-home-yandex)
- Created: 2019-05-25T19:44:13.000Z (over 5 years ago)
- Default Branch: master
- Last Pushed: 2021-12-05T14:45:17.000Z (almost 3 years ago)
- Last Synced: 2024-08-01T23:31:26.127Z (4 months ago)
- Topics: mqtt-smarthome, smarthome, yandex-dialogs
- Language: JavaScript
- Homepage:
- Size: 126 KB
- Stars: 20
- Watchers: 5
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
- awesome-alice - popstas/yandex-dialogs-smarthome-mqtt - Пример Provider Adapter API для управления MQTT устройствами (Умный дом / Open-source навыки)
README
Цель проекта: подключить устройства Sonoff с прошивкой Tasmota к умному дому Яндекса через приватный навык. Подходит для других устройств с управлением по MQTT.
Более качественная реализация - https://github.com/munrexio/yandex2mqtt (я пользуюсь своей по историческим причинам). Если вам нужно только вкл/выкл, то мой проект настроить проще.
## Особенности
- Устройства добавляются через конфиг
- Простая настройка устройств типа On_off
- Отсутствует полноценная авторизация, проще настроить, но подходит только для приватных навыков
- Возможность настроить устройства любого типа (я проверял только `volume`, но должны работать и другие)
- Статус устройства обновляется в Яндексе при переключении устройства извне (только для on_off, с ограничениями, см. баги)
- В коде части auth и provider разделены по файламПредполагается, что вы умеете:
- Настраивать https перед сервером, например, через nginx и letsencrypt
- Поднимать MQTT брокер
- Научить устройства понимать MQTT команды.## Использование
1. Скопируйте config.exemple.js в config.js, пропишите ваши доступы к MQTT и устройства. Пример объявления устройства:
``` js
{
devices: [
{
name: 'Свет',
room: 'Комната',
type: 'devices.types.light',
mqtt: {
set: 'cmnd/room/light/power'
}
},
]
}
```Для объявления чего-то сложнее лампочки вам придётся [описывать capabilities по документации](https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/capability-types-docpage/):
``` js
{
devices: [
{
name: 'Телевизор',
room: 'Кухня',
type: 'devices.types.media_device',
mqtt: {
set: 'cmnd/kitchen/tv/power',
stat: 'stat/kitchen/tv/power',
volume: {
set: 'cmnd/kitchen/tv/volume',
stat: '',
}
},
capabilities: [
{
type: 'devices.capabilities.on_off',
retrievable: true,
state: {
instance: 'on',
value: false
}
},
{
type: 'devices.capabilities.range',
retrievable: true,
parameters: {
instance: 'volume',
min: 0,
max: 100
},
state: {
instance: 'volume',
value: 25
}
},
]
},
]
}
```В `mqtt` set и stat по умолчанию отвечают за `instance == 'on'`, если надо управлять другим инстансом, то добавляйте объект с его именем.
2. Установите пакеты и запустите, навык поднимется на порту 5554:
```
npm install
npm start
```3. Опубликуйте сервер на общедоступном домене через https, например, https://myhome.ru
4. Создайте связку на https://dialogs.yandex.ru/developer/settings/oauth
4.1. URL авторизации: https://myhome.ru/auth/auth
4.2. URL для получения токена: https://myhome.ru/auth/token
4.3. Название, идентификатор и секрет приложения могут быть любыми, остальные поля оставьте пустыми.5. Создайте навык типа "Умный дом" на https://dialogs.yandex.ru/developer
5.1. Endpoint URL: https://myhome.ru/provider
5.2. Название и иконка будут отображаться в списке провайдеров при подключении устройств.
5.3. Навык должен быть приватным, для публичных провайдеров это не подойдёт.6. Отправьте навык на модерацию и опубликуйте. Модерация и публикация не настоящие, проходят мгновенно и автоматически.
7. Подключите провайдера к своему аккаунту
7.1. В приложении Яндекс зайдите в Устройства - Умный дом - Добавить - Устройство, пролистайте вниз, там должен быть ваш провайдер.
Нажимте "Объединить аккаунты".
7.2. На открывшейся странице нажмите "Подключить умный дом"
7.3. Вас должно вернуть в приложение, нажмите там "Обновить список устройств"После этого у вас всё должно заработать.
## Запуск через Docker
Для постоянного использования я запускаю сервер под Docker, можно сделать это так:1. Скачать docker-compose.yml и config.js (проще склонировать проект).
2. Настроить конфиг под себя (не забудьте, что если MQTT брокер крутился просто на localhost, внутри Docker уже не прокатит localhost).
3. Запустить `docker-compose up -d` в папке с docker-compose.yml
Если всё пройдет нормально, сервер будет автозапускаться, логи можно посмотреть через docker-compose logs или docker logs.
## Известные баги
1. Состояния устройств плохо считываются.
1.1. Если включить свет мимо Алисы, но при этом обновить статус устройства в /v1.0/user/devices, в приложении он не появится.
1.2. Если включить свет через Алису, выключатель в приложении переключится, но после обновления списка устройств перейдет в выключенный режим, хотя /v1.0/user/devices говорит, что он включен.
1.3. Если зайти внутрь устройства, то только тогда его статус в списке обновится до актуального.2. Список устройств плохо обновляется
2.1. Если добавить устройство в конфиг, оно не появится, пока не зайти в добавление устройства и не нажать Обновить список устройств.
2.2. Если удалить устройство, оно не пропадет, пока не зайдёте в него.