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

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

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

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

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

Комментарии (16)


  1. edyapd
    14.10.2024 04:59

    Можно отслеживать появление IP-адреса в домашней сети.

    ESP8266 установленная в автомобиль. Варианты во дворе:

    1. Машина заглушена, ESP выключена. Ворота закрыты.

    2. Машина заведена (на прогреве), водитель не в машине (по датчику на сиденье). ESP включена и IP-адрес зарегистрирован в сети. Ворота закрыты.

    3. Машина заведена, водитель в машине. Ворота начинают открываться.

    При приближении извне, к воротам, кстати, тоже будет работать, так как будут соблюдаться те же условия. Осталось только продумать когда закрывать ворота.


    1. avstepanov Автор
      14.10.2024 04:59

      С закрытием ворот все вообще просто: штатно у автоматики есть датчики (стоят в створе ворот). Просто настраивается автозакрытие после пересечения луча.


      1. edyapd
        14.10.2024 04:59

        Как быть, если заехал домой кого-то забрать-высадить, вообще не пересекая линию ворот?

        Заехал во двор выгрузил-загрузил что-либо, машину не глушил. Надо ли на эти пару минут закрывать ворота?

        Думаю таких ситуаций ещё можно несколько штук придумать. Поэтому и написал про "подумать".


        1. Kill_Voice
          14.10.2024 04:59

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


          1. avstepanov Автор
            14.10.2024 04:59

            Сейчас с погрешностями все хорошо. В статье есть ссылка на устройство, которое я использую. С "встроенной" антенной точность 2-4 метра. С "выносной" - менее 1 метра. Поэтому можно геозоны можно выстраивать очень точно (как у меня в статье).
            Глушилки - да, это проблема, но не в моей локации (к счастью).


  1. Yuriy_krd
    14.10.2024 04:59

    по поводу открытия ворот - можно поставить еще пару датчиков (Как в створе ворот) где-нибудь на дорожке. Судя по фотке - там длинная подъездная дорожка и можно поставить недалеко от ворот и прям в самом контроллере ворот запрограммировать. Ну и исключить случайную сработку, выставив время перекрытия датчика и срабатывания подольше.


  1. randomsimplenumber
    14.10.2024 04:59

    Гики любят всё усложнять ;) Для гаража, ворота в котором открываются 2 раза в день для 1 машины, обычная радиокнопка все решает.


  1. badangel
    14.10.2024 04:59

    Что-то похожее реализовывал для выполнения автоматических действий на устройстве. ESP в машине с одной стороны, с другой условный сервер. ESP при подаче питания ищет "свою" точку доступа, при успешном подключении отправляет webhook с payload на сервер, если не 200 - повторяем через какой-нибудь интервал, ну и далее делаем что-нибудь на сервере. Можно дополнительно RSSI чекать перед отправкой webhook, что мы не очень далеко.


    1. avstepanov Автор
      14.10.2024 04:59

      Тут уже сложно становится. В машине своя WiFi-сетка.. на участке - своя (в районе въезда есть точка доступа, чтобы на участке сетка тоже была). Если только не воткнуть еще один девайс на есп, который будет искать "домашнюю" сетку.. но тут уже снова надо искать ответ на вопрос: а с какой стороны ворот находится авто? В общем, думаю пока :)


      1. badangel
        14.10.2024 04:59

        Подкинуть датчик давления на место парковки :)


        1. avstepanov Автор
          14.10.2024 04:59

          Тоже вариант. Сложновато (особенно в условиях зимы и т.п.), а вот когда построю навес для авто - сверху датчик точно можно воткнуть: выехал из под навеса - открываем ворота. Спасибо за идею :)


          1. GoldGoblin
            14.10.2024 04:59

            Лучше камеру. (Да. Я люблю устройства двойного назначения)


  1. Vermut666
    14.10.2024 04:59

    В свежем HomeAssistant есть Proximity Sensor, который показывает сразу дистанцию и направление (к дому, из дома). Второй вариант предложили: зная точку, запрашивать в Waze время прибытия.


  1. Klenov_s
    14.10.2024 04:59

    Открытие ворот изнутри можно реализовать тупо по приближению авто к воротам. Например, пересечение луча. Я думаю, что выпускать можно все автомобили, которые хотят выехать, без привязки свой/чужой.


  1. SpeleoAstronom
    14.10.2024 04:59

    А чем может быть нехороша идея связать машину с воротами по ESP-NOW (https://habr.com/ru/articles/502260/)? Въехал в зону связи - "отождествился" - ворота открылись. Или там есть какие-то грабли?


  1. Wizard_of_light
    14.10.2024 04:59

    Как-то заморочено, ИМХО напрашивается простой автоответчик "свой-чужой" по блютусу/вайфаю, тупо когда автомобиль в зону связи въезжает.

    UPD Кстати, хакер с солонкой сразу предлагает вариант "один отвлекает подъехавшего хозяина, второй проскакивает в автоматически открывшиеся ворота".