Home
Softono

Alice Smart Home

Open source Python
73
Stars
13
Forks
1
Issues
5
Watchers
2 years
Last Commit

 About Alice Smart Home

Simple Python framework to control your DIY smart home devices using Alice from Yandex

Platforms

Web Self-hosted

Languages

Python

Links

Need Help Installing Alice Smart Home?

We provide expert installation service for this software. Our team will install, configure, and secure Alice Smart Home on your server. plans start at just $30.

Alice Smart Home

View on GitHub

alice-smart-home

Простейший фреймвок для управления умным домом с помощью Алисы от Яндекса.

Требования

  • Веб-сервер (достаточно какого-нибудь одноплатного компьютера, например Raspberry Pi)
  • Доменное имя
  • SSL сертификат для работы HTTPS (можно использовать бесплатный от Let's Entrypt)
  • Этот проект основан на Flask, поэтому нужен Python 3.x.x и установленный Flask

Установка

  • Склонируйте репозиторий к себе на сервер
  • Отредактируйте alice.wsgi и введите корректный путь к проекту
  • Разверните проект на веб-сервере с помощью WSGI, не забудьте разрешить заголовки с авторизацией
  • Идём на https://dialogs.yandex.ru/ и нажимаем "Создать навык" -> "Создать диалог" -> "Умный дом"
  • Заполняем название (не принципиально)
  • Заполняем Endpoint URL: https://ваш-домен/
  • Не показывать в каталоге -> ставим галочку
  • Официальный навык -> нет
  • Заполняем остальные поля и загружаем иконку - всё это абсолютно неважно для приватного навыка
  • Нажимаем "Авторизация" -> "оздать"
  • Придумываем, запоминаем и вписываем идентификатор приложения и секрет
  • URL авторизации: https://ваш-домен/auth/
  • URL для получения токена: https://ваш-домен/token/
  • "Сохранить"->"Cохранить"->"На модерацию" - модерация должна пройти мгновенно в случае приватного навыка
  • "Опубликовать"
  • Отредактируйте config.py и введите CLIENT_ID и CLIENT_SECRET, которые вы указали, также укажите USERS_DIRECTORY, TOKENS_DIRECTORY, and DEVICES_DIRECTORY - пути к директориям users, tokens and devices
  • Рекомендуется сделать chmod go-rwx tokens users

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

  • Создайте файл имя-пользователя.json в директории users и напишите JSON, в котором должны быть пароль пользователя и доступные ему устройства, например:
{
    "password": "test",
    "devices": [
        "pc"
    ]
}

Например:

{
    "name": "Компьютер",
    "description": "Основной компьютер",
    "room": "Моя комната",
    "type": "devices.types.switch",
    "capabilities": [
        {
            "type": "devices.capabilities.on_off",
            "retrievable": true
        }
    ],
    "device_info": {
        "manufacturer": "Cluster",
        "model": "0",
        "hw_version": "1.0",
        "sw_version": "1.0"
    }
}
  • Создайте файл имя-устройства.py в директории devices и напишите Python скрипт с двумя методами: *query(capability_type, instance) и *command(capability_type, instance, value, relative)

Пример скрипта для включения/выключения компьютера:

import subprocess

def pc_query(capability_type, instance):
    if capability_type == "devices.capabilities.on_off":
        p = subprocess.run(["ping", "-c", "1", "192.168.0.2"], stdout=subprocess.PIPE)
        state = p.returncode == 0
        # Возвращаем состояние и опционально instance 
        return state, "on"

def pc_action(capability_type, instance, value, relative):
    if capability_type == "devices.capabilities.on_off":
        if value:
            subprocess.run(["wakeonlan", "-i", "192.168.0.255", "00:11:22:33:44:55"])
        else:
            subprocess.run(["sh", "-c", "echo shutdown -h | ssh [email protected]"])
        return "DONE"

Первая функция должна возвращать текущее состояние устройства и опционально instance (если он не указан ни в запросе, ни в описании устройства), а вторая используется для управления им. В параметрах capability_type и instance передаётся, чем мы управляем, а в параметрах value и relative само значение. Подробности опять же смотрите в документации Яндекса.

  • Откройте вкладку "Тестирование" в панели управления Яндекс диалогами и попробуйте связать аккаунты, используя ваши имя пользователя и пароль
  • Проверяйте, должно работать как в панели для тестирования, так и на всех устройствах привязанных к вашему аккаунту