GPS трэкер TK102

Подключение исполнительных устройств, датчиков, контроллеров.

Модератор: immortal

canay
Сообщения: 24
Зарегистрирован: Пн мар 11, 2013 10:44 pm
Откуда: SPb
Благодарил (а): 2 раза
Поблагодарили: 0

Re: GPS трэкер TK102

Сообщение canay » Пт мар 14, 2014 9:58 am

в /debmes/ ни чего похожего нет
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: GPS трэкер TK102

Сообщение LutsenkoDenis » Пт мар 14, 2014 10:18 am

"Первым делом я опробовал опросить трекер по смс — получил координаты и мигом проверил в картах — отлично, следующий этап это настройка на свой сервер, но т. к. у меня сервера своего нет, а есть белый 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
canay
Сообщения: 24
Зарегистрирован: Пн мар 11, 2013 10:44 pm
Откуда: SPb
Благодарил (а): 2 раза
Поблагодарили: 0

Re: GPS трэкер TK102

Сообщение canay » Пн мар 17, 2014 3:08 pm

Шлет как выяснилось это
[!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)

Очередой китайский клон
canay
Сообщения: 24
Зарегистрирован: Пн мар 11, 2013 10:44 pm
Откуда: SPb
Благодарил (а): 2 раза
Поблагодарили: 0

Re: GPS трэкер TK102

Сообщение canay » Пн мар 17, 2014 6:46 pm

Вроде определил что за модель.. но теперь все таки как обработать принимаемые данные. 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

Это пока то что накопал,хочу попробовать и его прикрутить к системе. Думаю если результат будет положительный то и другим пригодится.
canay
Сообщения: 24
Зарегистрирован: Пн мар 11, 2013 10:44 pm
Откуда: SPb
Благодарил (а): 2 раза
Поблагодарили: 0

Re: GPS трэкер TK102

Сообщение canay » Пн мар 17, 2014 7:02 pm

Программист на PHP из меня никакой, а как админ я понимаю что надо принять данные, обработать, записать в базу, отобразить в GUI.
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: GPS трэкер TK102

Сообщение LutsenkoDenis » Вт мар 18, 2014 12:26 am

Тоже нашел расшифровку протокола для ТК-103.
Сделал разбор данной строки.
Сегодня приведу в человеческий вид и выложу.
Можно пару строк которые он шлет для проверки?
________________________________________________________
Majordomo (GitHub) на HP Microserver Gen8. OS Debian Stretch
canay
Сообщения: 24
Зарегистрирован: Пн мар 11, 2013 10:44 pm
Откуда: SPb
Благодарил (а): 2 раза
Поблагодарили: 0

Re: GPS трэкер TK102

Сообщение canay » Вт мар 18, 2014 8:40 am

Что бы не путаться
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)
canay
Сообщения: 24
Зарегистрирован: Пн мар 11, 2013 10:44 pm
Откуда: SPb
Благодарил (а): 2 раза
Поблагодарили: 0

Re: GPS трэкер TK102

Сообщение canay » Вт мар 18, 2014 8:43 am

TK-102 на http://gps-tracker.com.ua/ заработал как TK-103b
LutsenkoDenis
Сообщения: 521
Зарегистрирован: Вс апр 07, 2013 9:30 pm
Откуда: Moscow
Благодарил (а): 2 раза
Поблагодарили: 58 раз
Контактная информация:

Re: GPS трэкер TK102

Сообщение LutsenkoDenis » Вт мар 18, 2014 12:04 pm

Описание протокола: открыть
В описании протокола есть некоторые неточности относительно размеров строки с 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 />";
   }
}

 
GpsDevices.class.php

Код: Выделить всё

<?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
canay
Сообщения: 24
Зарегистрирован: Пн мар 11, 2013 10:44 pm
Откуда: SPb
Благодарил (а): 2 раза
Поблагодарили: 0

Re: GPS трэкер TK102

Сообщение canay » Вт мар 18, 2014 3:49 pm

Спасибо за проделанную работу, но вопрос неуча... а как это теперь в MjD привязать?
Ответить