diff --git a/README.ru.md b/README.ru.md new file mode 100644 index 0000000..7ad5f05 --- /dev/null +++ b/README.ru.md @@ -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+ \ No newline at end of file