Каждая модель устройства GPRS имеет свою протокольную документацию, поэтому, согласно документации, мне удалось подключить устройство (я использую здесь устройство LT05 + GRS) к прослушивателю TCP, который закодирован в Node.js Модуль SocketIO .
После подключения к серверу устройство должно отправить запрос на вход в некоторый шестнадцатеричный код. После декодирования кода с помощью данного документа протокола и проверки подлинности запроса сервер должен ответить устройству после передачи контрольного кода. Контрольный код генерируется методом проверки CR C -ITU.
В моем случае я получаю запрос на вход в систему, но при отправке ответа на устройство с сервера устройство непрерывно отправляет одно и то же запрос на вход.
Обращаясь к документу, на диаграмме потока данных упоминается, что, когда устройство не получило правильный ответ, оно сбросит запрос на вход в систему. Я сделал все в соответствии с документом для отправки ответа.
Вот мой код.
app. js:
var express = require('express');
var app = express();
var socketServer = require('http').createServer(app);
var io = require('socket.io')(socketServer);
socketServer.listen(3000);
socketServer.on('listening',function(device){
console.log('ok, server is running');
});
io.on('connection', function(clientSocket){
console.log('a user connected');
clientSocket.on('disconnect', function(){
console.log('user disconnected');
});
});
app.get('/', function (req, res) {
console.log('socket working Fine Suhail');
});
io.on('connection', function(data) {
console.log('check 2');
var gps = require("gps-tracking");
var options = {
'debug' : true,
'port' : 8000,
'device_adapter' : "LT05P"
}
console.log("Hi! i'm options");
var server = gps.server(options, function(device, connection) {
console.log("Hi! i'm connection");
/******************************
LOGIN
******************************/
device.on("login_request", function(device_id, msg_parts){
console.log("Hi! i'm login_request",device_id);
//Do some stuff before authenticate the device...
// This way you can prevent from anyone to send their position without your consent
this.login_authorized(true); //Accept the login request.
});
device.on("login",function() {
console.log("Hi! i'm " + device.uid);
});
});
server.setDebug(true);
});
Вот функция где после запрос на вход, сервер отправит ответ.
this.authorize = function () {
var length = '05';
var protocal_id = '01';
var serial = f.str_pad(this.__count, 4, 0);
var str = length + protocal_id + serial;
this.__count++;
console.log(str,'str');
var crc = require('crc');
var crcResult = crc.crc16(str).toString(16);
console.log('crcResult',crcResult)
var buff = new Buffer('7878' + str + crcResult + '0d0a', 'hex');
console.log('after crc',buff)
this.device.send(buff);
};
Вот снимок экрана терминала:
Вот документация протокола ссылка, которую я использую:
Протокол для LT05 +
Как я могу отладить это?