Полная автоматизация ворот

Для меня «умный дом» — это когда автоматика за тебя делает всяческую «рутину» и делает это без моего участия.

В загородной жизни аспектов, подлежащих автоматизации, гораздо больше, чем при городской. Один из таких объектов автоматизации — ворота для въезда на участок.

Понятно, что любой уважающий себя домовладелец поставит на них автоматику, чтобы возвращаясь домой не надо было выходить из машины, чтобы их открыть, а потом закрыть. Радиоуправление — все супер.

Но это же скучно.

Гики (типа меня) к этой автоматике начинают прикручивать всяческую автоматику управления: начиная от GSM-модулей (чтобы на номер ворот можно было позвонить и «своему» ворота откроются) до всяческих систем, позволяющих голосом попросить Siri, Алису или Google (часы, телефоны, автомагнитолы и т.п.).

Но и это тоже как-то «неаккуратненько». Сильно хочется, чтобы «оно само».

Первоначально мысль была выдергивать изображения с камеры, которая контролирует подъезд к участку, дальше распознавание образов (что это машина) и гос.номера авто. Но как-то времени не было заняться этим, да и выглядело, что будут определенные сложности (грязные номера и т.п.).

И, наверное, хорошо что руки до этого варианта так и не дошли, а было сделано устройство GNSS для автомобиля.

«Бонусная функция» этого устройства — автомобильный трекер (реализована поддержка протокола Wialon IPS). Координаты можно отдавать во внешний мир куда угодно. Девайс пушит данные раз в 10 секунд.

Сначала я использовал эту функцию с бесплатным аккаунтом на сервисе Ruhavik — для проверки сервис подходит отлично. Функциональности обычного трекера — вполне достаточно.

Но тут мне на глаза попались несколько статей @tananaev про различные протоколы GPS-трекеров и во всех статьях была ссылка на его Open Source проект traccar.

После этого уже в голове оформился следующий порядок действий:

  1. На имеющемся proxmox поднять контейнер с traccar.

  2. Выставить наружу необходимый порт для работы трекера (внешний айпишник у меня есть).

  3. Настроить GPS-трекер на передачу геолокации на свой сервер.

  4. Настроить систему оповещений о событиях (особенно интересовал «вход в геозону») для начала в телеграм.

  5. «Научить» traccar отдавать свои события в mqtt.

  6. С помощью имеющегося node-red получать событие «Monjaro вошел в геозону «Дом» и по этому событию отправить в умный дом команду «открыть ворота».

Дальше все оказалось достаточно просто.

Первые три пункта описывать не буду — там очевидные вещи (установка traccar описана на сайте проекта, а как настраивать роутер для проброса портов — уже все знают и/или найдут с помощью любимого поисковика, инструкция по настройке трекера есть, например, тут).

А вот пункты, начиная с четвертого — опишу:

Конфигурация traccar находится в файле /opt/traccar/conf/traccar.xml (буду приводить для варианта установки на ubuntu).

Для установки системы оповещений в telegram в этот файл надо добавить следующие строки:

  telegram
  YourChatBotAPIkey
  YourChatID
  true

Если все сделано правильно, то в телеграм уже начнут приходить сообщения (не забудьте поставить свой ключ для телеграм-бота и свой идентификатор чата. Предварительно в веб-интерфейсе сервиса еще надо настроить типы событий, о которых надо оповещать. В моем случае наиболее интересен «вход в геозону».

Чтобы события транслировались в MQTT в тот же конфиг-файл надо добавить следующее:

  true
  mqtt
  mqtt
  mqtt://IP-server:1883
  traccar/events

Параметры тут очевидные: предпоследняя строчка задает адрес 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. Естественно, для такой автоматизации не обязательно использовать аппаратный трекер — вполне подойдет и софтовый (ПО на телефон и/или автомагнитолу/планшет и т.п.)

© Habrahabr.ru