Обработка запросов от китайского GPS-Tracker TK-102B

По просьбе страждущих в этой теме: #comment_70408960

Скажу сразу: пост пилить не хотел, т.к. уверен, что далеко не всем это будет интересно, но 3 подписчика меня фактически обязали :-)

Некоторое время назад мною был приобретён на Алиэкспрессе такой вот зверь:

Обработка запросов от китайского GPS-Tracker TK-102B Gps трекер, Карты, Мониторинг, PHP, Mysql, Длиннопост

С трекером возможно общаться по СМС, так же он может работать в режиме передатчика звука и, что самое для меня интересное, может отчитываться на сервер. Этот вариант мы и рассмотрим подробнее.

Для начала необходимо настроить сам трекер. Делается это с помощью СМС команд, отправленных на номер трекера. Стоит отметить, что они могут значительно отличаться в зависимости от версии и прошивки. Для моего это так:

begin123456 - инициализация. Здесь "begin" - команда, а "123456" - стандартный пароль по умолчанию.

password123456 111111 - смена пароля, но мы для простоты будем со старым.

admin123456 +79119876543 - установка телефона администратора (т.е. вашего). До этого момента трекер принимает команды с любого номера, а после только с установленных. Номеров может быть несколько, но начать лучше со своего иначе рискуете потерять управление.

adminip123456 8.8.8.8 2222 - собственно самое важное для нас - указание IP адреса и порта нашего сервера. IP адрес естественно должен быть статичный и внешний. Живущим за роутерами - не забываем пробросить порт.

apn123456 internet.mts.ru - настраиваем выход в интернет. Для каждого оператора строка разная. У меня мтс. Иногда может потребоваться так же пользователь и пароль. Их пишем через пробел т.е. что-то типа:  apn123456 internet.mts.ru mts mts

gprs123456 - собственно переключение на отправку данных с трекера на сервер (тот, что выше указали), а не через СМС.

check123456 - проверка состояния устройства. Ответ придёт в СМС и ОЧЕНЬ сильно зависит от версии/модели/продавца и хрен знает чего ещё. Если на момент проверки у нас УЖЕ работает сервер, о котором ниже, то минимум нам придёт GPRS: OK. Так же обычно есть инфа о заряде батареи и статусе GPS.

t060s***n123456 - собственно интервал отправки данных. 060 говорит об необходимости отправки раз в 60 секунд. *** - количество раз. Если "***" значит бесконечно, но можно указать и число раз. Минимальный интервал около 20 секунд. Я меньше 30 не ставил.

Кроме указанного минимума команд существует ещё множество и они легко гуглятся. Останавливаться тут на них мы не будем. Перейдём к серверу. Тут всё делится на 2 части. 1 часть непосредственно слушает порт, разбирает запросы и записывает это всё в базу. В моём случае рабочая версия у меня на php и пишем в mysql. Делал я это через сокеты. В общих чертах:

Открываем:

$master=socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

$res=@socket_bind($master, $ip, $port);

и в цикле читаем как-то приблизительно так:

if (socket_select($read, $NULL, $NULL, 0, 10))

if(in_array($master, $read))

$sockets[]=socket_accept($master);

далее обрабатываем и пишем в базу.

Трекер присылает строку такого вида:

(0270*******2BR00160615A5934.7690N03007.2188E005.9174004242.9700000000L00000000)

Строка всегда в скобках.

Начинается с части (или полного) серийного номера устройства. В нашем случае 0270*******2 (замазал). Далее команда. У нас это BR00 (собственно команда отправки координат). Дальше данные в зависимости от команды. 160615 - дата 15-06-2016 года. "А" якобы говорит о том, что данные актуальные (по документации). Дальше идёт широта и долгота: lat:5934.7690 lon:03007.2188 (преобразовать в нужную систему координат ещё надо). Потом скорость: 5.9 км/ч. Затем время: 17:40:04

Периодически трекер требует так называемый handshake (рукопожатие). Если на него не ответить, то требовать он его будет после каждого ответа. Команда-запрос: BP00. Ответ: (серийный номер+AP01HSO) Более подробно по серверу думаю не уложится в рамки данного поста. Спрашивайте - постараюсь ответить.

Вторая же часть отвечает за вывод из базы на карту. Я сделал это через API yandex карт. Выглядит у меня как-то так:

Обработка запросов от китайского GPS-Tracker TK-102B Gps трекер, Карты, Мониторинг, PHP, Mysql, Длиннопост

Это я к тёще ехал :-) Каждая точка это минута. Соответственно чем выше скорость, тем больше расстояние между точками. Однако реализация визуальной части у каждого может быть своя. Тут огромный простор для фантазии. Читаем из нашей базы и с помощью API формируем фигурами то, что хотим от точки до точки. Можно учитывать дороги, можно получать ближайший адрес (запрещено в бесплатном API в реальном времени, но может тут есть миллионеры, желающие купить платный доступ для бизнеса). Да хоть расход топлива рассчитывайте. Возможностей масса.

Описание самого API тут: https://tech.yandex.ru/maps/ По Гуглу есть аналогичное на гугле.

