Pull to refresh

Онлайн-мониторинг транспорта своими руками

Reading time4 min
Views95K

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

Небольшая предыстория
Дело в том, что ребята с нашего проекта собрались в автопробег по крупным городам России, в связи с этим мне в голову пришла идея: было бы здорово, если бы на сайте всегда можно было посмотреть текущее местоположение экспедиции.
Начались поиски по этой теме, анализ существующих решений.
Пришел к следующей схеме: необходимо устройство, которое будет через определенный промежуток времени отсылать информацию о текущем местоположении через GPRS куда-то в интернет, а в дальнейшем у нас на сайте будет показываться на карте линия (трек) из всех точек.

Выбор устройства
Начался поиск подходящих устройств. Ассортимент довольно широкий: начиная маленькими персональными трекерами и заканчивая устройствами, которые устанавливаются непосредственно внутрь автомобиля. В основном все устройства китайские, но встречались даже иногда и отечественные :)
В конечном итоге остановился на модели Astron GT-102: компактный, самый дешевый, обладает всеми необходимыми функциями.
image image
Скажу несколько слов о покупке. Нашел сайт, где продавалась данная модель за 3999 рублей, сразу позвонил и попытался заказать.
Однако тут меня ждала неприятность: продавец сказал, что в наличии их нет, а текущая партия ждет растаможки на границе.
В итоге я целую неделю прождал, названивая каждый день, ожидая этой самой растаможки.

Тем временем нашел такую же модель на известном многим сайте DealExtreme, причем по цене $79.96 (~2400 рублей). Хотел было заказать, но рисковать не хотелось, т.к. сроки поджимали, а посылка может идти неделю, а может идти и полтора месяца (был опыт заказа в этом магазине).
Комплектация и упаковка товара в китайском интернет-магазине и от наших барыг предпринимателей полностью совпадали :)
Кстати, немного о комплектации. Она удивила приятными вкусняшками: второй аккумулятор, дополнительная задняя крышка (с магнитами, для крепления к кузову), защитный чехольчик. Единственное, чего не хватало — это автомобильной зарядки.

Итак, устройство лежит на столе, куплена новая сим-карта со специальным «интернетным» тарифным планом.

Настройка трекера
В комплекте шла небольшая книжечка с инструкциями (даже на русском). Трекер, несмотря на наличие USB, конфигурируется с помощью SMS.
Алгоритм прост: отправляем с телефона сообщение с командой и паролем и получаем в ответ результат выполнения. Причем в ответ можно получить только собщение вида <команда> ok, <команда> error или не получить вообще ничего (что вовсе не означает, что команда не применилась).
Трекер имеет два режима информирования: либо отправляет информацию через SMS на доверенные номера, либо отправляет через GPRS. Причем изначально трекер отправляет данные по звонку на симку, которая в него вставлена, но есть еще и возможность автоматической отсылки данных через заданный промежуток времени.
В итоге были вбиты настройки для доступа в интернет через GPRS (apn, user, pass), адрес и порт нашего сервера.
Но как же понять, что это загадочное устройство отправляет и в каком формате?

Получение информации

Когда я затевал эту идею, я долго искал какие-либо сервера для этих устройств, которые принимают сигналы с трекеров и каким-нибудь образом их отображают.
Ничего найдено не было. Нет, есть конечно одна служба, которая бесплатно предоставляет систему веб-мониторинга транспортных средств, и в нее можно добавить свой трекер, предварительно настроив его на их сервер, но этот вариант мне не подходил.
Конечно в крайнем случае можно было бы написать какой-нибудь парсер страничек этого сервиса, который сохранял бы всю информацию в нашу БД… Но все-таки хотелось попытаться поднять свой сервер.

Открыл порт, который указал в настройках, на сервере, начал слушать. После долгой настройки трекера удалось-таки заставить его слать пакеты на наш сервер.
Как я и подозревал, трекер слал информацию ввиде plain text'а.
Пример пакета-пинга (отправляется трекером каждые 20 секунд):
##,imei:572776984948029,A;
Вообще, IMEI содержится в каждом пакете от трекера, так что очень удобно фильтровать подключения: нет IMEI — дисконнект.

Позвонив на трекер, я спровоцировал отправку следующей информации:
imei:572776984948029,tracker,1007180132,+7926*******,F,173215.000,A,5453.2762,N,05850.6135,E,51.16,;
Интересная строка, неправда ли? Но что в ней записано и в каком виде?
Устройство отправляло информацию на сервер, что уже радовало :)

Далее пошел процесс понимания, что же в этой строке содержится и в каком формате.
Естественно в прилагаемой инструкции ни слова об этом не было.
Нашлась какая-то инструкция для китайского TK-102 (у нашего устройства есть много синонимов :), в которой была интересующая меня информация.

Судя по всему, здесь задействована какая-то аббревиатура GPRMC. Гугл помог мне найти информацию, что же это такое.
В итоге появилась функция парсинга строки, которая вытаскивает координаты, время и скорость (кстати не сразу понял, что она указывается в узлах).
Пример разобранной строки:
raw: imei:572776984948029,tracker,1007180132,+7926*******,F,173215.000,A,5453.2762,N,05850.6135,E,51.16,;
gps date raw: 17:32:15.0
gps unix date: 17.07.2010 17:32
degree: 54°53.2762'N 058°50.6135'E
decimal: 54.887937 58.843558
speed: 94.74832


Сервер оброс фильтрацией подключений (по IMEI), логированием сообщений от трекера, отбрасыванием лишних точек и кое-чем еще, но главное удалось достичь цели: трекер отправлял координаты каждые 20 секунд и они сохранялись на наш сервер.

Отображение информации
Самая трудная часть пройдена, осталось показать маршрут пользователям.
Отображать точки и соединять их в линии было поручено Яндекс.Картам. Их API хорошо документирован, так что не буду приводить какой-либо код или комментарии, лучше покажу скриншотик (кликабелен).

Последние 50 точек на карте выделены треугольничками, которые показывают направление движения, а по клику информацию о скорости в этой точке и времени фиксации.


Недостатки
У полученной системы все-таки есть недостатки, на мой взгляд исключительно аппаратные: трекер после перезагрузки (смены батарейки) «забывает», что ему необходимо слать информацию на сервер каждые N секунд, иногда странно зависает (невозможно выключить, не вынимая батарейки).
Наверное сказывается то, что это самый дешевый трекер из тех, которые я нашел в продаже в Москве.

О чем забыл упомянуть
— данный трекер еще имеет функцию мониторинга: можно позвонить на него и слышать, что происходит вокруг устройства;
— заряда одной батареи хватает примерно часов на 20;
— в процессе использования потребляет очень мало траффика;
— в процессе поиска примеров реализации отображения треков на карте нашел чуть ли не единственную статью, в которой довольно подробно рассматривается задача на примере Google Maps;
— система вышла весьма бюджетной: 4000 рублей за устройство + 300-400 за новую сим-карту с нужным тарифом;
Tags:
Hubs:
+95
Comments106

Articles

Change theme settings