Есть у меня несколько камер этого OEM вендора
Чем они хороши?
- Цена, в первую очередь. Я покупал что-то в районе 2500р за 5М камеру с ИК и LED подсветкой
- Неплохое качество картинки
- Есть возможность зашить открытую прошивку с линуксом и ssh консолью (не делал)
Чем плохи?
- NVR вендор сомнительной безопасности (были прецеденты)
- Немного закрытый софт
Что я реализовал при работе с HomeAssistant
- Получение видеопотока, ну тут все из коробки
- Получение фотки с камеры не из видеопотока а средствами самой камеры
- Изменение настроек камеры из HA
- Получение событий из камеры по приетарному протоколу
На 1 пункте не вижу смысла останавливаться
Сейчас распишу 2 и 3, а потом 4
Итак, что нам понадобится
- Создать пользователя в камере, дать ему базовые права
- HomeAssistant
- Желательно поставить vscode аддон - для удобного редактирования файлов
- HACS расширение - для установки расширения
Шаги
- Устанавливаем hacs расширение pyscript + добавляем его в интеграции - для того, чтобы можно было писать свои скрипты на python
- в файл
secrets.yamlдобавляем креды от камеры
camera_user: assistant
camera_password: redacted
- создаем каталог pyscript в корневом каталоге homeassistant
- внутри создаем файл
requirements.txtсо следующим содержимым
python-dvr
- создаем файл
shell_scripts/camera_take_snapshot.pyсо следующим содержимым
import sys
from dvrip import DVRIPCam
import yaml
with open("secrets.yaml", "r", encoding="utf-8") as f:
config = yaml.safe_load(f)
target=sys.argv[1]
filename=sys.argv[2]
cam = DVRIPCam(target, user=config["camera_user"], password=config["camera_password"])
cam.login()
with open(filename, "wb") as f:
f.write(cam.snapshot())
cam.close()
- создаем файл
pyscript/set_camera_dn_mode.pyсо следующим содержимым
@service
def set_camera_dn_mode(target=None, mode=None):
log.info(f"set_camera_dn_mode: got target {target} mode {mode}")
from dvrip import DVRIPCam
mport yaml
with open("../secrets.yaml", "r", encoding="utf-8") as f:
config = yaml.safe_load(f)
cam = DVRIPCam(target, user=config["camera_user"], password=config["camera_password"])
if cam.login():
log.info("Success! Connected to " + target)
else:
log.warning("set_camera_dn_mode: Could not connect to "+target)
cam.set_info("Camera.Param.[0]", { "DayNightColor" : "0x0000000" + str(mode)})
cam.close()
- Добавляем
shell_command
camera_take_snapshot: "python3 shell_scripts/camera_take_snapshot.py {{target}} {{filename}}"
- Не помню уже, но возможно, что перезагружаем HomeAssistant
Должно получиться так
- Вызываем сервис создания фотки
data:
target: 10.50.0.12
filename: www/test.jpeg
action: shell_command.camera_take_snapshot
- Открываем картинку в браузере https://homeassistant.domain.com/local/test.jpeg
Вызываем действие смены режима день/ночь
data:
target: 10.50.0.12
mode: 4
action: pyscript.set_camera_dn_mode
Mode соответствует порядковому номеру в настройках камеры
Замечания
- Изначально делал скачивание картинок в pyscript, но там нет доступа к ФС, в итоге пришлось сделать обертку над shell командой и вызывать отдельным процессом
- Поскольку, это модуль внутри HA, то модули из
pyscript/requirements.txtдоступны из в консоли - Я еще пробовал заводить выпадающий список для управления из UI, но забил т.к. у меня из автоматизации вызывается
- Конкретно режим день/ночь у меня используется т.к. камеры имеют и ИК и белую подсветку, я сделал так, что при снятии сигнализации с охраны включается режим с ИК подсветкой т.к. вечером не очень приятно, когда ты подходишь к камере, а она начинает светить на тебя встроенным прожектором, а когда включается охрана камеры переводятся в режим с прожектором




