В прошлой статье мы научили систему "разговаривать" через Telegram. Теперь добавим ей "глаза" — подключим камеру видеонаблюдения Hikvision для визуального контроля. Всё локально, без облаков, но с учетом, что HA записи с камер не хранит (хранение отдельная тема, пока в планах ее нет).
Часть 1: Выбор и подготовка камеры
Подойдет любая камера с поддержкой ONVIF/RTSP. Начинал я с дешевых китайских ноу неймов и несколько продолжают работать уже 5+ лет, но при выходе из строя, я их заменяю на Hikvision, дороже, но софт удобный, функционала больше, интерфейс на русском, картинка хорошая и не нужно каждый раз заново разбираться как подключить. Поэтому на примере Hikvision и будем разбираться.
Как выбрать:
Для сатьи испльзую модель HiWatch DS-I453M(C) (2.8mm), но выбирать нужно под задачу и обращать внимание на:
- влагозащиту - я бы рекомендовал уличные, все-таки на рыбной ферме влажность выше нормы;
- угол обзора - есть с широким углом обзора и дадут они общий план, есть более точечные;
- подсветка в темноте - не уверен есть ли сейчас камеры без нее, но лучше перепроверить;
- фокусное расстояние (в камере из примера 2.8 мм) - принци похож на бинокль, если 2.8, то смотрите через камеру своими глазами, если цифра больше, то как будто смотрите через бинокль х2 и т. д. увеличением, т. е. в зависимости от задачи и месте установки камеры нужно подбирать разные;
- микрофон - в рамках данной статьи использоваться не будет, но если организовано хранение видео или есть возможность подключиться к камере напрямую, то он нужен;
- различные распознавания и прочие облачные и не очень доп опции с умным домом не интегрируются (по крайней мере я не знаю как это сделать) - поэтому эту информацию можно игнорировать.
Что понадобится:
- Камера Hikvision (от 5000 руб.)
- Ethernet-кабель (витая пара) - если камера не wifi, видео поток достаточно большой, рекомендую именно проводное подключение
- Блок питания 12V DC (амперы смотрите в характеристиках конкретной модели, вольты*амперы=ваты, т. е. если у камеры написано потреблемние 6,5 ватт при 12 вольт, то ампер достаточно 0,5, но обычно делают запас минимум х2, блок питания при близкой к пиковой нагрузке деградирует достаточно быстро)
- Можно без блока питания, если в роутере есть выходы с poe, тогда можно тянуть только кабель Ethernet и докупить poe-сплиттер
Предварительная настройка камеры:
1. Если вы не знаете как зайти на свой роутер, прописать там статичные IP и посмотреть адрес камеры, то все (кроме скачива SADP) дальнейшие действия вам необходимо выполнять с ПК на Windows в той же подсети, что и умный дом, а это значит, что вы должны быть на ферме
3. Устанавливаем SADP Tool с сайта Hikvision - https://www.hikvision.com/en/support/tools/hitools/clea8b3e4ea7da90a9/
2. Подключаем камеру к питанию и напрямую кабелем ethernet к вашему ПК
4. При запуске SADP Tool обнаружит камеру в статусе Inactive, необходимо выделить ее галкой, придумать пароль и нажать активировать
5. Если при активации ловите ошибку - придумайте пароль по сложнее (буквы в обоих регистрах, цифры и спец символы("!", например)), обязательно его запишите
6. Потеряв пароль администратора, вы потеряете доступ к камере, а сбросить ее к заводским настройкам не самая простая задача (в интернете предлагают разобрать и найти кнопку reset, которая есть не на всех моделях), поэтому вы можете подстраховать себя и заполнить формы для восстановления, но я просто записываю пароли, поэтому пропускаю
7. После активации проставьте галку "Enable DHCP" (если не отображается меню как на скриншоте ниже, то нажмите на стрелочку "<", выделил на скриншоте), введите внизу только что заданный пароль администратора и нажмите Modify
8. Отлючаем камеру от своего ПК и подключаем ее к роутеру
9. После переключения камеры, на своем ПК нажимаем Refresh в SADP и сохраняем и/или записываем IPv4 Address
10. Открываем браузер и в адресной строке вписываем IP-адрес, нажимаем Enter, указываем Пользователь - admin, Пароль - тот что был указан при активации
11. На стартовой странице после входа отображается видео с камеры, если его нет необходимо скачать и установить плагин, после чего перезагрузить страницу в браузере, а если плагин установлен, то двойной клик в область, где должно быть изображение, затем двойной клик чтобы вернуть назад. Иногда и после установки и двойного клика изображение не отображается, но повторная установка плагина решает проблему, в целом не страшно, в админский интерфейс вы зайдете за все время использования камеры раза 3.
12. Далее настраиваем время + его обновление
13. Далее включаем ONVIF и создаем пользователя, под которым будет подключаться умный дом. Настройки - Сеть - Доп. настройки - Протокол интеграции - ставим галку "Включить Open..." - Добавляем пользователя, придумывая имя пользователя и пароль, выбираем роль "Пользователь медиаданных"
14. Если изображение перевернуто, зеркально отражено или и то и другое, то изменить можно в Настройки - изображение - Регулировка видео - Зеркальный
15. Также можно добавить еще пользователей. Например, чтобы понять кто и когда заходил, так как ведется история, или можно завести пользователя с правами оператора или пользователя, если, например, есть наемный сотрудник или кто-то плохо знаком с ПК, во избежании некорректных действий с настройками. С этих учетных записей камеры можно подключить, например, в приложении tinyCam и просматривать их там.
16. Все там же в настройках заходим в раздел По событию - События - Детектор движения. Включаем детекцию движения и в настройках зоны нажимаем Создание зоны
17. Мышкой выделяете зону, в которой движение необходимо детектировать и нажимаете Завершить. Очень удобно, если вам, например, необходимо исключить детекцию движения рыбы в бассейнах, случайные движения за окном или наоборот только за окном или дверью и необходимо следить. Или вы всегда можете выделить изображение целиком.
18. Рядом вы можете включить расписание детектирования. Если кто-то работает в определенное время, то при каждом его движении не очень хочется получать уведомление (оно будет настроено далее), поэтому этот период можно исключить.
19. Галки с Обнаружение цели - Человек и Автомобиль можно убрать, использоваться не будут, но явно используют ресурс камеры для определения типа цели.
Часть 2: Подключаем камеру к умному дому, настроиваем дашборд и автоматизацию
Шаг 1. Подключение к умному дому
1. Устанавливаем интеграцию ONVIF. Настройки - Интеграции - Добавить интеграцию - вписываем в поиск ONVIF - кликаем
2. Галку искать автоматически снимаем и на следующей форме заполняем:
Название - удобное имя
Хост - записанный ранее IP
Порт - не меняем
Имя пользователя и Пароль - Предварительная настройка камеры п. 13
Шаг 2. Добавляем на дашборд
1. Заходим в редактирование панели (добавили ее при подключении датчика температуры DS18B20, если пропустили рекомендую ознакомиться)
2. Добавляем раздел
3. Добавляем карточку
4. Карточки - Picture entity
5. Выбираем объект (любой, его текущее состояние будет отображать внизу изображения, например, датчик движения от камеры же) и в объекте камеры саму камеру
6. Под камерой можно добавить и еще График истории, выбрав необходимое количество часов (по умолчанию 24) и в Объектах Cell Motion Detector
7. Честно говоря видно плохо (в одной из следующих статей дашборд будем пересобирать и воспользуемся действительно красивыми карточками, но это большая тема для отдельной статьи), а пока если кликнуть на название, то вспылевет читабельная история
Шаг 3. Преднастройка telegram
1. Логика работы с камерой следующая:
- мы отправляем команду на отправку изображения с камеры
- камера делает снимок и сохраняет его на диск в виде файла
- этот файл с изображением отправляется в телеграмм
Есть несколько моментов в этой логике, которые следует учесть:
- файлы с изображением должны иметь уникальное имя - иначе при запросе из нескольких чатов файл будет перезаписан и не факт, что вам придет то, что вы запрашивали или если вдруг файл окажется заблокирован на запись, то всегда будет приходить один и тот же кадр из прошлого;
- необходимо время на запрос кадра и сохранения его в виде файла, поэтому между запросом и отправкой в телеграм должна быть небольшая задержка (несколько секунд будет уже достаточно, но еще и не дискомфортно в плане ожидания)
- файлы с изображениями с камер, имея уникальные имена, будут накапливаться, что когда-то в перспективе переполнит диск и как себя поведет умный дом большой вопрос
2. Решаем проблему с накоплением файлов. Открываем Studio Code Server (устанавливалась в Статье 3) - нас интересует файл configuration.yaml - в него добавляем код ниже (файлы с расширением yaml чувствительны к пробелам). Код оставляет 10 файлов, остальные удаляет. Никаких кнопок сохранения изменений нет, все ваши действия сохраняются автоматически.
homeassistant:
allowlist_external_dirs:
- /config/cam_snap/
shell_command:
cleanup_keep_last_10: 'ls -t /config/cam_snap/cam_*.jpg | tail -n +11 | xargs rm -f 2>/dev/null || true'
3. Необходимо создать папку /config/cam_snap/ - сам умный дом ее не создаст и как следствие сохранить кадр с камеры не сможет. Запускаем терминал (после запуска возникнет ошибка, ждем секунд 10 и повторяем, терминал откроется) и вводим команду:
mkdir -p /config/cam_snap
4. Перезагружаем умный дом. Панель разработчика - Перезапустить - Дополнительные опции - Перезагрузить систему
Шаг 4. Добавлеяем отправку изображения с камеры в telegram по команде из чата
1. Создаем автоматизацию с отправкой изображения по запросу (как обычно Настройки - Автоматизация - Создать автоматизацию)
2. В блоке Когда добавляем триггер на Событие - Событие, условие следующее:
Тип события - telegram_command
Данные события - command: /photo
3. В блоке тогда добавляем:
- в разделе Блоки - Определить переменные - добавляем следующий код:
variables:
camera_vhod: /config/cam_snap/cam_vhod_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
- Действия - Камера - Сделать моментальный снимок - Цели MainStream камеры - Имя файла {{ camera_vhod }}
- Блоки - Ожидать истечения времени - указываем 3 секунды
- Действия - Telegram bot - Отправить фото - Файл {{ camera_vhod }}
- Действия - Выполнить действие - Выполнить действие - ищем добавленную на Шаге 3 п. 2 команду cleanup_keep_last_10
- проверяем, что все получилось также и в том же порядке
4. Открываем чат в телеграме, отправляем сообщение /photo и получаем фото с камеры в ответ.
Шаг 5. Добавлеяем отправку изображения с камеры в telegram при движении в кадре, вариант простой
1. Вариант простой, добавляем в предыдущую автоматизацию еще один триггер. Объект - Состояние - Объект Cell Motion Detection камеры - с "Не обнаружено" - на "Обнаружено" - в течение 1 секунды. Зачем указывать в течение 1 секунды - камера ничего не знает про движение, она сравнивает два соседних кадра и если на них есть отличия считает, что движение есть. В результате когда включается ночное видение на камере один кадр цветной, а следующий в оттенках серого, кадры отличаются сильно и без "в течение 1 секунды" будет приходить уведомление, а никто не хочет получать два ложных срабатывания в день.
2. Должно получиться так
Шаг 6. Добавлеяем отправку изображения с камеры в telegram при движении в кадре, вариант более функциональный
Создаем автоматизацию аналогично предыдущим вариантам, но с небольшими отличиями. Будем делать два снимка с задержкой в 5 секунд - если делать снимок в момент срабатывания датчика движения, то человек, машина и любой другой объект обычно в кадр целиком не попадает, а если делать один кадр сразу с задержкой, то иногда не понятно, а на что собственно среагировала камера. Поэтому:
1. Переменные объявляем 2:
variables:
cam_vhod: /config/cam_snap/cam_vhod_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
cam_vhod_5s: /config/cam_snap/cam_vhod_5s_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
2. Делаем два снимка с задежкой в 5 секунд, в первом имя файла {{ cam_vhod }}, во втором {{ cam_vhod_5s }}. Не забываем выбрать в целях камеру.
3. Два раза отправляем по одному фото (в телеграмме есть отправка медиа фалов пачкой, но в интеграции в home assistant я такой функционал не нашел), также добавляем комментарии, например, "Сработал датчик движения" и "Сработал датчик движения 5с".
4. Результат должен быть такой:
Шаг 7. Проверка работоспособности камеры
Объекта у камеры, который бы показывал ее доступность нет, поэтому настроить оповещение простым способом не получится, как это было с датчиком DS18B20. Но так как камера сетевая и имеет свой IP, можно настроить проверку камеры через другую интеграцию - PING. Сделаем в одной из следующих статей, когда добавим оповещение о том кто пришел/ушел на/с фермы.
Часть 3. Итог.
Что получилось?
- Камера Hikvision подключена к умному дому
- Фото по запросу /photo
- Фото при обнаружении движения
Теперь ферма не только "разговаривает", но и "показывает"!
Часть 4. Анонс.
В следующей статье обязательно разделим чаты телеграм - один групповой чат с оповещениями, другие индивидуальные для отправки команд, настроим ответ в чат из которго поступил запрос, а также добавим меню, чтобы не пришлось запоминать команды и писать их вручную.
Хочется сделать, но не уверен, что войдет в следующую статью - для разных чатов сделать доступным ограниченный набор команд, для недоступности сделать одну автоматизацию на все устройства и в целом изучить вопрос, можно ли как-то указывать группу устройств, а не перечислять их все вручную.