Skip to content

Repository files navigation

yandex-light-control

Мини-инструменты для управления умными лампами Яндекса (Умный дом / Yandex Smart Home) с компьютера — из консоли или по глобальному сочетанию клавиш в Windows, без официального OAuth-приложения.

Работает через неофициальную библиотеку yandex_quasar, которая логинится по куки браузера вместо регистрации отдельного приложения на платформе умного дома Яндекса.

⚠️ Это неофициальное решение, использующее приватный протокол Квазара (iot.quasar.yandex.ru). Яндекс может изменить его в любой момент без предупреждения — тогда скрипты придётся чинить заново.

Возможности

  • Посмотреть список всех устройств умного дома и их ID
  • Включить / выключить / переключить (toggle) конкретную лампу по имени или ID
  • Управлять сразу несколькими устройствами за один запуск, параллельно
  • Фоновый демон (daemon.py), который логинится один раз и держит локальный HTTP-сервер — хоткеи стучатся в него вместо повторного запуска Python на каждое нажатие (это резко снижает задержку)
  • Готовые AutoHotkey-скрипты для глобальных хоткеев в Windows

Требования

  • Python 3.10+
  • Windows (для хоткеев; сам Python-скрипт кроссплатформенный)
  • AutoHotkey v2 — только для глобальных хоткеев
  • Аккаунт Яндекса с подключёнными устройствами умного дома

Установка

python -m venv .venv
.venv\Scripts\activate
pip install yandex_quasar

Получение куки авторизации

Библиотека логинится через куки браузера вместо OAuth. Passport Яндекса теперь называется Yandex ID, но домен для куки в коде библиотеки остался старый — это учтено ниже автоматической правкой в скриптах.

  1. Установи в браузер расширение Cookie-Editor (или аналог, экспортирующий куки в JSON с полем domain).
  2. Открой https://passport.yandex.ru (он редиректит на id.yandex.ru) и залогинься.
  3. Открой Cookie-Editor на этой вкладке → ExportExport as JSON.
  4. Создай в корне проекта файл my_cookies.txt и вставь туда экспортированный JSON.

my_cookies.txt содержит рабочие сессионные куки — по сути ключи от твоего аккаунта. Никогда не коммить этот файл и не публикуй его содержимое. В репозитории он уже добавлен в .gitignore.

Если куки скопированы верно, но при запуске всё равно ошибка InvalidCookiesError / StopIteration — скрипты автоматически подставляют недостающий домен passport.yandex.ru в память при каждом запуске (сам файл не трогают), так что обычно достаточно просто переэкспортировать куки заново при истечении сессии.

Файлы

Файл Назначение
toggle_light.py Основной консольный скрипт: list, on, off, toggle
check_cookies.py Диагностика файла my_cookies.txt — покажет, какие домены куки в нём есть
daemon.py Фоновый процесс: логинится один раз, слушает http://127.0.0.1:8765/{on,off,toggle}
run_daemon_min.bat Запуск демона в свёрнутом окне консоли
hotkeys_daemon.ahk AutoHotkey-хоткеи, дёргающие уже запущенный демон (рекомендуется)
hotkeys_fast.ahk AutoHotkey-хоткеи без демона — запускают toggle_light.py напрямую на каждое нажатие
run_toggle.bat Обёртка для запуска toggle_light.py с логированием в файл (используется hotkeys_fast.ahk)

Использование из консоли

python toggle_light.py list
python toggle_light.py on "Лампочка"
python toggle_light.py off "Лампочка"
python toggle_light.py toggle "Лампочка"

# сразу несколько устройств по ID, параллельно, за один запуск
python toggle_light.py toggle "id1" "id2"

Если несколько устройств совпадают по имени, скрипт попросит уточнить — используй точный ID из list.

Хоткеи (рекомендуемый способ — через демон)

Постоянный запуск Python на каждое нажатие клавиш даёт заметную задержку (старт интерпретатора + повторный логин в Яндексе). Демон решает это: логинится один раз и держит открытое соединение, а хоткей просто делает лёгкий HTTP-запрос на localhost.

  1. Пропиши свои ID устройств в MAIN_LIGHT_IDS внутри daemon.py.
  2. Запусти run_daemon_min.bat (можно добавить в автозагрузку: Win+Rshell:startup).
  3. Пропиши те же пути в hotkeys_daemon.ahk, запусти его.
  4. Хоткеи по умолчанию: Ctrl+Alt+L — toggle, Ctrl+Alt+O — включить, Ctrl+Alt+P — выключить.

Известные ограничения

  • Куки истекают — периодически придётся переэкспортировать my_cookies.txt.
  • Неофициальный протокол может сломаться после обновлений на стороне Яндекса.
  • Даже при мгновенной отправке команды остаётся сетевая задержка до серверов Яндекса и время реакции самой лампы (Wi-Fi) — это уже не лечится на стороне клиента.

Лицензия

MIT (или укажи свою).

About

Console + hotkey control for Yandex Smart Home lights, no OAuth app required.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages