Добавить README.ru.md
This commit is contained in:
+313
@@ -0,0 +1,313 @@
|
|||||||
|
# Motion Recorder для Home Assistant
|
||||||
|
[English](README.md) | Русский
|
||||||
|
|
||||||
|
Мощная интеграция Home Assistant для записи камер по датчику движения с продвинутой фильтрацией и автоматическим управлением.
|
||||||
|
|
||||||
|
## Возможности
|
||||||
|
|
||||||
|
- 🎥 **Запись по движению** - Автоматическая запись камер при обнаружении движения
|
||||||
|
- 🎯 **Несколько датчиков движения** - Поддержка нескольких датчиков на одну камеру
|
||||||
|
- ⏱️ **Умное управление временем**:
|
||||||
|
- Фильтр движения (0-10с) - Защита от ложных срабатываний
|
||||||
|
- Задержка остановки (0-60с) - Продолжение записи после прекращения движения
|
||||||
|
- Максимальная длительность (10-3600с) - Автоостановка длительных записей
|
||||||
|
- **Поддержка предбуфера** - Включение секунд до обнаружения движения (0-60с)
|
||||||
|
- 🗂️ **Гибкое управление файлами**:
|
||||||
|
- Настраиваемые пути сохранения с переменными
|
||||||
|
- Несколько шаблонов имен файлов
|
||||||
|
- Автоматическая очистка старых записей (0-365 дней)
|
||||||
|
- 🔌 **Датчик принудительной остановки** - Остановка записи по состоянию любой сущности
|
||||||
|
- 🎛️ **Переключатель включения/выключения** - Управление записью одним кликом
|
||||||
|
- **Сенсор статуса** - Мониторинг состояния записи с красивыми иконками
|
||||||
|
- 🌍 **Многоязычность** - Переводы на русский и английский языки
|
||||||
|
- **Горячая перезагрузка** - Настройки применяются сразу без перезапуска
|
||||||
|
|
||||||
|
## Установка
|
||||||
|
|
||||||
|
### Ручная установка
|
||||||
|
|
||||||
|
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 дней |
|
||||||
|
| **Уровень логирования** | Детализация логов | 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 года
|
||||||
|
|
||||||
|
Очистка работает в фоновом режиме и не влияет на производительность записи.
|
||||||
|
|
||||||
|
## Продвинутые возможности
|
||||||
|
|
||||||
|
### Несколько датчиков движения
|
||||||
|
|
||||||
|
Вы можете выбрать несколько датчиков движения. Запись запускается при срабатывании **любого** сенсора. Интеграция использует логику ИЛИ:
|
||||||
|
|
||||||
|
- Сенсор 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.0.0
|
||||||
|
**Последнее обновление**: 2026-07-03
|
||||||
|
**Совместимо с**: Home Assistant 2024.6+
|
||||||
Reference in New Issue
Block a user