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

в 4:24, , рубрики: gps, автоматизация рутины, ворота, геолокация, умный дом

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

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

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

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

Гики (типа меня) к этой автоматике начинают прикручивать всяческую автоматику управления: начиная от 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 в этот файл надо добавить следующие строки:

  <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

Источник

* - обязательные к заполнению поля


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js