Для реализации данного проекта использовал ESP Easy Mega: ESP100 + MQTT broker + Zoneminder. Камера используется IPC NT98566. Задача стояла сделать камеру «умной», чтобы отслеживать и записывать движения и самое главное хранить это всё на своём сервере.
Как работает MQTT broker можно почитать здесь https://habr.com/ru/companies/advantech/articles/452904
Установка занимает пару минут :
sudo apt-get install mosquitto-clients
файл настроек /etc/mosquitto/conf.d/default.conf :
allow_anonymous false
password_file /etc/mosquitto/passwd
listener 1883 0.0.0.0
protocol mqtt
mosquitto_passwd -c /etc/mosquitto/passwd
Контроллер с прошивкой ESP Easy Mega: ESP100, для отлавливания движения PIR датчик, время событий можно уменьшить заменой резистора, информации и схем в интернете достаточно.
По PIR датчику настроены Rules для отправки сообщений брокеру :
on MQTT#Connected do
Publish homeassistant/in,idx:100|name:%sysname%|time:%systime%|Temperature:[SI-Sensor#Temperature]|Humidity:[SI-Sensor#Humidity]|PIR:[PIR#State]
endon
on PIR#State do
Publish homeassistant/in,idx:100|name:%sysname%|time:%systime%|Temperature:[SI-Sensor#Temperature]|Humidity:[SI-Sensor#Humidity]|PIR:[PIR#State]
endif
endon
по реагированию датчика с котроллера на сервер отправляется сообщение, далее у меня запущен сервис который эти сообщения отлавливает
/etc/systemd/system/mosquitto_esp100.service
[Unit]
Description=mosquitto_esp100.service
After=multi-user.target network.target
[Service]
User=envoyid
ExecStart=/script/Telegram_bot/IPcamera/mosquitto.sh homeassistant/in
[Install]
WantedBy=multi-user.target
………………….
весь скрипт обработки выводить не буду, только самое главное :
if [[ $PIR_status == 1 ]]; then
/script/ZoneMinder/motion_expect.sh 1 on «Movement detected on floor» «The recording of the traffic protocol begins at the time set in the settings»;
touch /script/Telegram_bot/IPcamera/status/motion;
elif [[ $PIR_status == 0 ]]; then rm -f /script/Telegram_bot/IPcamera/status/motion;
fi
/script/ZoneMinder/motion_expect.sh это скрипт который работает с zoneminder и на порт 6802 подаёт событие в какой момент начинать запись и когда её остановить, с помощью такого подхода, ложных событий нет и может просматривать в списке только самые важные.
так же по событию с датчика создаётся статусный файл, который уже другой скрипт отлавливает его чтобы сделать нужную обработку.
В данном случае у меня настроено получение снимка с камеры командой :
http://<IP камеры>/webcapture.jpg?command=snap&channel=0&user=<user>&password=<password>
сравнение изображений, чтобы они не повторялись и отправка в телеграмм.