Ретранслятор для Wialon IPS или как получить CAN в аналоговом входе

Коллеги, это очередная статья для интеграторов систем спутникового мониторинга. Меня зовут Евгений Шлягин и я руководитель Научно-технического центра БИТЛАЙТ. Нам иногда приходится решать нестандартные задачи по интеграции оборудования в не совсем готовые для этого системы мониторинга.

Мы сделали маленький служебный сервис онлайн-трансляции протокола wialon ips и готовы бесплатно им поделиться. Это решение для интеграторов систем спутникового мониторинга, которые работают с «зоопарком» серверов и производителей. Позволяет решить одну из «проблем современности», как получить данные CAN с трекера, который умеет работать только по протоколу Wialon IPS на серверах других производителей.

Фактически скрипт представляет собой автономный сервер «заглушку» который устанавливает соединение с трекером и телематическим сервером, а затем прозрачно транслирует получаемые данные.

При этом мы получаем возможность «на лету» изменять структуру передаваемых пакетов.

Для чего это нужно. В протоколе wialon ips реализована возможность передавать дополнительные именованные параметры, причем название их никак не определяется протоколом. В примере это значение fuel.

описание стандартного пакета данных протокола Wialon IPS. Аналоговые входы - adc, именованные параметры - params
Именованный параметр fuel может не определяться сервером мониторинга

Как работает. Пример передаваемых пакетов:

<—- server b’#L#8667950;NA\r\n’ //авторизуемся

server —-> b’#AL#1\r\n’ //ответ сервера

tracker —> b’#D#021121;121111;4515.8742;N;5421.1371;E;0;0;300;7;NA;0;0;

777,888;NA; can32:2:111,can33:2:222,can34:2:333\r\n’ // получаем данные от трекера, строка начинается с аналоговых входов для наглядности

<—- server b’#D#021121;121111;4515.8742;N;5421.1371;E;0;0;300;7;NA;0;0;

777,888,333;NA;can32:2:111,can33:2:222,can34:2:333\r\n’ // отправляем на сервер измененный пакет, переставили значение can34 в качестве следующего значения аналоговых входов. Вуаля! Теперь нужные нам данные CAN доступны в пакете wialon как обычный аналоговый вход.

server —-> b’#AD#1\r\n’ //ответ сервера об успешном получении

Важно! Эта версия скрипта написана для протокола WialonIPS 1.1 (который без контрольных сумм пакетов). Реальной необходимости использовать следующие версии протоколов нет, но при необходимости использовать IPS 2.0, потребуется добавить пересчет контрольной суммы пакета.

Переставили данные и можем получить can из обычного аналогового входа
Картинка логов для наглядности

Второе возможное применение которое мы видим — интеграция в сторонние системы устаревших телематических систем, не предоставляющих такой возможности. Благодаря «зеркалу» мы можем в реальном времени вытащить требуемые данные во внутренний учет, например по топливу, скорости, или покиданию геозоны, абсолютно прозрачно для работающей телематики. Либо настроить срабатывание других своих онлайн сервисов не дергая постоянно json-чики сервера мониторинга.

Для локальной отладки и проверки работы воспользуйтесь эмулятором протокола: https://github.com/xHasKx/WialonIPSEmulator/wiki

Сам скрипт доступен в моем репозитории на GitHub — «protocol-wialon-parameter-replacer-service», и вы можете свободно использовать его для своих проектов. Помощь с запуском и настройкой: shlyagin@gmail.com