В заключении хочу сказать, что данный девайс полностью оправдал лично мои надежды, но тут раз на раз не приходится. Ссылку на продавца оставлю в комментариях. Прошу прощения за столь сжатый пост. Инфы действительно ОЧЕНЬ много и всё сюда вероятно не влезет, да и Лига Лени затягивает в свои сети.

TECHNO BROTHER

1.6K постов12.5K подписчиков

Добавить пост

Правила сообщества

1-Мы А-политическое сообщество. 2-Запрещено оскорбление: Администрации Пикабу, сообщества, участников сообщества а также родных, близких выше указанных.

3-Категорически запрещается разжигание межнациональной розни или действий, направленных на возбуждение национальной, расовой вражды, унижение национального достоинства, а также высказывания о превосходстве либо неполноценности пользователей по признаку их отношения к национальной принадлежности или политических взглядов. Мат - Нежелателен. Учитесь выражать мысли без матерщины

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

Автор привет, ты живой ещё?

Переворошил весь интернет и на третий день только нашёл твою статью, причём, к моему большому удивлению, она оказалась на пикабу.

Вобщем у меня тоже есть сервер на php принимающий данные такого же как и у тебя типа и я не могу понять как они расшифровываются. Инструкций по этому поводу у меня вообще никаких.

Мог бы ты подробнее рассказать об "общении" с трекером: как отвечать ему на handshake и как вообще он выглядит, в каком виде могут приходить уведомления (о аварии, выходе из строя, если они вообще приходят), и что означают данные разделённые запятыми вот такого вида: *imei*BZ00,250,002,5505,32251,5502,31672,5501,32263

Было бы чудесно, если бы ты поделился своим модулем парсинга этих сообщений от трекера. Очень рассчитываю на твою помощь, мой email: ddiskyp@gmail.com

раскрыть ветку (12)
Автор поста оценил этот комментарий

Живой. Ты пост-то читал ? Там есть примеры строк, а в коментах примеры кода захвата и парсинга. У меня приходит цельная строка, хоть и похожа на твою, но формат другой немного (он, кстати, в посте разобран подробно - почитай)

Что конкретно интересует из того, что нет в посте - спрашивай. Постараюсь ответить.

раскрыть ветку (11)
Автор поста оценил этот комментарий

А да, и ещё по поводу координат. Я могу полученные координаты сразу использовать в гуглокартах или их нужно предварительно как-то обработать?

раскрыть ветку (4)
Автор поста оценил этот комментарий

Нужно перевести из одной системы в другую. Я использую API yandex карт, но можно и руками

раскрыть ветку (3)
Автор поста оценил этот комментарий

А из какой системы в какую? Я раньше с этим не сталкивался, потому я так с полу слова не могу тебя понять. И как то api называется?

раскрыть ветку (2)
Автор поста оценил этот комментарий

API Yandex.maps: https://tech.yandex.ru/maps/

Это тоже есть в посте.

раскрыть ветку (1)
Автор поста оценил этот комментарий

В статье написано: "(преобразовать в нужную систему координат ещё надо)". Что значит в нужную? Какую систему координат я получаю от трекера? Какую мне в итоге нужно получить, чтобы использовать в яндекс картах? Какой метод в api яндекс карт отвечает за преобразование координат? Каким методом пользуешься ты?

Автор поста оценил этот комментарий

Со строкой, что в посте мне понятно. А каких-либо других строк у тебя не приходит? Той, что я написал, с командой BZ00 и кучей запятых, например? Что она обозначает?

Я бы и сам мог всё это прочесть, скинь свою документацию на почту, пожалуйста, если она у тебя ещё осталась.

Кода в комментариях я не вижу :(

раскрыть ветку (5)
Автор поста оценил этот комментарий
Видимо это какая-то более свежая версия. У меня последнее BV. Дальше нет.

BZ не приходит, как я уже писал выше. Ты вообще читаешь сообщения ?


По переводу тоже уже указал:

http://geocode-maps.yandex.ru/1.x/?geocode='.$lat.','.$long.'&format=json&results=1


Протокол обмена тебе скинул на почту.

Автор поста оценил этот комментарий

Нет. Видимо это какая-то более свежая версия. У меня последнее BV. Дальше нет.

Я бы предпочёл отвечать тут, а не по почте т.к. ты не первый и не последний и остальные с похожими вопросами должны иметь возможность прочитать. Более того: из всего документа работает реально процентов 10. Остальное просто не реализовано в трекере - проверял.

раскрыть ветку (3)
Автор поста оценил этот комментарий

Ну дак саму документацию у тебя есть возможность мне скинуть?

И тот код из комментариев с парсингом данных, про который ты говорил, я его не могу найти, продублируй тут, пожалуйста.

раскрыть ветку (2)
Автор поста оценил этот комментарий

Строка с приходящими данными в посте выделена жирным. После идёт разбор где там и что. Что конкретно не понятно ?

Конкретно по координатам запрос такой:

http://geocode-maps.yandex.ru/1.x/?geocode='.$lat.','.$long.'&format=json&results=1

раскрыть ветку (1)
Автор поста оценил этот комментарий
Едрить, неужели я так непонятно выражаюсь? Я хочу увидеть документацию, мне без неё очень тяжко и я хочу посмотреть на кусок твоего php кода, где ты регекспом или ещё чем разбираешь эту строку на отдельные переменные, технология этой разборки меня интересует.
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку