Загрузить файлы в «/»
This commit is contained in:
@@ -0,0 +1,396 @@
|
|||||||
|
# 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** за отличную платформу
|
||||||
|
- **Всем тестировщикам** за помощь в отладке и обратную связь
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
<div align="center">
|
||||||
|
|
||||||
|
**Разработано с ❤️ для Home Assistant**
|
||||||
|
|
||||||
|
[ Наверх](#rt-key-integration-for-home-assistant)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"name": "RT Key",
|
||||||
|
"render_readme": true,
|
||||||
|
"content_in_root": false,
|
||||||
|
"hide_default_branch": true,
|
||||||
|
"country": ["RU"],
|
||||||
|
"homeassistant": "2024.1.0"
|
||||||
|
}
|
||||||
@@ -0,0 +1,82 @@
|
|||||||
|
# Проект: Кастомная интеграция Home Assistant для Ростелеком Key (rtkey)
|
||||||
|
|
||||||
|
## Описание
|
||||||
|
Интеграция для работы с камерами и домофонами Ростелеком Key (key.rt.ru).
|
||||||
|
Позволяет просматривать live-стримы, скриншоты, открывать домофоны,
|
||||||
|
отслеживать события (открытие по ключу, через приложение и т.д.).
|
||||||
|
|
||||||
|
## API endpoints
|
||||||
|
1. **Камеры (все устройства)**:
|
||||||
|
GET https://keyapis.key.rt.ru/vc/api/v1/camera_video_data/list
|
||||||
|
Возвращает: uid, токены (streamer, screenshot, user), статус, модель, IP, MAC
|
||||||
|
|
||||||
|
2. **Домофоны**:
|
||||||
|
GET https://household.key.rt.ru/api/v2/app/devices/intercom
|
||||||
|
Возвращает: id, camera_id, serial_number, inter_codes (ключи с именами), capabilities
|
||||||
|
|
||||||
|
3. **Открытие домофона**:
|
||||||
|
POST https://household.key.rt.ru/api/v2/app/devices/{id}/open
|
||||||
|
|
||||||
|
4. **События**:
|
||||||
|
GET https://events.key.rt.ru/api/v2/events/list?device_ids=...&limit=1&sort_by=raised_at
|
||||||
|
Возвращает: event_type, raised_at (UTC), rfid_id, request_id
|
||||||
|
|
||||||
|
5. **Скриншоты**:
|
||||||
|
- Последний: https://key.rt.ru/screenshot/image/{quality}/{camera_id}/last.jpg?token=...
|
||||||
|
- По времени: https://key.rt.ru/screenshot/image/{quality}/{camera_id}/{timestamp_sec}.jpg?token=...
|
||||||
|
|
||||||
|
6. **Стрим**: https://live-vdk4.camera.rt.ru/stream/{camera_id}/live.mp4?token=...
|
||||||
|
7. **Архив**: https://live-vdk4.camera.rt.ru/stream/{camera_id}/{timestamp_sec}.mp4?token=...
|
||||||
|
|
||||||
|
## Критически важные нюансы
|
||||||
|
- **Лаг времени камеры ~25 секунд**: если событие в T, то в видео/скриншоте оно отображается на T+25.
|
||||||
|
Для получения точного кадра нужно запрашивать timestamp = T - 25.
|
||||||
|
- **Время событий в UTC**: raised_at приходит в UTC, для отображения конвертируем в hass.config.time_zone
|
||||||
|
- **Токены привязаны к IP**: при смене IP сервера РТ токены становятся невалидными (403).
|
||||||
|
Нужно периодически обновлять через camera_video_data/list.
|
||||||
|
- **Токены живут долго** (exp ~через год), но привязка к IP — проблема.
|
||||||
|
|
||||||
|
## Архитектура
|
||||||
|
- `RTKeyCamerasApi` — основной класс, хранит все данные, делает запросы
|
||||||
|
- Один общий таймер опроса событий (asyncio.Task) для всех домофонов
|
||||||
|
- Callback-система для уведомления сущностей об обновлении событий
|
||||||
|
- Кэш картинок (4 сек) для предотвращения дублей запросов
|
||||||
|
- Маппинги: intercom_id → camera_id, rfid_id → имя ключа
|
||||||
|
|
||||||
|
## Сущности для каждого домофона
|
||||||
|
- `button` "Открыть" — открытие двери
|
||||||
|
- `sensor` "Последнее событие" — показывает кто открыл (с маппингом rfid_id → имя)
|
||||||
|
- `image` "Скриншот события" — JPEG на момент события
|
||||||
|
- `camera` "Архив события" — видео с момента события
|
||||||
|
|
||||||
|
## Сущности для каждой камеры
|
||||||
|
- `camera` — live-стрим
|
||||||
|
- `image` "Скриншот" — периодический скриншот (интервал настраивается, 0 = отключено)
|
||||||
|
|
||||||
|
## Настройки (Options Flow)
|
||||||
|
- camera_image_refresh_interval (слайдер 0-600, шаг 30)
|
||||||
|
- screenshot_quality (dropdown)
|
||||||
|
- log_level (dropdown)
|
||||||
|
- events_enabled, events_refresh_interval, event_time_lag (25 по умолчанию)
|
||||||
|
- pre_event_seconds, event_screenshot_enabled, event_archive_enabled и т.д.
|
||||||
|
|
||||||
|
## Что уже работает
|
||||||
|
- Live-стримы камер
|
||||||
|
- Периодические скриншоты
|
||||||
|
- Открытие домофонов через кнопку
|
||||||
|
- Отслеживание событий с маппингом ключей
|
||||||
|
- Скриншоты и архивное видео на момент события
|
||||||
|
- Правильная конвертация UTC → локальное время HA
|
||||||
|
- Настройки через Options Flow с слайдерами и dropdown
|
||||||
|
|
||||||
|
## Что можно улучшить (задачи на будущее)
|
||||||
|
- [ ] Автоматическое обновление токенов при получении 403 (сейчас только по таймеру)
|
||||||
|
- [ ] Обработка ошибок в таймерах (чтобы таймер не умирал при исключениях)
|
||||||
|
- [ ] Уведомления в HA при звонке в домофон (если появится такой тип события)
|
||||||
|
- [ ] История событий (не только последнее)
|
||||||
|
|
||||||
|
## Стиль кода
|
||||||
|
- Русские комментарии и логи
|
||||||
|
- Логирование через _LOGGER с эмодзи для важных событий (✅, 🔔, 🔄)
|
||||||
|
- Типизация (Python 3.11+)
|
||||||
|
- Использование async/await, async_add_executor_job для blocking calls
|
||||||
Reference in New Issue
Block a user