GPS трэкер TK102
Модератор: immortal
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: GPS трэкер TK102
Что-то показания изменились"Первым делом я опробовал опросить трекер по смс — получил координаты и мигом проверил в картах — отлично, следующий этап это настройка на свой сервер, но т. к. у меня сервера своего нет, а есть белый IP я недолго думая написал консольное приложение на C# и решил посмотреть, что там приходит с трекера, а с трекера приходила следующая строка:
«130402213013,+79637**3***,GPRMC,173013.000,A,6146.4979,N,03421.2399,E,1.92,21.48,020413,,,A*5B,F,, imei:*************,00,-16.4,F:3.73V,0,139,49646,250,99,1478,68A7\n\r»
Строка с GPRMC и imei правильная и в ней есть координаты широты и долготы...
Дык, чего он шлет в итоге?
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 24
- Зарегистрирован: Пн мар 11, 2013 10:44 pm
- Откуда: SPb
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: GPS трэкер TK102
Шлет как выяснилось это
[!0000000218x(353327023761117,TK102-W998_01_V1.1.002_130401,250,001,250,001,0,100,100,1,internet.mts.ru,mts,mts,0,1,255,0,23,1,11,04)]
[L00000001027(GSM,0,0,10010001,20140314133000,250,001,11206,221,0,1)][%0000000104-(100100010000000000-30-65535)]
[L0000000105P(GSM,0,0,10010001,20140314133100,250,001,11206,221,0,2072,236,49,11203,221,46,1)]
[L0000000106P(GSM,0,0,10010001,20140314133100,250,001,11206,221,0,2072,236,49,11203,221,47,1)
Очередой китайский клон
[!0000000218x(353327023761117,TK102-W998_01_V1.1.002_130401,250,001,250,001,0,100,100,1,internet.mts.ru,mts,mts,0,1,255,0,23,1,11,04)]
[L00000001027(GSM,0,0,10010001,20140314133000,250,001,11206,221,0,1)][%0000000104-(100100010000000000-30-65535)]
[L0000000105P(GSM,0,0,10010001,20140314133100,250,001,11206,221,0,2072,236,49,11203,221,46,1)]
[L0000000106P(GSM,0,0,10010001,20140314133100,250,001,11206,221,0,2072,236,49,11203,221,47,1)
Очередой китайский клон
-
- Сообщения: 24
- Зарегистрирован: Пн мар 11, 2013 10:44 pm
- Откуда: SPb
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: GPS трэкер TK102
Вроде определил что за модель.. но теперь все таки как обработать принимаемые данные. ID и координаты в посылаемых данных есть.
И еще появился еще один трекер, очень похож на TK-103 но у него другой протокол:
Нашёл расшифровку протокола для ТК-103
Вот строчка которую он посылает:
(090311060448BP05000055559245691090311V3941.9718S06349.0565W000.0060448126.4300000000L000000)
090311060448 running number
BP05 command
000055559245691 equipment number
090311 date
V location Mark
3941.9718 latitude
S South
06349.0565 longitude
W West
00.0 speed
060448 UTCtime
126.43 Direction
00000000 state position
L000000 mileage
Это пока то что накопал,хочу попробовать и его прикрутить к системе. Думаю если результат будет положительный то и другим пригодится.
И еще появился еще один трекер, очень похож на TK-103 но у него другой протокол:
Нашёл расшифровку протокола для ТК-103
Вот строчка которую он посылает:
(090311060448BP05000055559245691090311V3941.9718S06349.0565W000.0060448126.4300000000L000000)
090311060448 running number
BP05 command
000055559245691 equipment number
090311 date
V location Mark
3941.9718 latitude
S South
06349.0565 longitude
W West
00.0 speed
060448 UTCtime
126.43 Direction
00000000 state position
L000000 mileage
Это пока то что накопал,хочу попробовать и его прикрутить к системе. Думаю если результат будет положительный то и другим пригодится.
-
- Сообщения: 24
- Зарегистрирован: Пн мар 11, 2013 10:44 pm
- Откуда: SPb
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: GPS трэкер TK102
Программист на PHP из меня никакой, а как админ я понимаю что надо принять данные, обработать, записать в базу, отобразить в GUI.
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: GPS трэкер TK102
Тоже нашел расшифровку протокола для ТК-103.
Сделал разбор данной строки.
Сегодня приведу в человеческий вид и выложу.
Можно пару строк которые он шлет для проверки?
Сделал разбор данной строки.
Сегодня приведу в человеческий вид и выложу.
Можно пару строк которые он шлет для проверки?
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 24
- Зарегистрирован: Пн мар 11, 2013 10:44 pm
- Откуда: SPb
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: GPS трэкер TK102
Что бы не путаться
TK-103 строка типа
(013666666666BP05000013666666666140317A6002.2081N03017.0742E024.2122229231.6800000000L00000B24)
(013666666666BP05000013666666666140317A6001.9520N03016.6055E048.3122303226.9300000000L00000C6D)
(013666666666BP05000013666666666140317A6001.9104N03016.5508E000.0122337219.3700000000L00000D2C)
(013666666666BP05000013666666666140317A6001.9180N03016.6217E011.8122410237.3600000000L00000D9F)
(013666666666BP05000013666666666140317A6001.9884N03016.8132E010.512244460.21000000000L00000DC1)
(013666666666BP05000013666666666140317A6002.0877N03017.0737E000.012251849.72000000000L00000E82)
(013666666666BP05000013666666666140317A6002.0377N03016.9912E000.0122551223.6400000000L00000EB2)
TK-102 строка типа
[!0000000218x(353327023761117,TK102-W998_01_V1.1.002_130401,250,001,250,001,0,100,100,1,internet.mts.ru,mts,mts,0,1,255,0,23,1,11,04)]
[L00000001027(GSM,0,0,10010001,20140314133000,250,001,11206,221,0,1)][%0000000104-(100100010000000000-30-65535)]
[L0000000105P(GSM,0,0,10010001,20140314133100,250,001,11206,221,0,2072,236,49,11203,221,46,1)]
[L0000000106P(GSM,0,0,10010001,20140314133100,250,001,11206,221,0,2072,236,49,11203,221,47,1)
TK-103 строка типа
(013666666666BP05000013666666666140317A6002.2081N03017.0742E024.2122229231.6800000000L00000B24)
(013666666666BP05000013666666666140317A6001.9520N03016.6055E048.3122303226.9300000000L00000C6D)
(013666666666BP05000013666666666140317A6001.9104N03016.5508E000.0122337219.3700000000L00000D2C)
(013666666666BP05000013666666666140317A6001.9180N03016.6217E011.8122410237.3600000000L00000D9F)
(013666666666BP05000013666666666140317A6001.9884N03016.8132E010.512244460.21000000000L00000DC1)
(013666666666BP05000013666666666140317A6002.0877N03017.0737E000.012251849.72000000000L00000E82)
(013666666666BP05000013666666666140317A6002.0377N03016.9912E000.0122551223.6400000000L00000EB2)
TK-102 строка типа
[!0000000218x(353327023761117,TK102-W998_01_V1.1.002_130401,250,001,250,001,0,100,100,1,internet.mts.ru,mts,mts,0,1,255,0,23,1,11,04)]
[L00000001027(GSM,0,0,10010001,20140314133000,250,001,11206,221,0,1)][%0000000104-(100100010000000000-30-65535)]
[L0000000105P(GSM,0,0,10010001,20140314133100,250,001,11206,221,0,2072,236,49,11203,221,46,1)]
[L0000000106P(GSM,0,0,10010001,20140314133100,250,001,11206,221,0,2072,236,49,11203,221,47,1)
-
- Сообщения: 521
- Зарегистрирован: Вс апр 07, 2013 9:30 pm
- Откуда: Moscow
- Благодарил (а): 2 раза
- Поблагодарили: 58 раз
- Контактная информация:
Re: GPS трэкер TK102
Описание протокола: открыть
В описании протокола есть некоторые неточности относительно размеров строки с gps данными и описания поля времени
Ну...как-то так. Если будут какие-то неточности или пожелания/комментарии, то пишите
p.s. описания для 102-ого я пока не нашел, так что с ним пока никак.
GpsDevices.class.php
В описании протокола есть некоторые неточности относительно размеров строки с gps данными и описания поля времени
Ну...как-то так. Если будут какие-то неточности или пожелания/комментарии, то пишите
p.s. описания для 102-ого я пока не нашел, так что с ним пока никак.
Код: Выделить всё
<?php
require_once("GpsDevices.class.php");
$gps = new GpsDevices();
/*
TK-103 строка типа
(013666666666BP05000013666666666140317A6002.2081N03017.0742E024.2122229231.6800000000L00000B24)
(013666666666BP05000013666666666140317A6001.9520N03016.6055E048.3122303226.9300000000L00000C6D)
(013666666666BP05000013666666666140317A6001.9104N03016.5508E000.0122337219.3700000000L00000D2C)
(013666666666BP05000013666666666140317A6001.9180N03016.6217E011.8122410237.3600000000L00000D9F)
(013666666666BP05000013666666666140317A6001.9884N03016.8132E010.512244460.21000000000L00000DC1)
(013666666666BP05000013666666666140317A6002.0877N03017.0737E000.012251849.72000000000L00000E82)
(013666666666BP05000013666666666140317A6002.0377N03016.9912E000.0122551223.6400000000L00000EB2)
*/
$dataArr = array("(013666666666BP05000013666666666140317A6002.2081N03017.0742E024.2122229231.6800000000L00000B24)",
"(013666666666BP05000013666666666140317A6001.9520N03016.6055E048.3122303226.9300000000L00000C6D)",
"(013666666666BP05000013666666666140317A6001.9104N03016.5508E000.0122337219.3700000000L00000D2C)",
"(013666666666BP05000013666666666140317A6001.9180N03016.6217E011.8122410237.3600000000L00000D9F)",
"(013666666666BP05000013666666666140317A6001.9884N03016.8132E010.512244460.21000000000L00000DC1)",
"(013666666666BP05000013666666666140317A6002.0877N03017.0737E000.012251849.72000000000L00000E82)",
"(013666666666BP05000013666666666140317A6002.0377N03016.9912E000.0122551223.6400000000L00000EB2)");
foreach($dataArr as $data)
{
try
{
$res = $gps->GetTk103Data($data);
echo "running number: " . $res->runningNumber . "<br />";
echo "command word: " . $res->commandWord . "<br />";
echo "deviceID: " . $res->deviceID. "<br />";
echo "gpsDate: " . $res->date . "<br />";
echo "gpsDataAvailable: " . $res->isGpsDataAvailable . "<br />";
echo "Latitude: " . $res->latitude . "<br />";
echo "Latitude indicator: " . $res->latitudeIndicator . "<br />";
echo "Longitude: " . $res->longitude . "<br />";
echo "Longitude indicator: " . $res->longitudeIndicator . "<br />";
echo "Speed: " . $res->speed . "km/h<br />";
echo "Orientation: " . $res->orientation . "<br />";
echo "IOState: " . $res->ioState . "<br />";
echo "Milepost: " . $res->milePost . "<br />";
echo "Mile data: " . $res->mileData . "meters<br />";
echo "<hr />";
}
catch(Exception $ex)
{
echo $ex->getMessage() . "<hr />";
}
}
Код: Выделить всё
<?php
/**
* GpsDevices short summary.
*
* GpsDevices description.
*
* @version 1.0
* @author LDV
*/
class GpsDevices
{
/**
* Convert GPS coord from degree/minutes/seconds to decimal coordinate
* @param $degree int Degree coord
* @param $minutes int Minutes coord
* @param $seconds int Seconds coord
* @return decimal GPS coordinate in decimal
*/
public function ConvertToGPS($degree, $minutes, $seconds)
{
$deg = $degree + $minutes / 60 + $seconds / 3600;
$deg = round($deg,6);
return $deg;
}
/**
* Return parsed data of tracker model: Tk103
* @param $inputString string tracker data
* @return object
*/
public function GetTk103Data($inputString)
{
/*
* input string description:
*
* field: Begining identifier, value: "(" type: char, length: 1
* field: Running NO./Time, value:"", type: string, length: 12
* field: Command Word, value "BP05", type: string, length: 4
* field: Device ID, value: Terminal ID, type: string, length: 15
* field: Message body, value: "", type: string, length:60
* Message body condent = terminal ID + GPS data
* field: Ending identifier, value: ")", length: 1
*
* GPS data description
* field: Time, value: "YYMMDD", type: string, length: 6, desc: Two bytes for each year/month/day
* field: The availability of GPS data, type: CHAR, length: 1,
* desc: "A" - means the availability of GPSdata,"V" - means the invalidation of GPS data.
* field: Latitude, value:, type:, string, length: 9, desc: The unit is degree for he front two bytes,from 0~90;the unit is cent for later seven bytes
* field: Latitude indicator, value: "N" or "S", type: char, length: 1, desc: "N" - north latitude,"S" - south latitude
* field: Longitude, value:, type: string, length: 10, desc: The unit is degree for he front three bytes, from0~180; the unit is cent for later seven bytes
* field: Longitude indicator, value: "E" or "W", type: char, length: 1, desc: "E" - east longitude,"W" - west longitude
* field: Speed, value:, type: string, length: 5, desc: The unit is km/h
* field: Time, value: "HHMMSS", type: string, length: 6, desc: Two bytes of the hour/minute/seconds
* field: Orientation, value:, type: string, length: 6, desc:
* field: IO State, value: "0" or "1", type: string, length: 8,
* desc: The 8 bits of IO. The first bit representative of the main power switch,
* "0" means the main power - on,
* "1" means the main power - off.
* The second bit on behalf of the ACC(ignition),
* "0" means ACC off,
* "1" means ACCon.
* Other reservations
* field: Mile post, value:, type: char, length: 1, desc: "L" mean Mileage
* field: Mile data, value:, type: string, length: 8, desc: Mile data,Unit: Meter. The total mileage. The max is 0xFFFFFFFF
*
* Example: "(090311060448BP05000055559245691090311V3941.9718S06349.0565W000.0060448126.4300000000L000000)"
*/
$beginIdentifierLength = 1;
$runningNumberLength = 12;
$commandWordLength = 4;
$deviceIDLength = 15;
$gpsDateLength = 6;
$gpsDataAvailableLength = 1;
$latitudeLegth = 9;
$latitudeIndicatorLength = 1;
$longitudeLength = 10;
$longitudeIndicatorLength = 1;
$speedLength = 5;
$timeLength = 6;
$orientationLength = 6;
$ioStateLength = 8;
$milepostLength = 1;
$mileDataLength = 8;
$gpsDataLength = $gpsDateLength + $gpsDataAvailableLength + $latitudeLegth + $latitudeIndicatorLength + $longitudeLength + $longitudeIndicatorLength
+ $speedLength + $timeLength + $orientationLength + $ioStateLength + $milepostLength + $mileDataLength;
$endIdentifierLength = 1;
$inputStringLength = $beginIdentifierLength + $runningNumberLength + $commandWordLength + $deviceIDLength + $gpsDataLength + $endIdentifierLength;
if (strlen($inputString) != $inputStringLength)
throw new Exception('Invalid string length');
$beginIdentifier = substr($inputString, 0, $beginIdentifierLength);
if ($beginIdentifier != "(")
throw new Exception('Invalid begin identifier');
$endIdentifier = substr($inputString,$inputStringLength-1,$endIdentifierLength);
if ($endIdentifier != ")")
throw new Exception('Invalid end identifier');
$runningNumber = substr($inputString,1, $runningNumberLength);
$commandWord = substr($inputString, $beginIdentifierLength + $runningNumberLength, $commandWordLength);
if ($commandWord != "BP05")
throw new Exception('Invalid device type');
$posDeviceID = $beginIdentifierLength + $runningNumberLength + $commandWordLength;
$deviceID = substr($inputString, $posDeviceID, $deviceIDLength);
$gpsData = substr($inputString, $posDeviceID + $deviceIDLength, $gpsDataLength);
date_default_timezone_set("UTC");
$gpsDate = substr($gpsData,0,$gpsDateLength);
$gpsDate = DateTime::createFromFormat('ymd', $gpsDate)->format('Y-m-d');
$gpsDataAvailable = substr($gpsData, $gpsDateLength, $gpsDataAvailableLength);
$isGpsDataAvailable = $gpsDataAvailable == "A" ? "Y" : "N";
$posLatitude = $gpsDateLength + $gpsDataAvailableLength;
$latitude = substr($gpsData, $posLatitude, $latitudeLegth);
$latitudeDegree = substr($latitude, 0,2);
$latitudeMin = substr($latitude,2,2);
$latitudeSec = substr($latitude,5);
$gpsLat = $this->ConvertToGPS($latitudeDegree, $latitudeMin, $latitudeSec);
$latitudeIndicator = substr($gpsData, $posLatitude + $latitudeLegth, $latitudeIndicatorLength);
$posLongitude = $posLatitude + $latitudeLegth + $latitudeIndicatorLength;
$longitude = substr($gpsData,$posLongitude, $longitudeLength);
$longitudeDegree = substr($longitude, 0,3);
$longitudeMin = substr($longitude,3,2);
$longitudeSec = substr($longitude,6);
$gpsLng = $this->ConvertToGPS($longitudeDegree, $longitudeMin, $longitudeSec);
$longitudeIndicator = substr($gpsData, $posLongitude + $longitudeLength, $longitudeIndicatorLength);
$posSpeed = $posLongitude + $longitudeLength + $longitudeIndicatorLength;
$speed = substr($gpsData, $posSpeed, $speedLength);
$time = substr($gpsData, $posSpeed + $speedLength, $timeLength);
$time = DateTime::createFromFormat('His', $time)->format('H:i:s');
$dateTime = $gpsDate . " " . $time;
$posOrientation = $posSpeed + $speedLength + $timeLength;
$orientation = substr($gpsData, $posOrientation, $orientationLength);
$ioState = substr($gpsData, $posOrientation + $orientationLength, $ioStateLength);
$posMilePost = $posOrientation + $orientationLength + $ioStateLength;
$milePost = substr($gpsData, $posMilePost, $milepostLength);
$mileData = substr($gpsData,$posMilePost + $milepostLength, $mileDataLength);
$mileData = hexdec($mileData);
$obj = (object) array('runningNumber' => $runningNumber,
'commandWord' => $commandWord,
'deviceID' => $deviceID,
'date' => $dateTime,
'isGpsDataAvailable' => $isGpsDataAvailable,
'latitude' => $gpsLat,
'latitudeIndicator' => $latitudeIndicator,
'longitude' => $gpsLng,
'longitudeIndicator' => $longitudeIndicator,
'speed' => $speed,
'orientation' => $orientation,
'ioState' => $ioState,
'milePost' => $milePost,
'mileData' => $mileData);
return $obj;
}
}
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
-
- Сообщения: 24
- Зарегистрирован: Пн мар 11, 2013 10:44 pm
- Откуда: SPb
- Благодарил (а): 2 раза
- Поблагодарили: 0
Re: GPS трэкер TK102
Спасибо за проделанную работу, но вопрос неуча... а как это теперь в MjD привязать?