Реализация видеодомофона на базе MajorDoMo, Apple HomeKit, видеокамеры и электромеханического замка.
Дано:
Имею на даче на калитке аналоговый видеодомофон, который заведен на ТВ-тюнер и аналоговый сигнал преобразуется в rtsp поток.
Изображение анализирую через ZoneMinder и при движении опредляю, что в домофон звонят, т.к., когда в него не звонят - сигнала нет, чёрный экран. Тоесть есть картинка, значит звонят -> можно отправлять уведомление в систему.
Так же, имею электромеханический замок на калитке, с прикрученной к нему ESP8266.
Чтобы всё это завести в Homekit пришлось сделать следующее:
Устанавливаем в Homebridge плагины Homebridge Camera FFmpeg и Homebridge Mqttthing (проще всего делать через Homebridge Config UI X)
Далее, добавляем камеру домофона по rstp, указывая так же настройки для mqtt. В конфиге homebridge в разделе platforms:
{
"name": "Camera FFmpeg",
"porthttp": 8089,
"mqtt": "127.0.0.1",
"topic": "homebridge",
"usermqtt": "mqttlogin",
"passmqtt": "mqttpassword",
"cameras": [
{
"name": "Domofon",
"motion": false,
"doorbell": true,
"switches": false,
"videoConfig": {
"source": "-i rtsp://localhost:8091/live",
"stillImageSource": "-i http://localhost/zm/cgi-bin/nph-zms?mode=single&monitor=7&scale=100",
"maxWidth": 720,
"maxHeight": 482,
"maxFPS": 30,
"maxBitrate": 1024,
"forceMax": false,
"vcodec": "libx264",
"encoderOptions": "-preset ultrafast -vf mpdecimate -vsync vfr",
"audio": true,
"debug": false
}
}
],
"platform": "Camera-ffmpeg"
в разделе accessories добавляем кнопку открывания замка через Mqttthing:
{
"type": "lockMechanism",
"name": "Открыть домофон",
"username": "mqttlogin",
"password": "mqttpassword",
"topics": {
"getOnline": "homebridge/domofon/online",
"getLockCurrentState": "homebridge/domofon/state",
"getLockTargetState": "homebridge/domofon/status",
"setLockTargetState": "homebridge/domofon/status"
},
"startPub": [
{
"topic": "homebridge/domofon/state",
"message": "S"
}
],
"accessory": "mqttthing"
}
Перезапускаем homebridge.
В MajorDoMo при обнаружении звонка в домофон вызываем топик mqtt:
callAPI('/api/module/mqtt','GET',array('publish'=>'homebridge/doorbell','msg'=>'Domofon'));
Теперь звонок в домофон прилетит push уведомлением на телефон.
в модуле MQTT привязываем топик homebridge/domofon/state к Геркону открытия калитки, к свойству status. Replace list указываем: U=0, S=1
топик homebridge/domofon/status привязываем к методу, который будет открывать замок и возвращать статус кнопки к "закрытому":
Открытие калитки у меня осуществляется свойством command объекта kalitka.
Соответственно, в методе следующий код
if (isset($params['VALUE']) && $params['VALUE']=='U' && !timeOutExists('domofon_lock_timer')) {
sg('kalitka.command',1);
setTimeout('domofon_lock_timer', "callAPI('/api/module/mqtt','GET',array('publish'=>'homebridge/domofon/status','msg'=>'S'));sg('kalitka.command',0);", 10);
}
В итоге получаем то, что на видео и наслаждаемся :)
Если статья оказалась Вам интересна, или полезна, не забывайте ставить лайк :)
Вопросы в комментариях приветствуются
P.S.
А ещё, неожиданно, это оказался юбилейный, 500-й блог в коннекте. С чем всех торжественно и поздравляю :-)
Королёв, Россия
На форуме: London