Пожалуй, один из самых распространенных вариантов автоматизаций, который применяется новичками в умнодомном строительстве – применение датчиков движения.
Как правило в качестве датчиков выступают сенсоры Xiaomi/Aqara и им подобные. Однако существуют иные, местами костыльные, варианты. Об одном из таких и пойдет речь.
В одной из статей на страницах inhomekit было описание решения по добавлению XiaoFang в HomeKit. Отличная камера, а с отличным открытым софтом так вдвойне.
Помимо того что камера эта стоит сущие копейки (хоть с Китая, хоть вот с русского склада без коронавируса) и поддается перепрошивке в Dafang hack, так эта камера еще может выступать в роли датчика движения. При том высокой точности и оперативности.
Попробуем продолжить инсталляцию Dafang настройкой сенсора движения.
Настройка Dafang.
После завершения установки подключаемся к камере по ssh
ssh root@ip.add.re.ss cd /system/sdcard/config
И настраиваем последовательно конфигурацию:
Файл подкачки.
mv swap.conf.dist swap.conf vi swap.conf
Устанавливаем параметры:
SWAP=true SWAPPATH="/system/sdcard/swapfile" SWAPSIZE=256
Детекция движения.
mv motion.conf.dist motion.conf vi motion.conf
Меняем параметры:
motion_indicator_color=4 motion_timeout=31 motion_detection=on motion_tracking=off motion_trigger_led=true publish_mqtt_message=true
Настройка общения с MQTT брокером.
mv mqtt.conf.dist mqtt.conf vi mqtt.conf
Устанавливаем параметры:
USER= PASS= HOST=ip.add.re.ss PORT=1883 LOCATION="cam" DEVICE_NAME="room"
USER – логин для доступа к вашему MQTT брокеру (пустой если вы не используете пароль на MQTT)
PASS – пароль для доступа к вашему MQTT брокеру (пустой если вы не используете пароль на MQTT)
HOST – IP адресс вашего MQTT брокера
PORT – порт, по умолчанию 1883
LOCATION – имя локации, я рекомендую cam/camera/defang или какой то подобный
DEVICE_NAME – имя камеры
Перезапускаем.
reboot
После перезагрузки вы должны лицезреть в видеопотоке с камеры синюю точку в верхнем правом углу – признак наличия движения в кадре.
Добро пожаловать в дом.
Прокинем в homebridge данные с датчика движения. Для этого нам понадобиться плагин homebridge-mqttthing (рекомендую установку производить через интерфейс homebridge, дабы обезопасить себя от проблем с зависимостями и переменными окружения). После установки плагина необходимо произвести конфигурацию соответствующего аксесуара
{ "accessory": "mqttthing", "type": "motionSensor", "name": "mainroom cam motion", "url": "mqtt://ip.add.re.ss", "topics": { "getMotionDetected": "cam/room/motion" }, "onValue": "ON", "offValue": "OFF" }
Перезагружаем HomeBridge. И обнаруживаем в доме новый датчик, который истошно сообщает о движении в кадре.
И это все?
Конечно же нет. Настроить «сяоми камеру – кубик» это вариант простой, даже банальный. Но ведь не зря на обложке статьи нарисованы костыли. Без них никак нельзя.
Существует множество камер, возможно уже в вашем распоряжении, которые так же могут определять движение в кадре, но ни о каком MQTT они знать не знают. Однако, могут отправлять фото, например на FTP или вызывать внешний URL адрес. Попробуем такие камеры начать использовать.
Стартуем.
Начнем, пожалуй с самого простого – когда на камере есть возможность поставить вызов определенного URL при обнаружении движения. Я буду показывать на примере камере Trendnet TV-IP110.
В качестве промежуточного звена и оркестратора будет использоваться node-red, самое лучшее решение для создания автоматизаций в умном доме. ИМХО.
[{"id":"469873ab.41ad9c","type":"http in","z":"169ec06b.3e0e","name":"","url":"/moveportable","method":"get","upload":false,"swaggerDoc":"","x":110,"y":1480,"wires":[["2d384b77.48c884","3fc013e8.e084bc","151ad83.1d45728"]]},{"id":"2d384b77.48c884","type":"template","z":"169ec06b.3e0e","name":"page","field":"payload","fieldType":"msg","format":"handlebars","syntax":"mustache","template":"<html>\n <head></head>\n <body>\n <h1>Hello World!</h1>\n </body>\n</html>","x":350,"y":1480,"wires":[["19d326e5.cc8499"]]},{"id":"19d326e5.cc8499","type":"http response","z":"169ec06b.3e0e","name":"","statusCode":"","headers":{},"x":470,"y":1480,"wires":[]},{"id":"3fc013e8.e084bc","type":"mqtt out","z":"169ec06b.3e0e","name":"","topic":"cam/portable","qos":"","retain":"","broker":"34443b7c.063704","x":380,"y":1560,"wires":[]},{"id":"abe1f063.25523","type":"mqtt out","z":"169ec06b.3e0e","name":"","topic":"cam/portable/motion/detected","qos":"","retain":"","broker":"34443b7c.063704","x":590,"y":1600,"wires":[]},{"id":"151ad83.1d45728","type":"change","z":"169ec06b.3e0e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"YES","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":315,"y":1600,"wires":[["abe1f063.25523","479556fd.140c98"]],"l":false},{"id":"479556fd.140c98","type":"delay","z":"169ec06b.3e0e","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":375,"y":1640,"wires":[["b6d79a66.aefc18"]],"l":false},{"id":"b6d79a66.aefc18","type":"change","z":"169ec06b.3e0e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"NO","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":415,"y":1640,"wires":[["abe1f063.25523"]],"l":false},{"id":"34443b7c.063704","type":"mqtt-broker","z":"","name":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
Не забудьте поменять на MQTT нодах данные для подключения к MQTT брокеру.
А теперь в дом.
На самом деле, конечно же, можно использовать сам node-red как шлюз умного дома, но иногда (об этом в будущих статьях) удобнее агрегировать устройства в HomeBridge.
Переходим к настройке нового аксесуара mqttthing.
{ "accessory": "mqttthing", "type": "motionSensor", "name": "portable cam motion", "url": "mqtt://localhost", "topics": { "getMotionDetected": "cam/portable/motion/detected" }, "onValue": "YES", "offValue": "NO" }
Сохраняем, перезагружаем.
Видим появление нового датчика в доме, теперь осталось наладить поставку данных от самой камеры.
Я не стану показывать все меню и последовательность действий в интерфейсе конкретной камеры, это не имеет смысла. Суть в том, что, если в вашей камере есть возможность вызова внешнего сервиса путем обращения к нему через http – вот в таком разделе необходимо прописать ваши настройки.
Сохраняем, применяем. Тестируем (если есть возможность — кнопкой в интерфейсе, если нет – время помахать на камеру).
Все, теперь камера будет детектить движение и направлять запрос на ваш http сервер поднятый на nodered. Который в свою очередь, будет транслировать это событие в MQTT. Если в вашем распоряжении нет node-red, можно обойтись одним HB с плагином webhook.
А если нет в камере HTTP клиента?
Все, вам не помочь. До свидания. Лайки, подписка, донаты, колокольчик…
Есть варианты. Один из таковых — FTP. Существует огромное количество камер с поддержкой отправки снэпшотов на внешний FTP ресурс. Этим то мы и воспользуемся.
Начнем с повторения и настройки flow в node-red.
[{"id":"92946f95.772b","type":"mqtt out","z":"169ec06b.3e0e","name":"","topic":"cam/bedroom/motion/detected","qos":"","retain":"","broker":"34443b7c.063704","x":610,"y":2180,"wires":[]},{"id":"290c344b.1dde1c","type":"change","z":"169ec06b.3e0e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"YES","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":315,"y":2180,"wires":[["92946f95.772b","9909ec45.8acac"]],"l":false},{"id":"9909ec45.8acac","type":"delay","z":"169ec06b.3e0e","name":"","pauseType":"delay","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":375,"y":2220,"wires":[["a424a828.9e2b58"]],"l":false},{"id":"a424a828.9e2b58","type":"change","z":"169ec06b.3e0e","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"NO","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":435,"y":2220,"wires":[["92946f95.772b"]],"l":false},{"id":"197d2d9.148abd2","type":"ftp-server","z":"169ec06b.3e0e","name":"","port":"30001","x":80,"y":2120,"wires":[["290c344b.1dde1c"]]},{"id":"34443b7c.063704","type":"mqtt-broker","z":"","name":"","broker":"127.0.0.1","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","closeTopic":"","closeQos":"0","closePayload":"","willTopic":"","willQos":"0","willPayload":""}]
В конфиге FTP сервера (palette node-red-contrib-ftp-server) устанавливается порт и логин/пароль для будущего подключения. В ноде MQTT задается топик, в который будет отправлено сообщение.
Я не то чтобы принципиально не показываю вариант в котором node-red будет шлюзом homekit. Я просто демонстрирую одинаковость решений для множества камер и вариантов интеграции (mqtt dafang over homebridge, http/ftp over node-red over homebridge). К тому же в таком паравозе есть определенные плюсы.
Далее настраиваем камеру. На этот раз пример с Trendnet TV-IP651W.
И снова в дом.
Конфиг homebridge будет до боли знакомый с настройки камеры с поддержкой http уведомлений.
{ "accessory": "mqttthing", "type": "motionSensor", "name": "bedroom cam", "url": "mqtt://localhost", "topics": { "getMotionDetected": "cam/bedroom/motion/detected" }, "onValue": "YES", "offValue": "NO" }
С этим вариантом все.
Что же осталось?
А остался самый популярный вариант — электронная почта.
Но увы, готовым примером с вами я не могу поделиться. Его пока что нет. Есть идеи как реализовать костыли разной степени, но все они настолько костыльны что к показу уважаемой публике не рекомендованы.
Как только вариант появится и не будет вызывать глазных кровотечений — тогда конечно же я вам о нем расскажу.
Время GIF-ок.
Заключение.
Наверное первый вопрос который витает в воздухе — зачем это все. Ведь есть дешевая xiaomi ip камера кубик, есть расчитанные и заточенные под это датчики движения вроде тех же Xiaomi/Aqara. Но так же существует наследие в виде таких старых IP камер, которые верно служат, полностью устраивают своего владельца и могут раскрыться в новой роли. Так почему бы и нет.
К тому же есть рынок Б/У устройств. На том же Avito представлены и доступны с доставкой IP камеры за скромные деньги.
Все это и желание пробовать подстегивает поиск таких, пусть и костыльных, решений.
О многих таких идеях и не только часто идут споры и обсуждения в нашем telegram канале https://t.me/inhomekit_chat. Заходите.