342 lines
19 KiB
Markdown
342 lines
19 KiB
Markdown
# <img src="custom_components/motion_recorder/brand/icon.png" width="64"> </img> Motion Recorder для Home Assistant
|
||
[English](README.md) | Русский
|
||
|
||
Мощная интеграция Home Assistant для записи камер по датчику движения с продвинутой фильтрацией и автоматическим управлением.
|
||
|
||
## Возможности
|
||
|
||
- 🎥 **Запись по движению** - Автоматическая запись камер при обнаружении движения
|
||
- 🎯 **Несколько датчиков движения** - Поддержка нескольких датчиков на одну камеру
|
||
- ⏱️ **Умное управление временем**:
|
||
- Фильтр движения (0-10с) - Защита от ложных срабатываний
|
||
- Задержка остановки (0-60с) - Продолжение записи после прекращения движения
|
||
- Максимальная длительность (10-3600с) - Автоостановка длительных записей
|
||
- **Поддержка предбуфера** - Включение секунд до обнаружения движения (0-60с)
|
||
- 🗂️ **Гибкое управление файлами**:
|
||
- Настраиваемые пути сохранения с переменными
|
||
- Несколько шаблонов имен файлов
|
||
- Автоматическая очистка старых записей (0-365 дней)
|
||
- 🔌 **Датчик принудительной остановки** - Остановка записи по состоянию любой сущности
|
||
- 🎛️ **Переключатель включения/выключения** - Управление записью одним кликом
|
||
- **Сенсор статуса** - Мониторинг состояния записи с красивыми иконками
|
||
- 💡 **Умное управление устройствами** - Автоматическое включение/выключение света и переключателей по состоянию записи
|
||
- 🗑️ **Автоочистка** - Удаление старых записей по политике хранения (ежедневно в 03:00)
|
||
- 🌍 **Многоязычность** - Переводы на русский и английский языки
|
||
- **Горячая перезагрузка** - Настройки применяются сразу без перезапуска
|
||
|
||
## Установка
|
||
|
||
### Ручная установка
|
||
|
||
1. Скачайте папку `motion_recorder`
|
||
2. Поместите её в директорию `custom_components` вашего Home Assistant:
|
||
```
|
||
/config/custom_components/motion_recorder/
|
||
```
|
||
3. Перезапустите Home Assistant
|
||
4. Перейдите в **Настройки → Устройства и службы → Добавить интеграцию**
|
||
5. Найдите **Motion Recorder** и следуйте мастеру настройки
|
||
|
||
### Через HACS (Рекомендуется)
|
||
|
||
1. Откройте HACS в Home Assistant
|
||
2. Перейдите в **Интеграции**
|
||
3. Нажмите **⋮** (три точки) → **Пользовательские репозитории**
|
||
4. Добавьте репозиторий: `https://github.com/sirmrak/motion_recorder`
|
||
5. Категория: **Интеграция**
|
||
6. Установите **Motion Recorder** из HACS
|
||
7. Перезапустите Home Assistant
|
||
8. Добавьте интеграцию через **Настройки → Устройства и службы**
|
||
|
||
## Настройка
|
||
|
||
### Первоначальная настройка
|
||
|
||
При добавлении интеграции вы настроите:
|
||
|
||
| Настройка | Описание | По умолчанию | Диапазон |
|
||
|-----------|----------|--------------|----------|
|
||
| **Имя интеграции** | Отображаемое имя для этого экземпляра | Motion Recorder | - |
|
||
| **Камера** | Сущность камеры для записи | - | - |
|
||
| **Путь сохранения** | Папка относительно `/media` | `{camera_name}` | - |
|
||
| **Формат имени файла** | Формат даты/времени для файлов | `ДД-ММ-ГГГГ_ЧЧ-ММ-СС` | - |
|
||
| **Макс. длительность** | Максимальная длина записи | 30 сек | 10-3600 сек |
|
||
| **Предбуфер** | Секунды до движения для включения | 0 сек | 0-60 сек |
|
||
| **Датчики движения** | Бинарные сенсоры для запуска записи | - | - |
|
||
| **Фильтр движения** | Задержка перед стартом (защита от ложных срабатываний) | 0 сек | 0-10 сек |
|
||
| **Задержка остановки** | Ожидание после прекращения движения | 0 сек | 0-60 сек |
|
||
| **Датчик принуд. остановки** | Сущность для принудительной остановки | - | - |
|
||
| **Состояние остановки** | Значение состояния для запуска остановки | `off` | - |
|
||
| **Дни хранения** | Автоудаление записей старше | 7 дней | 0-365 дней |
|
||
| **Управляемые устройства** | Светильники/переключатели для автоуправления | - | - |
|
||
| **Состояния включения** | Состояния, при которых устройства включаются | `recording` | Множественный выбор |
|
||
| **Уровень логирования** | Детализация логов | INFO | - |
|
||
|
||
### Опции (после настройки)
|
||
|
||
После первоначальной настройки вы можете изменить эти параметры через **Настройки → Устройства и службы → Motion Recorder → Настроить**:
|
||
|
||
- Максимальная длительность
|
||
- Предбуфер
|
||
- Фильтр движения
|
||
- Задержка остановки
|
||
- Дни хранения
|
||
- Управляемые устройства
|
||
- Состояния включения
|
||
- Уровень логирования
|
||
|
||
Изменения применяются сразу без перезапуска.
|
||
|
||
## Использование
|
||
|
||
### Базовый рабочий процесс
|
||
|
||
1. **Обнаружено движение** → Сенсор срабатывает
|
||
2. **Фильтр движения** (опционально) → Ожидание для подтверждения, что это не ложное срабатывание
|
||
3. **Запись начинается** → Поток камеры сохраняется в файл
|
||
4. **Движение продолжается** → Запись продолжается до максимальной длительности
|
||
5. **Движение прекратилось** → Запускается таймер задержки остановки
|
||
6. **Задержка истекла** → Запись останавливается и файл финализируется
|
||
7. **Очистка** → Старые файлы удаляются согласно политике хранения
|
||
|
||
### Машина состояний
|
||
|
||
Интеграция использует чёткую машину состояний, видимую в сенсоре статуса:
|
||
|
||
```
|
||
idle → detecting → recording → delaying → finalizing → idle
|
||
```
|
||
|
||
| Состояние | Иконка | Описание |
|
||
|-----------|--------|----------|
|
||
| `idle` | 💤 `mdi:sleep` | Ожидание движения |
|
||
| `detecting` | 🎯 `mdi:motion-sensor` | Активен фильтр движения |
|
||
| `recording` | 🔴 `mdi:record-rec` | Идёт запись |
|
||
| `delaying` | ⏳ `mdi:timer-sand` | Ожидание после прекращения движения |
|
||
| `finalizing` | ✅ `mdi:file-check` | Сохранение и финализация файла |
|
||
| `disabled` | 📹 `mdi:video-off` | Запись отключена через переключатель |
|
||
| `error` | ⚠️ `mdi:alert-circle` | Произошла ошибка |
|
||
|
||
### Создаваемые сущности
|
||
|
||
Для каждого экземпляра интеграции:
|
||
|
||
1. **Сенсор** - `sensor.motion_recorder_<имя>_status`
|
||
- Показывает текущее состояние записи
|
||
- Атрибуты: количество записей, общая длительность, общий размер, путь к последнему файлу
|
||
|
||
2. **Переключатель** - `switch.motion_recorder_<имя>_enabled`
|
||
- Включение/выключение записи
|
||
- Состояние сохраняется между перезапусками
|
||
|
||
### Примеры автоматизаций
|
||
|
||
#### Отправка уведомления при завершении записи
|
||
|
||
```yaml
|
||
automation:
|
||
- alias: "Уведомление о завершении записи"
|
||
trigger:
|
||
- platform: state
|
||
entity_id: sensor.motion_recorder_front_door_status
|
||
to: "idle"
|
||
from: "finalizing"
|
||
action:
|
||
- service: notify.mobile_app
|
||
data:
|
||
message: "Запись завершена: {{ state_attr('sensor.motion_recorder_front_door_status', 'last_file_path') }}"
|
||
```
|
||
|
||
#### Включение света во время записи
|
||
|
||
```yaml
|
||
automation:
|
||
- alias: "Свет во время записи"
|
||
trigger:
|
||
- platform: state
|
||
entity_id: sensor.motion_recorder_front_door_status
|
||
to: "recording"
|
||
action:
|
||
- service: light.turn_on
|
||
target:
|
||
entity_id: light.porch
|
||
```
|
||
|
||
#### Отключение записи ночью
|
||
|
||
```yaml
|
||
automation:
|
||
- alias: "Отключение записи ночью"
|
||
trigger:
|
||
- platform: time
|
||
at: "23:00:00"
|
||
action:
|
||
- service: switch.turn_off
|
||
target:
|
||
entity_id: switch.motion_recorder_front_door_enabled
|
||
|
||
- alias: "Включение записи утром"
|
||
trigger:
|
||
- platform: time
|
||
at: "07:00:00"
|
||
action:
|
||
- service: switch.turn_on
|
||
target:
|
||
entity_id: switch.motion_recorder_front_door_enabled
|
||
```
|
||
|
||
## Управление файлами
|
||
|
||
### Путь сохранения
|
||
|
||
Путь сохранения относителен к директории `/media` вашего Home Assistant. Вы можете использовать переменные:
|
||
|
||
- `{camera_name}` - Заменяется на имя сущности камеры (без префикса `camera.`)
|
||
|
||
**Примеры:**
|
||
- `{camera_name}` → `/media/front_door/`
|
||
- `cameras/{camera_name}` → `/media/cameras/front_door/`
|
||
- `/absolute/path/recordings` → Абсолютный путь (должен существовать)
|
||
|
||
### Шаблоны имен файлов
|
||
|
||
Выберите из предустановленных форматов:
|
||
|
||
| Формат | Пример вывода |
|
||
|--------|---------------|
|
||
| `ДД-ММ-ГГГГ_ЧЧ-ММ-СС` | `02-07-2026_20-30-45.mp4` |
|
||
| `ГГГГ-ММ-ДД_ЧЧ-ММ-СС` | `2026-07-02_20-30-45.mp4` |
|
||
| `ДД.ММ.ГГГГ_ЧЧ-ММ-СС` | `02.07.2026_20-30-45.mp4` |
|
||
| `ГГГГММДД_ЧЧММСС` | `20260702_203045.mp4` |
|
||
| `ДД.ММ.ГГГГ_ЧЧ.ММ.СС` | `02.07.2026_20.30.45.mp4` |
|
||
|
||
Все форматы включают секунды для предотвращения перезаписи файлов при нескольких записях в одну минуту.
|
||
|
||
### Автоматическая очистка
|
||
|
||
Файлы старше периода хранения автоматически удаляются ежедневно в 03:00.
|
||
|
||
- **0 дней** = Никогда не удалять
|
||
- **7 дней** = Удалить файлы старше 7 дней
|
||
- **30 дней** = Удалить файлы старше 30 дней
|
||
- **365 дней** = Удалить файлы старше 1 года
|
||
|
||
Очистка работает в фоновом режиме и не влияет на производительность записи.
|
||
|
||
## Умное управление устройствами
|
||
|
||
Motion Recorder может автоматически управлять светильниками и переключателями в зависимости от текущего состояния.
|
||
|
||
### Как это работает
|
||
|
||
1. Выберите одну или несколько сущностей `light` или `switch` в настройках
|
||
2. Отметьте состояния, при которых устройства должны включаться (например, `recording`, `delaying`)
|
||
3. При переходе в выбранное состояние → устройства включаются
|
||
4. При выходе из состояния → устройства выключаются (только если интеграция их включала)
|
||
|
||
### Безопасность
|
||
|
||
- **Не мешает пользователю**: Если вы вручную включили свет, интеграция его не выключит
|
||
- **Ручное управление приоритетно**: Если вы выключили управляемый свет во время записи, он останется выключенным
|
||
- **Очистка при остановке**: Все устройства, включённые интеграцией, выключаются при перезагрузке HA или перезагрузке интеграции
|
||
|
||
### Примеры использования
|
||
|
||
- Включать уличный фонарь только во время активной записи
|
||
- Активировать индикатор тревоги при обнаружении движения
|
||
- Включать освещение в помещении при детекции движения камерой ночью
|
||
|
||
## Продвинутые возможности
|
||
|
||
### Несколько датчиков движения
|
||
|
||
Вы можете выбрать несколько датчиков движения. Запись запускается при срабатывании **любого** сенсора. Интеграция использует логику ИЛИ:
|
||
|
||
- Сенсор A сработал → Запись началась
|
||
- Сенсор A остановился, Сенсор B всё ещё активен → Запись продолжается
|
||
- Все сенсоры остановились → Запускается таймер задержки остановки
|
||
|
||
### Датчик принудительной остановки
|
||
|
||
Используйте любую сущность (`binary_sensor`, `switch`, `input_boolean`) для принудительной остановки записи немедленно:
|
||
|
||
- **Пример использования**: Остановка записи при снятии с охраны
|
||
- **Пример использования**: Остановка записи когда человек покидает комнату
|
||
- **Пример использования**: Кнопка экстренной остановки
|
||
|
||
### Предбуфер
|
||
|
||
Включите секунды **до** обнаружения движения в запись:
|
||
|
||
- Требуется активный поток камеры
|
||
- Фактический предбуфер может быть меньше запрошенного в зависимости от буфера потока
|
||
- Полезно для записи того, что произошло до срабатывания движения
|
||
|
||
## Решение проблем
|
||
|
||
### Запись не начинается
|
||
|
||
1. Проверьте, что датчик движения работает в Home Assistant
|
||
2. Убедитесь, что камера поддерживает потоковую передачу
|
||
3. Проверьте, что интеграция включена (переключатель в положении ВКЛ)
|
||
4. Просмотрите логи: **Настройки → Система → Журналы** → фильтр по `motion_recorder`
|
||
|
||
### Файлы не создаются
|
||
|
||
1. Убедитесь, что путь сохранения существует или может быть создан
|
||
2. Проверьте, что Home Assistant имеет права на запись в `/media`
|
||
3. Просмотрите логи на наличие ошибок прав доступа
|
||
4. Попробуйте абсолютный путь вместо относительного
|
||
|
||
### Запись не останавливается
|
||
|
||
1. Проверьте настройку задержки остановки (увеличьте при необходимости)
|
||
2. Убедитесь, что датчик движения действительно перестаёт срабатывать
|
||
3. Проверьте, что максимальная длительность установлена правильно
|
||
4. Просмотрите логи на наличие проблем с таймерами
|
||
|
||
### Сенсор статуса показывает "error"
|
||
|
||
1. Проверьте логи для детального сообщения об ошибке
|
||
2. Убедитесь, что сущность камеры действительна
|
||
3. Проверьте, что компонент stream работает
|
||
4. Попробуйте перезапустить Home Assistant
|
||
|
||
### Логи
|
||
|
||
Установите уровень логирования **DEBUG** для детального troubleshooting:
|
||
|
||
```yaml
|
||
logger:
|
||
logs:
|
||
custom_components.motion_recorder: DEBUG
|
||
```
|
||
|
||
## Требования
|
||
|
||
- Home Assistant 2024.6 или новее
|
||
- Камера с поддержкой потоковой передачи
|
||
- Включённый компонент `stream`
|
||
- Установленный FFmpeg (для некоторых типов камер)
|
||
|
||
## Поддержка
|
||
|
||
- **Проблемы**: [GitHub Issues](https://github.com/sirmrak/motion_recorder/issues)
|
||
- **Обсуждения**: [GitHub Discussions](https://github.com/sirmrak/motion_recorder/discussions)
|
||
- **Документация**: [Документация Home Assistant](https://www.home-assistant.io/integrations/)
|
||
|
||
## Лицензия
|
||
|
||
Этот проект лицензирован по лицензии MIT - подробности в файле LICENSE.
|
||
|
||
## Благодарности
|
||
|
||
- Создано с ❤️ для сообщества Home Assistant
|
||
- Вдохновлено различными решениями для записи камер
|
||
- Спасибо всем контрибьюторам и тестировщикам
|
||
|
||
---
|
||
|
||
**Версия**: 1.1.0
|
||
**Последнее обновление**: 2026-07-05
|
||
**Совместимо с**: Home Assistant 2024.6+ |