Сегодня настраивал геолокацию на телефоне, я ее использую для того, чтобы в умном доме отслеживать нахождение людей, то есть находится они у меня в доме или куда-то вышли.
Есть несколько способов разных для того, чтобы оценить есть кто дома или нет, можно использовать Wi-Fi. Например если телефон человека подключен к Wi-Fi, то в принципе понятно, что он находится дома. Конечно бывают случаи когда на телефоне не включают Wi-Fi или забыли, или специально и тогда система конечно будет работать неправильно.
Очень важно оценить вообще сколько человек дома находится, кто конкретно и еще важнее, чтобы вообще понимать есть кто дома или нет, если вообще никого нет, то желательно конечно переводить весь умный дом в режим отсутствия людей.
Также есть варианты отслеживания например по Bluetooth или каким-то другим образом, например часто предлагается использовать NFC для определения кто дома есть, но это все во-первых очень сложно и также допустим Bluetooth и NFC могут не включать на телефоне соответственно это тоже будет не работать.
Поэтому я конечно пробовал разные варианты, например если пользователь находится дома и подключается к Wi-Fi, то есть вариант например система умного дома например Home Assistant может через своё приложение установленное на телефоне показывать, что пользователь появился в сети, также передаются разные параметры полезные с телефона такие как заряд батареи, подключен телефон к зарядке и еще некоторые параметры.
Например система умного дома OpenHAB, которую я тоже использую она тоже может передавать данные с телефона, но геолокацию конечно она определить может, но это нужно включать тоже в настройках, но и основная проблема всех приложений в том, что им нужно разрешать на телефоне работу в фоновом режиме, чтобы они могли запрашивать геолокацию постоянно и соответственно ее тогда смогут отправлять на сервера и в Home Assistant например там проблема, что оно у меня не работает через облако и соответственно отправляйть она конечно не сможет.
Я посмотрел несколько разных приложений для вариантов отслеживания нахождения людей дома, нашел неплохое решение называется Owntracker, но в принципе оно работает даже неплохо, настройки тоже у него в принципе не очень сложные, оно может передавать, это приложение, через mqtt запрос либо по сети вызывать какой-то сервер, какой-то адрес определенный и передавать туда свои параметры.
MQTT формат я не использую потому что тогда нужно чтобы брокер MQTT который установлен на сервер умного дома тоже смог выходить в интернет и быть доступен через интернет, поэтому либо можно разворачивать на каком-нибудь внешнем ресурсе, есть такие сервера где эта услуга оказывается, поднять свой MQTT брокер и через него передавать параметры в систему умного дома, на многих серверах таких есть ограничения они становятся платными, либо есть ограничения по количеству передаваемой информации, либо они просто недоступны.
Я использую вариант передачи через HTTP запрос, в принципе настройки в самом приложении несложные, указывается адрес веб-сервера, у меня это адрес сайта, на сайте есть специальная страничка которая может обрабатывать этот запрос, формат запроса json отправляется, дальше эта страница у меня сохраняет в специальную базу, в специальную таблицу в базе, все полученные сообщения, отправка в настройках сделана так что выполняется раз в 60 минут или если допустим телефон перемещается, то в приложении есть такой режим определения перемещения, и тогда оно начинает отправлять чаще у меня настроены раз в 10 секунд, например если едешь на машине, то конечно 60 секунд это большие интервалы и не очень удобно.
Также эта программа передает и некоторые другие параметры, но самое ценное, наверное, это заряд на телефоне, потому что можно отслеживать сколько осталось батареи и своевременно какой-то сценарий сделать оповещающий о том что нужно подзарядить, также в приложении есть возможность указывать на какой точности определения координат реагировать, она может определять через GSM станции, тогда точность довольно низкая либо через GPS, но тогда надо чтобы сигнал был достаточно сильным или телефон находился не где-то внутри квартиры или например внутри помещения, а все-таки ближе к окну иначе конечно телефон не сможет улавливать, и в программе делается настройка, что отправка будет выполняться только если точность выше определенной, например если точность 500 метров, обычно это GSM станции, то в этом случае не отправлять значения, если точность выше, то тогда значение будет отправляться на сервер умного дома.
В приложении можно указать какие-то определенные регионы, это локации, в радиусе определенном указывается если там находится телефон, то соответственно можно указать название, тогда через параметры также будет передаваться номер и название этой локации. Эту функцию я не использую потому что я в системе умного дома уже могу и сам определить, и тогда и не надо будет настраивать на каждом телефоне отдельно.
Я настраивал на новом телефоне недавно и там уже в версии Android 12 не позволяет автоматически запускать приложения и давать доступ к геолокации этому приложению, пока я попробовал в принципе все работает, но видимо нужно будет запускать приложение вручную, заходить в него, и тогда до следующей перезагрузки телефона в принципе все будет работать корректно, но несколько дней экспериментов пока показывают что все работает нормально.
После того как записалась информация в базу в формате json, у меня в системе умного дома сделан скрипт который периодически опрашивает эту базу и проверяет есть ли значения измененные, но есть несколько способов опроса значений, можно спрашивать через несколько секунд например, но тогда если это внешний хостинг, то он быстро определяет что идет много запросов с одного сервера, с одного ip-адреса и соответственно может замедлять работу, либо даже вообще полностью блокировать, у меня несколько раз такое было когда система умного дома теряла этот сайт, этот хостинг, и не могла обратиться по адресу, для того чтобы отправить или получить значение, особенно это заметно когда несколько устройств например по Wi-Fi подключенных это делают, то для внешнего сервера это выглядит как много устройств из одного IP адреса и поэтому этот сайт конечно начинает блокировать такие действия и для того чтобы обойти все-таки нужно сильно ограничивать количество запросов, поэтому либо я раньше запрашивал раз в минуту, что достаточно нормально если это делается для координат, но если например я какую-то команду передаю, то это конечно очень неудобно и очень долго.
Например у меня так работает через колонку Яндекса когда я а через неё, через систему умного дома Яндекса, даю команду, то у меня отправляется на этот сервер, значение записывается базу, и из этой базы я должен считывать конечно быстрее чем раз в минуту, есть такой формат обмена это называется long polling, такая технология позволяющая не сразу серверу отвечать, а с некоторой задержкой, в принципе у меня сайт поддерживает такой режим, используется это очень интересным способом, то есть сервер умного дома делает запрос на сервер, на сайт, там сайт не отвечает пока не придет значение сервер умного дома в этот момент ждет это сообщение, по таймаута у меня стоит 60 секунд примерно, обычно эта сессия разрывается и снова перезапрашивается, таким образом у меня всегда этот скрипт находится в режиме ожидания и когда приходит сообщение по геолокации от телефона мгновенно это значение попадает в систему умного дома и дальше я уже могу выполнять разные сценарии, например такая же технология используется в Telegram боте и тоже я сделал сначала так что у меня запрашивалась раз секунду, в принципе сам Telegram не ограничивает количество запросов и можно достаточно часто их делать, но есть функция которая тоже поддерживает long polling и можно также указав параметр ожидания, у меня указано около 90 секунд, я жду сообщение телеграм и если они не поступали, то я перезапрашиваю еще раз и эта технология очень сильно разгружает и саму систему и не надо постоянно делать запросы и работает очень быстро, то есть даже ожидание в одну секунду не требуется потому что сообщения приходят мгновенно.
Присоединяйтесь к Телеграм каналу про Умный дом 👍
Читайте новые статьи, слушайте подкасты, смотрите видео, изучайте новинки на сайте AlexSmartHome 📌