Я только что настроил LtAP Mini (LTE) вместо своего старого GPS-трекера TK103B. Друг нашёл эту тему, когда я упомянул, что интересуюсь им, и ваш пост направил меня в нужную сторону, спасибо! Используя документацию GpsGate и MikroTik, я собрал два скрипта: один для запуска на LtAP и PHP-скрипт для преобразования данных. PHP-скрипт у меня стоит на сервере GpsGate после добавления PHP в IIS. RouterOS плохо работает с десятичными числами, поэтому преобразование широты и долготы прямо на LtAP оказалось тупиком, несмотря на все попытки. Даже в документации MikroTik данные передаются в PHP-скрипт для конвертации. На мой взгляд, эти решения ещё не окончательные, но пока работают достаточно хорошо.
Скрипт для запуска на LtAP (у меня стоит запускать его каждые 15 секунд):
php :local server “domain_or_ip/gps.php”
:local port “80”
get imei :global lteimei
/interface lte info lte1 once do={:set $lteimei $(“imei”)}
get gps data :global datetime :global lat :global lon :global alt :global spd :global bear :global val
/system gps monitor once do={
:set $datetime $(“date-and-time”)
:set $lat $(“latitude”)
:set $lon $(“longitude”)
:set $alt $(“altitude”)
:set $spd $(“speed”)
:set $bear $(“true-bearing”)
:set $val $(“valid”)
}
months array :local months (“jan”,“feb”,“mar”,“apr”,“may”,“jun”,“jul”,“aug”,“sep”,“oct”,“nov”,“dec”);
преобразование названия месяца в число :local month ([ :find $months ([:pick $datetime 0 3]) -1 ] + 1);
:if ($month < 10) do={:set month (“0” . $month);}
обработка даты и времени :local date ([:pick $datetime 4 6] . $month . [:pick $datetime 9 11]);
:local time ([:pick $datetime 12 14] . [:pick $datetime 15 17] . [:pick $datetime 18 20]);
отправка GPS-данных в PHP-скрипт
fetch mode=http url=“http://$server” port=$port http-method=post http-data=(“{ "imei":"” . $lteimei . “", "lat":"” . $lat . “", "lon":"” . $lon . “", "alt":"” . $alt . “", "spd":"” . $spd . “", "bear":"” . $bear . “", "date":"” . $date . “", "time":"” . $time . “", "val":"” . $val . “" }”) http-content-type=“application/json”
PHP-скрипт для преобразования данных и передачи их в GpsGate:
<?php
// сервер gpsgate
$server = "127.0.0.1";
$port = "8008";
// Конвертация DMS (градусы/минуты/секунды) в DMM (NMEA)
function DMStoDMM($deg,$min,$sec)
{
//return $deg+((($min*60)+($sec))/3600)
return $deg.($min+(($sec)/60));
}
function KMHtoKNOT($spd)
{
//return (($spd)/1.852)
return (($spd)/1.852);
}
// получение входных данных
$raw = file_get_contents('php://input');
$data = json_decode($raw);
// проверка наличия всех данных
if (!empty($data) && is_object($data) && property_exists($data,'imei') && property_exists($data,'lat') && property_exists($data,'lon') && property_exists($data,'alt') && property_exists($data,'spd') && property_exists($data,'bear') && property_exists($data,'date') && property_exists($data,'time') && property_exists($data,'val')){
// очистка переменных
$imei = $lat = $lon = $alt = $spd = $bear = $date = $time = $val = '';
// установка imei
$imei = $data->imei;
// разделение координат DMS и конвертация в DMM (NMEA)
if(preg_match('/^(N|E|W|S)\ (\d+)\ (\d+)\'\ (\d+\.\d+)/',$data->lat,$result)){
$lat = DMStoDMM($result[2], $result[3], $result[4]);
$lathem = $result[1];
}
if(preg_match('/^(N|E|W|S)\ (\d+)\ (\d+)\'\ (\d+\.\d+)/',$data->lon,$result)){
$lon = DMStoDMM($result[2], $result[3], $result[4]);
$lonhem = $result[1];
}
// обработка высоты, убираем 'm'
if(preg_match('/^(\d+)\.(\d+)/',$data->alt,$result)){
$alt = $result[1].".".$result[2];
}
// конвертация скорости в узлы
if(preg_match('/^(\d+)\.(\d+)/',$data->spd,$result)){
$spd = $result[1].".".$result[2];
if(!$result[1] == "0"){
$spd = KMHtoKNOT($spd);
} else {
$spd = "0.00";
}
}
// обработка направления (bearing)
if(preg_match('/^(\d+)\.(\d+)/',$data->bear,$result)){
$bear = $result[1].".".$result[2];
}
// дата
$date = ($data->date);
// время
$time = ($data->time);
// преобразование валидности в 1 (true) или 0
if(($data->val) == "true"){
$val = "1";
} else {
$val = "0";
}
// возврат данных на источник (mikrotik файл gps.php), отключить при необходимости
echo("IMEI: $imei\nLatitude: $lat\nLatitude Hemisphere: $lathem\nLongitude: $lon\nLongitude Hemisphere: $lonhem\nAltitude: $alt (m)\nSpeed: $spd (Knots)\nBearing: $bear (Deg.)\nDate: $date\nTime: $time\nValid: $val\ncURL: http://$server:$port/GpsGate/%3Fcmd=%24FRCMD,$imei,_SendMessage,,$lat,$lathem,$lon,$lonhem,$alt,$spd,$bear,$date,$time,$val\n\n");
$url = "http://$server:$port/GpsGate/%3Fcmd=%24FRCMD,$imei,_SendMessage,,$lat,$lathem,$lon,$lonhem,$alt,$spd,$bear,$date,$time,$val";
$ch = curl_init($url);
$result = curl_exec($ch);
curl_close($ch);
echo("$result");
}
?>
Надеюсь, это поможет, если ты до сих пор хочешь заставить это работать.