0

我有一个解析数据的 teltonika tcp 服务器,它工作正常,但我无法发送 gprs 命令,我不知道为什么或我做错了什么。以下是他们的网站文档:

首先,Teltonika 设备打开 GPRS 会话并将 AVL 数据发送到服务器(参考设备协议)。一旦发送了所有记录并且设备接收到正确的发送数据阵列确认,则可以将十六进制的 GPRS 命令发送到设备。ACK(来自服务器的 IMEI 确认)是一个单字节常量 0x01。从设备发送的每个数据数组的确认是四个字节的整数——接收到的记录数。

这是应该工作的 getinfo 十六进制示例第一个示例:Sending getinfo SMS command via GPRS Codec12

十六进制流中的服务器请求:000000000000000F0C010500000007676574696E666F0100004312

这是我的 nodejs tcp 服务器

const net = require('net');
const Parser = require('teltonika-parser-ex');
const binutils = require('binutils64');
const { parse } = require('path');


let server = net.createServer((c) => {
    console.log("client connected");
    c.on('end', () => {
        console.log("client disconnected");
    });

    c.on('data', (data) => {

   
        let buffer = data;
        console.log(buffer);
      
        let parser = new Parser(buffer);     

        if (parser.isImei) {
            c.write(Buffer.alloc(1, 1)); // send ACK for IMEI
        } else {


            let avl = parser.getAvl();
          
             console.log("parseRec", avl?.records?.map(({ gps, timestamp }) => {
                  return { gps, timestamp }
              }
              )
              )

            let writer = new binutils.BinaryWriter();
            writer.WriteInt32(avl.number_of_data);


            let response = writer.ByteBuffer;

           c.write(response); // send ACK for AVL DATA
            // console.log(test);
            
        c.write("000000000000000F0C010500000007676574696E666F0100004312"); // SEND GETINFO command that is not working
        }
 
    });

});

server.listen(1574, '0.0.0.0', () => {
    console.log("Server started");
});

最后一个 c.write("000000000000000F0C010500000007676574696E666F0100004312"); 应该发送 getinfo 命令,我应该得到答案,但我什么也得不到。

4

1 回答 1

0

我设法让它工作,我不得不将它转换为十六进制的缓冲区。看来我正在发送一个字符串。这是我必须修改的内容,以防其他人遇到我的问题:

c.write(Buffer.from('000000000000000F0C010500000007676574696E666F0100004312', 'hex'));
于 2022-03-03T08:39:38.260 回答