# RT Key Integration for Home Assistant [](https://www.home-assistant.io/) [](https://opensource.org/licenses/MIT) Интеграция для работы с камерами и домофонами **Ростелеком Key** в Home Assistant. ## 📋 Возможности ### 📹 Камеры - **Live-стрим** с камер в реальном времени - **Периодические скриншоты** с настраиваемым интервалом - **Автоматическое обновление токенов** при ошибках доступа - **Отслеживание доступности** камер (online/offline) ### 🏢 Домофоны - **Удалённое открытие** двери через кнопку - **Отслеживание событий**: - Открытие по ключу (с определением владельца ключа) - Открытие через приложение - Открытие по коду/DTMF - **Скриншоты событий** — фото на момент события - **Архивное видео** — запись с камеры на момент события ### ️ Настройки - Гибкая настройка через UI - Выбор качества скриншотов - Настраиваемый уровень логирования - Интервал обновления скриншотов (0 = отключено) ## 📦 Установка ### Вариант 1: Через HACS (рекомендуется) 1. Откройте **HACS** в Home Assistant 2. Перейдите в раздел **Интеграции** 3. Нажмите **⋮** (три точки) → **Пользовательские репозитории** 4. Добавьте URL вашего репозитория 5. Установите интеграцию **RT Key** 6. Перезапустите Home Assistant ### Вариант 2: Вручную 1. Скопируйте папку `rtkey` в директорию `/config/custom_components/` 2. Перезапустите Home Assistant 3. Перейдите в **Настройки** → **Устройства и службы** 4. Нажмите **Добавить интеграцию** 5. Найдите **RT Key** ## 🔑 Получение токена доступа Для работы интеграции необходим токен доступа к API Ростелеком Key. ### Пошаговая инструкция: 1. **Авторизуйтесь** на портале Ростелеком Key: [https://key.rt.ru/main/pwa/dashboard](https://key.rt.ru/main/pwa/dashboard) 2. **Откройте инструменты разработчика**: - Нажмите `F12` (или `Ctrl+Shift+I` / `Cmd+Option+I` на Mac) - Перейдите на вкладку **Network** (Сеть) 3. **Отфильтруйте запросы**: В поле фильтра введите: - `household.key.rt.ru` - или `keyapis.key.rt.ru` 4. **Обновите страницу** (`F5`) — появятся запросы к API 5. **Выберите любой запрос** из списка (например, `intercom` или `camera_video_data/list`) 6. **Скопируйте токен**: - Перейдите во вкладку **Headers** (Заголовки) - Найдите заголовок `Authorization` - Скопируйте значение **после слова `Bearer`** (без пробела) Пример: ``` Authorization: Bearer eyJhbGciOiJSUzI1NiIsImtpZCI6... ↑ скопируйте отсюда ``` 7. **Вставьте токен** при настройке интеграции в Home Assistant > ⚠️ **Важно**: Токен чувствителен к регистру! Копируйте полностью, без пробелов и переносов строк. ## ⚙️ Настройка интеграции После добавления интеграции откройте её настройки: ### Основные параметры | Параметр | Описание | По умолчанию | |----------|----------|--------------| | **Название** | Уникальное имя интеграции | RT Key | | **Токен** | Токен доступа (см. выше) | — | | **Интервал скриншотов** | Частота обновления (сек), 0 = отключено | 60 сек | | **Качество скриншотов** | Маленькое / Среднее / Большое / Точное | Среднее | | **Уровень логов** | DEBUG / INFO / WARNING / ERROR | INFO | ### Настройки событий | Параметр | Описание | По умолчанию | |----------|----------|--------------| | **Отслеживание событий** | Включить мониторинг событий | ✅ Вкл | | **Интервал опроса** | Частота проверки событий | 15 сек | | **Задержка времени камеры** | Лаг синхронизации (сек) | 25 сек | | **Секунд до события** | Показывать видео до события | 10 сек | | **Скриншот события** | Создавать сущность скриншота | ✅ Вкл | | **Архив события** | Создавать камеру архива | ✅ Вкл | | **Сенсор события** | Создавать сенсор последнего события | ✅ Вкл | ## Сущности После настройки интеграция создаст следующие сущности: ### Для каждой камеры | Сущность | Тип | Описание | |----------|-----|----------| | `{name}` | Camera | Live-стрим с камеры | | `Скриншот {name}` | Image | Периодический скриншот | ### Для каждого домофона | Сущность | Тип | Описание | |----------|-----|----------| | `Открыть {name}` | Button | Кнопка открытия двери | | `Последнее событие {name}` | Sensor | Информация о последнем событии | | `Скриншот события {name}` | Image | Скриншот на момент события (диагностика) | | `Архив события {name}` | Camera | Архивное видео события (диагностика) | > 💡 **Совет**: Сущности из раздела "Диагностика" можно переместить на основную панель через настройки устройства. ## 🎯 Использование ### Просмотр камер 1. Откройте **Панель управления** → **Обзор** 2. Добавьте карточку **Camera** или **Picture Entity** 3. Выберите нужную камеру ### Открытие домофона 1. Найдите сущность `button.{name}_open` 2. Нажмите на кнопку в интерфейсе 3. Или используйте в автоматизациях: ```yaml service: button.press target: entity_id: button.my_intercom_open ``` ### Автоматизации Примеры использования в автоматизациях: #### Уведомление при открытии двери ключом ```yaml automation: - alias: "Уведомление об открытии двери" trigger: platform: state entity_id: sensor.my_intercom_last_event condition: condition: template value_template: "{{ 'Ключ' in trigger.to_state.state }}" action: - service: notify.mobile_app data: message: "Дверь открыл: {{ trigger.to_state.state }}" title: "🚪 Домофон" ``` #### Включение света при открытии двери вечером ```yaml automation: - alias: "Свет при открытии двери" trigger: platform: state entity_id: sensor.my_intercom_last_event condition: - condition: sun after: sunset - condition: template value_template: "{{ 'Ключ' in trigger.to_state.state }}" action: - service: light.turn_on target: entity_id: light.hallway ``` #### Отправка скриншота события в Telegram ```yaml automation: - alias: "Скриншот события в Telegram" trigger: platform: state entity_id: sensor.my_intercom_last_event action: - service: telegram_bot.send_photo data: url: >- {{ state_attr('image.my_intercom_event_screenshot', 'entity_picture') }} caption: "Событие: {{ trigger.to_state.state }}" ``` ## 🔧 Диагностика ### Проверка доступности камер Если камера отображается как **недоступна** (серая в интерфейсе): 1. **Проверьте атрибуты сущности**: ```yaml Статус: Нет связи ``` 2. **Посмотрите логи Home Assistant**: ``` Камера "Название камеры" (xxx-xxx-xxx) недоступна (404), помечаем как offline ``` 3. **Камера автоматически восстановится** при появлении связи: ``` ✅ Камера "Название камеры" (xxx-xxx-xxx) снова доступна ``` ### Обновление токенов При получении ошибки **403 Forbidden** интеграция автоматически: 1. Обнаруживает протухший токен 2. Запрашивает новые токены из API 3. Повторяет неудачный запрос **Пример в логах:** ``` ⚠️ Токен для Камера 1 (xxx-xxx) протух (403), запускаем обновление... Принудительное обновление токенов... ✅ Токены обновлены для N устройств ``` ### Уровень логирования Измените уровень в настройках интеграции для более детальной отладки: | Уровень | Когда использовать | |---------|-------------------| | **DEBUG** | При проблемах с интеграцией — подробная информация о всех запросах | | **INFO** | Повседневное использование (рекомендуется) | | **WARNING** | Только предупреждения и ошибки | | **ERROR** | Только критические ошибки | ### Просмотр событий в реальном времени Для отладки отслеживания событий установите уровень **DEBUG** и ищите в логах: ``` Запущен цикл опроса событий (интервал 15.0с) ✅ Загружено N домофонов: ['intercom_id_1', 'intercom_id_2'] 🔔 Новое событие для домофона intercom_id_1: Ключ {имя} в 2026-01-01 12:00:00 ✅ Скриншот события получен xxxxxxxx-... (NNNNN байт) ``` ## 🐛 Решение проблем ### ❌ Интеграция не добавляется **Симптом**: Ошибка "Invalid token" или "Authentication failed" **Решение**: 1. ✅ Убедитесь, что токен скопирован **полностью** (начинается с `eyJ...`) 2. ✅ Проверьте, что в токене **нет пробелов и переносов строк** 3. ✅ Убедитесь, что вы скопировали токен **без слова `Bearer`** 4. ✅ Попробуйте получить новый токен (старый мог истечь) ### ❌ Камеры не показывают видео **Симптом**: Чёрный экран или ошибка загрузки **Решение**: 1. Проверьте статус камеры в атрибутах (`❌ Нет связи`) 2. Убедитесь, что камера работает в **приложении Ростелеком Key** 3. Перезагрузите интеграцию 4. Проверьте логи на наличие ошибок `403` или `404` ### ❌ Скриншоты не обновляются **Симптом**: Изображение не меняется в карточке **Решение**: 1. Проверьте **интервал обновления** в настройках (не установлен ли `0`) 2. Увеличьте интервал (минимум 30 сек) 3. Проверьте логи на наличие ошибок ### ❌ События не отслеживаются **Симптом**: Сенсор событий показывает "Нет событий" **Решение**: 1. Убедитесь, что в настройках включено **"Отслеживание событий"** 2. Проверьте **интервал опроса** (рекомендуется 15 сек) 3. Посмотрите логи — должны быть сообщения `🔔 Новое событие для домофона...` 4. Проверьте, что домофон в списке: `✅ Загружено N домофонов: [...]` ### ❌ Неправильное время событий **Симптом**: Время события не совпадает с реальным **Решение**: 1. Убедитесь, что в Home Assistant правильно настроен **часовой пояс** (**Настройки** → **Система** → **Общее** → **Часовой пояс**) 2. Проверьте параметр **"Задержка времени камеры"** в настройках (по умолчанию 25 сек — может отличаться для разных камер) ## 📊 Структура проекта ``` custom_components/rtkey/ ├── __init__.py # Основной модуль, API клиент ├── button.py # Кнопки открытия домофона ├── camera.py # Live-камеры и архив событий ── config_flow.py # Настройка через UI ├── image.py # Скриншоты камер и событий ├── sensor.py # Сенсоры событий ├── manifest.json # Метаданные интеграции ├── translations/ │ ├── en.json # Английские переводы │ └── ru.json # Русские переводы └── README.md # Документация ``` ### Ключевые API endpoints | Endpoint | Назначение | |----------|-----------| | `keyapis.key.rt.ru/vc/api/v1/camera_video_data/list` | Список всех камер и домофонов | | `household.key.rt.ru/api/v2/app/devices/intercom` | Информация о домофонах | | `household.key.rt.ru/api/v2/app/devices/{id}/open` | Открытие домофона | | `events.key.rt.ru/api/v2/events/list` | События (открытие, звонки) | | `key.rt.ru/screenshot/image/...` | Скриншоты камер | | `live-vdk4.camera.rt.ru/stream/...` | Live-стрим и архивное видео | ## 🔐 Безопасность - ✅ **Токен хранится** в зашифрованном хранилище Home Assistant - ⚠️ **Не передавайте** токен третьим лицам - 🔄 **Регулярно обновляйте** токен (рекомендуется раз в 3-6 месяцев) - 👤 Используйте **отдельный аккаунт** для интеграции, если возможно - 🚫 **Не публикуйте** токен в публичных репозиториях или логах ## 📝 Changelog ### Версия 1.0.0 (2026) - ✅ Добавлена поддержка камер и домофонов - ✅ Автоматическое обновление токенов при 403 - ✅ Отслеживание доступности камер (404) - ✅ События с маппингом ключей - ✅ Скриншоты и архивное видео событий - ✅ Гибкие настройки через UI (слайдеры, dropdown) - ✅ Настраиваемый уровень логирования - ✅ Переводы на русский и английский - ✅ Корректная конвертация UTC → локальное время HA ## 🤝 Вклад в развитие Приветствуются: - 🐛 Bug reports (с логами и описанием) - 💡 Feature requests - 🔧 Pull requests - 📚 Улучшение документации - 🌍 Новые языковые переводы ## 📄 Лицензия MIT License — используйте на свой страх и риск. ## 🙏 Благодарности - **Ростелеком** за API домофонов - **Сообществу Home Assistant** за отличную платформу - **Всем тестировщикам** за помощь в отладке и обратную связь ---