Найти в Дзене

Статья 6. Home Assistant: добавляем видеонаблюдение на примере камеры Hikvision

В прошлой статье мы научили систему "разговаривать" через Telegram. Теперь добавим ей "глаза" — подключим камеру видеонаблюдения Hikvision для визуального контроля. Всё локально, без облаков, но с учетом, что HA записи с камер не хранит (хранение отдельная тема, пока в планах ее нет). Подойдет любая камера с поддержкой ONVIF/RTSP. Начинал я с дешевых китайских ноу неймов и несколько продолжают работать уже 5+ лет, но при выходе из строя, я их заменяю на Hikvision, дороже, но софт удобный, функционала больше, интерфейс на русском, картинка хорошая и не нужно каждый раз заново разбираться как подключить. Поэтому на примере Hikvision и будем разбираться. Для сатьи испльзую модель HiWatch DS-I453M(C) (2.8mm), но выбирать нужно под задачу и обращать внимание на: 1. Если вы не знаете как зайти на свой роутер, прописать там статичные IP и посмотреть адрес камеры, то все (кроме скачива SADP) дальнейшие действия вам необходимо выполнять с ПК на Windows в той же подсети, что и умный дом, а это з
Оглавление

В прошлой статье мы научили систему "разговаривать" через 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-сплиттер
-2

Предварительная настройка камеры:

1. Если вы не знаете как зайти на свой роутер, прописать там статичные IP и посмотреть адрес камеры, то все (кроме скачива SADP) дальнейшие действия вам необходимо выполнять с ПК на Windows в той же подсети, что и умный дом, а это значит, что вы должны быть на ферме

3. Устанавливаем SADP Tool с сайта Hikvision - https://www.hikvision.com/en/support/tools/hitools/clea8b3e4ea7da90a9/

2. Подключаем камеру к питанию и напрямую кабелем ethernet к вашему ПК

4. При запуске SADP Tool обнаружит камеру в статусе Inactive, необходимо выделить ее галкой, придумать пароль и нажать активировать

-3

5. Если при активации ловите ошибку - придумайте пароль по сложнее (буквы в обоих регистрах, цифры и спец символы("!", например)), обязательно его запишите

6. Потеряв пароль администратора, вы потеряете доступ к камере, а сбросить ее к заводским настройкам не самая простая задача (в интернете предлагают разобрать и найти кнопку reset, которая есть не на всех моделях), поэтому вы можете подстраховать себя и заполнить формы для восстановления, но я просто записываю пароли, поэтому пропускаю

7. После активации проставьте галку "Enable DHCP" (если не отображается меню как на скриншоте ниже, то нажмите на стрелочку "<", выделил на скриншоте), введите внизу только что заданный пароль администратора и нажмите Modify

-4

8. Отлючаем камеру от своего ПК и подключаем ее к роутеру

9. После переключения камеры, на своем ПК нажимаем Refresh в SADP и сохраняем и/или записываем IPv4 Address

-5

10. Открываем браузер и в адресной строке вписываем IP-адрес, нажимаем Enter, указываем Пользователь - admin, Пароль - тот что был указан при активации

11. На стартовой странице после входа отображается видео с камеры, если его нет необходимо скачать и установить плагин, после чего перезагрузить страницу в браузере, а если плагин установлен, то двойной клик в область, где должно быть изображение, затем двойной клик чтобы вернуть назад. Иногда и после установки и двойного клика изображение не отображается, но повторная установка плагина решает проблему, в целом не страшно, в админский интерфейс вы зайдете за все время использования камеры раза 3.

-6

12. Далее настраиваем время + его обновление

-7

13. Далее включаем ONVIF и создаем пользователя, под которым будет подключаться умный дом. Настройки - Сеть - Доп. настройки - Протокол интеграции - ставим галку "Включить Open..." - Добавляем пользователя, придумывая имя пользователя и пароль, выбираем роль "Пользователь медиаданных"

-8

14. Если изображение перевернуто, зеркально отражено или и то и другое, то изменить можно в Настройки - изображение - Регулировка видео - Зеркальный

-9

15. Также можно добавить еще пользователей. Например, чтобы понять кто и когда заходил, так как ведется история, или можно завести пользователя с правами оператора или пользователя, если, например, есть наемный сотрудник или кто-то плохо знаком с ПК, во избежании некорректных действий с настройками. С этих учетных записей камеры можно подключить, например, в приложении tinyCam и просматривать их там.

-10

16. Все там же в настройках заходим в раздел По событию - События - Детектор движения. Включаем детекцию движения и в настройках зоны нажимаем Создание зоны

-11

17. Мышкой выделяете зону, в которой движение необходимо детектировать и нажимаете Завершить. Очень удобно, если вам, например, необходимо исключить детекцию движения рыбы в бассейнах, случайные движения за окном или наоборот только за окном или дверью и необходимо следить. Или вы всегда можете выделить изображение целиком.

-12

18. Рядом вы можете включить расписание детектирования. Если кто-то работает в определенное время, то при каждом его движении не очень хочется получать уведомление (оно будет настроено далее), поэтому этот период можно исключить.

-13

19. Галки с Обнаружение цели - Человек и Автомобиль можно убрать, использоваться не будут, но явно используют ресурс камеры для определения типа цели.

-14

Часть 2: Подключаем камеру к умному дому, настроиваем дашборд и автоматизацию

