Для меня "умный дом" - это когда автоматика за тебя делает всяческую "рутину" и делает это без моего участия.
В загородной жизни аспектов, подлежащих автоматизации, гораздо больше, чем при городской. Один из таких объектов автоматизации - ворота для въезда на участок.
Понятно, что любой уважающий себя домовладелец поставит на них автоматику, чтобы возвращаясь домой не надо было выходить из машины, чтобы их открыть, а потом закрыть. Радиоуправление - все супер.
Но это же скучно.
Гики (типа меня) к этой автоматике начинают прикручивать всяческую автоматику управления: начиная от GSM-модулей (чтобы на номер ворот можно было позвонить и "своему" ворота откроются) до всяческих систем, позволяющих голосом попросить Siri, Алису или Google (часы, телефоны, автомагнитолы и т.п.).
Но и это тоже как-то "неаккуратненько". Сильно хочется, чтобы "оно само".
Первоначально мысль была выдергивать изображения с камеры, которая контролирует подъезд к участку, дальше распознавание образов (что это машина) и гос.номера авто. Но как-то времени не было заняться этим, да и выглядело, что будут определенные сложности (грязные номера и т.п.).
И, наверное, хорошо что руки до этого варианта так и не дошли, а было сделано устройство GNSS для автомобиля.
"Бонусная функция" этого устройства - автомобильный трекер (реализована поддержка протокола Wialon IPS). Координаты можно отдавать во внешний мир куда угодно. Девайс пушит данные раз в 10 секунд.
Сначала я использовал эту функцию с бесплатным аккаунтом на сервисе Ruhavik - для проверки сервис подходит отлично. Функциональности обычного трекера - вполне достаточно.
Но тут мне на глаза попались несколько статей @tananaev про различные протоколы GPS-трекеров и во всех статьях была ссылка на его Open Source проект traccar.
После этого уже в голове оформился следующий порядок действий:
-
На имеющемся proxmox поднять контейнер с traccar.
-
Выставить наружу необходимый порт для работы трекера (внешний айпишник у меня есть).
-
Настроить GPS-трекер на передачу геолокации на свой сервер.
-
Настроить систему оповещений о событиях (особенно интересовал "вход в геозону") для начала в телеграм.
-
"Научить" traccar отдавать свои события в mqtt.
-
С помощью имеющегося node-red получать событие "Monjaro вошел в геозону "Дом"" и по этому событию отправить в умный дом команду "открыть ворота".
Дальше все оказалось достаточно просто.
Первые три пункта описывать не буду - там очевидные вещи (установка traccar описана на сайте проекта, а как настраивать роутер для проброса портов - уже все знают и/или найдут с помощью любимого поисковика, инструкция по настройке трекера есть, например, тут).
А вот пункты, начиная с четвертого - опишу:
Конфигурация traccar находится в файле /opt/traccar/conf/traccar.xml (буду приводить для варианта установки на ubuntu).
Для установки системы оповещений в telegram в этот файл надо добавить следующие строки:
<entry key='notificator.types'>telegram</entry>
<entry key='notificator.telegram.key'>YourChatBotAPIkey</entry>
<entry key='notificator.telegram.chatId'>YourChatID</entry>
<entry key='notificator.telegram.sendLocation'>true</entry>
Если все сделано правильно, то в телеграм уже начнут приходить сообщения (не забудьте поставить свой ключ для телеграм-бота и свой идентификатор чата. Предварительно в веб-интерфейсе сервиса еще надо настроить типы событий, о которых надо оповещать. В моем случае наиболее интересен "вход в геозону".
Чтобы события транслировались в MQTT в тот же конфиг-файл надо добавить следующее:
<entry key='forward.enable'>true</entry>
<entry key='forward.type'>mqtt</entry>
<entry key='event.forward.type'>mqtt</entry>
<entry key='event.forward.url'>mqtt://IP-server:1883</entry>
<entry key='event.forward.topic'>traccar/events</entry>
Параметры тут очевидные: предпоследняя строчка задает адрес mqtt-сервера, а последняя - топик, где будут публиковаться сообщения.
Собственно, после этого в MQTT будут прилетать сообщения следующего вида
{"event":{"id":139,"attributes":{},"deviceId":1,"type":"geofenceEnter","eventTime":"2024-10-08T14:28:13.000+00:00","positionId":155,"geofenceId":1,"maintenanceId":0},"position":{"id":155,"attributes":{"batteryLevel":38.0,"distance":302.7380494307562,"totalDistance":944.8448214274459,"motion":false},"deviceId":1,"protocol":"osmand","serverTime":"2024-10-08T14:28:13.302+00:00","deviceTime":"2024-10-08T14:28:13.000+00:00","fixTime":"2024-10-08T14:28:13.000+00:00","outdated":false,"valid":true,"latitude":хх.хххххх,"longitude":yy.yyyyyy,"altitude":216.8000030517578,"speed":0.0,"course":0.0,"address":null,"accuracy":45.599998474121094,"network":null,"geofenceIds":[1]},"device":{"id":1,"attributes":{},"groupId":0,"calendarId":0,"name":"Monjaro","uniqueId":"zzzzzzzzzzzzzzz","status":"online","lastUpdate":"2024-10-08T14:28:13.302+00:00","positionId":119,"phone":null,"model":null,"contact":null,"category":null,"disabled":false,"expirationTime":null},"geofence":{"id":1,"attributes":{},"calendarId":0,"name":"Дом","description":null,"area":"LINESTRING (координаты-полигона-описывающего-геозону)"}}
Собственно, дальше уже дело техники - накидать кубиков в nodered:
Стоит еще рассказать про формирование геозоны "Дом":
Подъезд к участку у меня возможен с двух сторон. Хотелось сделать так, чтобы ворота начинали открываться заранее (чтобы не ждать, стоя перед ними, когда они еще в движении), но и не слишком рано, чтобы видеть начало их движения.
Для того, чтобы эти "хотелки" сработали - геозону нарисовал следующим образом:
Поскольку по подъездной дороге едешь не слишком быстро (20 км/ч максимум), то периодичности отправки данных трекером (напомню, 1 раз в 10 секунд), оказывается вполне достаточно, чтобы ворота успели открыться, когда к ним подъезжаешь.
Вот такая "магия".
Теперь ворота открываются "сами". При этом не важно, день/ночь, чистые ли номера и т.п.
P.S. Теперь еще надо придумать, как сделать так, чтобы ворота сами бы открывались, когда надо выехать с участка ;)
P.P.S. Естественно, для такой автоматизации не обязательно использовать аппаратный трекер - вполне подойдет и софтовый (ПО на телефон и/или автомагнитолу/планшет и т.п.)
Автор: avstepanov