{"id":21917494,"url":"https://github.com/clusterm/alice-smart-home","last_synced_at":"2025-04-19T09:48:12.117Z","repository":{"id":69562441,"uuid":"266359461","full_name":"ClusterM/alice-smart-home","owner":"ClusterM","description":"Simple Python framework to control your DIY smart home devices using Alice from Yandex","archived":false,"fork":false,"pushed_at":"2024-02-20T18:48:55.000Z","size":45,"stargazers_count":65,"open_issues_count":1,"forks_count":12,"subscribers_count":6,"default_branch":"master","last_synced_at":"2025-04-16T02:06:10.810Z","etag":null,"topics":["home-automation","smarthome","yandex"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ClusterM.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":".github/FUNDING.yml","license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null},"funding":{"github":["ClusterM"],"custom":["https://www.buymeacoffee.com/cluster","https://boosty.to/cluster"]}},"created_at":"2020-05-23T15:01:29.000Z","updated_at":"2025-03-11T07:57:58.000Z","dependencies_parsed_at":"2024-02-20T19:51:13.600Z","dependency_job_id":"4dfd0de9-c538-4b5f-9dc2-8dbf72e50c89","html_url":"https://github.com/ClusterM/alice-smart-home","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClusterM%2Falice-smart-home","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClusterM%2Falice-smart-home/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClusterM%2Falice-smart-home/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ClusterM%2Falice-smart-home/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ClusterM","download_url":"https://codeload.github.com/ClusterM/alice-smart-home/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249666987,"owners_count":21308160,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["home-automation","smarthome","yandex"],"created_at":"2024-11-28T19:33:12.754Z","updated_at":"2025-04-19T09:48:12.096Z","avatar_url":"https://github.com/ClusterM.png","language":"Python","funding_links":["https://github.com/sponsors/ClusterM","https://www.buymeacoffee.com/cluster","https://boosty.to/cluster"],"categories":[],"sub_categories":[],"readme":"# alice-smart-home\nПростейший фреймвок для управления умным домом с помощью Алисы от Яндекса.\n\n## Требования\n* Веб-сервер (достаточно какого-нибудь одноплатного компьютера, например Raspberry Pi)\n* Доменное имя\n* SSL сертификат для работы HTTPS (можно использовать бесплатный от Let's Entrypt)\n* Этот проект основан на Flask, поэтому нужен Python 3.x.x и установленный Flask\n\n## Установка\n* Склонируйте репозиторий к себе на сервер\n* Отредактируйте __alice.wsgi__ и введите корректный путь к проекту\n* Разверните проект на веб-сервере с помощью WSGI, не забудьте разрешить заголовки с авторизацией\n* Идём на https://dialogs.yandex.ru/ и нажимаем \"Создать навык\" -\u003e \"Создать диалог\" -\u003e \"Умный дом\"\n* Заполняем название (не принципиально)\n* Заполняем Endpoint URL: https://_ваш-домен_/\n* Не показывать в каталоге -\u003e ставим галочку\n* Официальный навык -\u003e нет\n* Заполняем остальные поля и загружаем иконку - всё это абсолютно неважно для приватного навыка\n* Нажимаем \"Авторизация\" -\u003e \"оздать\"\n* Придумываем, запоминаем и вписываем идентификатор приложения и секрет\n* URL авторизации: https://_ваш-домен_/auth/\n* URL для получения токена: https://_ваш-домен_/token/\n* \"Сохранить\"-\u003e\"Cохранить\"-\u003e\"На модерацию\" - модерация должна пройти мгновенно в случае приватного навыка\n* \"Опубликовать\"\n* Отредактируйте __config.py__ и введите __CLIENT_ID__ и __CLIENT_SECRET__, которые вы указали, также укажите __USERS_DIRECTORY__, __TOKENS_DIRECTORY__, and __DEVICES_DIRECTORY__ - пути к директориям __users__, __tokens__ and __devices__\n* Рекомендуется сделать __chmod go-rwx tokens users__\n\n## Как использовать\n* Создайте файл _имя-пользователя_.json в директории __users__ и напишите JSON, в котором должны быть пароль пользователя и доступные ему устройства, например:\n```json\n{\n    \"password\": \"test\",\n    \"devices\": [\n        \"pc\"\n    ]\n}\n```\n\n* Создайте файл _имя-устройства_.json в директории __devices__ и напишите JSON с описанием устройства в соответствии с документацией Яндекса: https://yandex.ru/dev/dialogs/alice/doc/smart-home/concepts/device-types-docpage/\n\nНапример:\n```json\n{\n    \"name\": \"Компьютер\",\n    \"description\": \"Основной компьютер\",\n    \"room\": \"Моя комната\",\n    \"type\": \"devices.types.switch\",\n    \"capabilities\": [\n        {\n            \"type\": \"devices.capabilities.on_off\",\n            \"retrievable\": true\n        }\n    ],\n    \"device_info\": {\n        \"manufacturer\": \"Cluster\",\n        \"model\": \"0\",\n        \"hw_version\": \"1.0\",\n        \"sw_version\": \"1.0\"\n    }\n}\n```\n* Создайте файл _имя-устройства_.py в директории __devices__ и напишите Python скрипт с двумя методами: *query(capability_type, instance) и *command(capability_type, instance, value, relative)\n\nПример скрипта для включения/выключения компьютера:\n```python\nimport subprocess\n\ndef pc_query(capability_type, instance):\n    if capability_type == \"devices.capabilities.on_off\":\n        p = subprocess.run([\"ping\", \"-c\", \"1\", \"192.168.0.2\"], stdout=subprocess.PIPE)\n        state = p.returncode == 0\n        # Возвращаем состояние и опционально instance \n        return state, \"on\"\n\ndef pc_action(capability_type, instance, value, relative):\n    if capability_type == \"devices.capabilities.on_off\":\n        if value:\n            subprocess.run([\"wakeonlan\", \"-i\", \"192.168.0.255\", \"00:11:22:33:44:55\"])\n        else:\n            subprocess.run([\"sh\", \"-c\", \"echo shutdown -h | ssh clust@192.168.0.2\"])\n        return \"DONE\"\n```\nПервая функция должна возвращать текущее состояние устройства и опционально __instance__ (если он не указан ни в запросе, ни в описании устройства), а вторая используется для управления им. В параметрах __capability_type__ и __instance__ передаётся, чем мы управляем, а в параметрах __value__ и __relative__ само значение. Подробности опять же смотрите в документации Яндекса.\n\n* Откройте вкладку \"Тестирование\" в панели управления Яндекс диалогами и попробуйте связать аккаунты, используя ваши имя пользователя и пароль\n* Проверяйте, должно работать как в панели для тестирования, так и на всех устройствах привязанных к вашему аккаунту\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclusterm%2Falice-smart-home","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fclusterm%2Falice-smart-home","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fclusterm%2Falice-smart-home/lists"}