Шаг 1. Подключение к умному дому

1. Устанавливаем интеграцию ONVIF. Настройки - Интеграции - Добавить интеграцию - вписываем в поиск ONVIF - кликаем

-15

2. Галку искать автоматически снимаем и на следующей форме заполняем:

Название - удобное имя

Хост - записанный ранее IP

Порт - не меняем

Имя пользователя и Пароль - Предварительная настройка камеры п. 13

-16

Шаг 2. Добавляем на дашборд

1. Заходим в редактирование панели (добавили ее при подключении датчика температуры DS18B20, если пропустили рекомендую ознакомиться)

-17

2. Добавляем раздел

-18

3. Добавляем карточку

-19

4. Карточки - Picture entity

-20

5. Выбираем объект (любой, его текущее состояние будет отображать внизу изображения, например, датчик движения от камеры же) и в объекте камеры саму камеру

-21

6. Под камерой можно добавить и еще График истории, выбрав необходимое количество часов (по умолчанию 24) и в Объектах Cell Motion Detector

-22
-23
-24
-25

7. Честно говоря видно плохо (в одной из следующих статей дашборд будем пересобирать и воспользуемся действительно красивыми карточками, но это большая тема для отдельной статьи), а пока если кликнуть на название, то вспылевет читабельная история

-26
-27

Шаг 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'
-28

3. Необходимо создать папку /config/cam_snap/ - сам умный дом ее не создаст и как следствие сохранить кадр с камеры не сможет. Запускаем терминал (после запуска возникнет ошибка, ждем секунд 10 и повторяем, терминал откроется) и вводим команду:

mkdir -p /config/cam_snap
-29

4. Перезагружаем умный дом. Панель разработчика - Перезапустить - Дополнительные опции - Перезагрузить систему

-30
-31

Шаг 4. Добавлеяем отправку изображения с камеры в telegram по команде из чата

1. Создаем автоматизацию с отправкой изображения по запросу (как обычно Настройки - Автоматизация - Создать автоматизацию)

2. В блоке Когда добавляем триггер на Событие - Событие, условие следующее:

Тип события - telegram_command

Данные события - command: /photo

-32

3. В блоке тогда добавляем:

  • в разделе Блоки - Определить переменные - добавляем следующий код:
variables:
camera_vhod: /config/cam_snap/cam_vhod_{{ now().strftime('%Y%m%d_%H%M%S') }}.jpg
-33
-34
  • Действия - Камера - Сделать моментальный снимок - Цели MainStream камеры - Имя файла {{ camera_vhod }}
-35
-36
  • Блоки - Ожидать истечения времени - указываем 3 секунды
-37
-38
  • Действия - Telegram bot - Отправить фото - Файл {{ camera_vhod }}
-39
-40
  • Действия - Выполнить действие - Выполнить действие - ищем добавленную на Шаге 3 п. 2 команду cleanup_keep_last_10
-41
-42
  • проверяем, что все получилось также и в том же порядке
-43

4. Открываем чат в телеграме, отправляем сообщение /photo и получаем фото с камеры в ответ.

-44

Шаг 5. Добавлеяем отправку изображения с камеры в telegram при движении в кадре, вариант простой

1. Вариант простой, добавляем в предыдущую автоматизацию еще один триггер. Объект - Состояние - Объект Cell Motion Detection камеры - с "Не обнаружено" - на "Обнаружено" - в течение 1 секунды. Зачем указывать в течение 1 секунды - камера ничего не знает про движение, она сравнивает два соседних кадра и если на них есть отличия считает, что движение есть. В результате когда включается ночное видение на камере один кадр цветной, а следующий в оттенках серого, кадры отличаются сильно и без "в течение 1 секунды" будет приходить уведомление, а никто не хочет получать два ложных срабатывания в день.

-45
-46

2. Должно получиться так

-47

Шаг 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 }}. Не забываем выбрать в целях камеру.

-48
-49

3. Два раза отправляем по одному фото (в телеграмме есть отправка медиа фалов пачкой, но в интеграции в home assistant я такой функционал не нашел), также добавляем комментарии, например, "Сработал датчик движения" и "Сработал датчик движения 5с".

-50
-51

4. Результат должен быть такой:

-52

Шаг 7. Проверка работоспособности камеры

Объекта у камеры, который бы показывал ее доступность нет, поэтому настроить оповещение простым способом не получится, как это было с датчиком DS18B20. Но так как камера сетевая и имеет свой IP, можно настроить проверку камеры через другую интеграцию - PING. Сделаем в одной из следующих статей, когда добавим оповещение о том кто пришел/ушел на/с фермы.

Часть 3. Итог.

Что получилось?

  • Камера Hikvision подключена к умному дому
  • Фото по запросу /photo
  • Фото при обнаружении движения

Теперь ферма не только "разговаривает", но и "показывает"!

Часть 4. Анонс.

В следующей статье обязательно разделим чаты телеграм - один групповой чат с оповещениями, другие индивидуальные для отправки команд, настроим ответ в чат из которго поступил запрос, а также добавим меню, чтобы не пришлось запоминать команды и писать их вручную.

Хочется сделать, но не уверен, что войдет в следующую статью - для разных чатов сделать доступным ограниченный набор команд, для недоступности сделать одну автоматизацию на все устройства и в целом изучить вопрос, можно ли как-то указывать группу устройств, а не перечислять их все вручную.