LHT65N传感器Hex数据解码异常原因及解决办法
LHT65N传感器数据解码无效问题及解决方法
问题背景
使用2台LHT65N传感器、Wisgate Edge Lite 2网关,将传感器负载转发至Mosquitto代理,通过mqtt.js接收并展示数据。接收的传感器数据包中data字段为Hex字符串,但使用自定义解码方法后,无法得到有效数据。
接收的数据包示例
{"applicationID": "1","applicationName": "ptxd_temp_humid","devEUI": "a84041a777864399","deviceName": "sensor_uphill","timestamp": 1674051438,"fCnt": 179,"fPort": 2,"data": "CBCF09200203017FFF7FFF","data_encode": "hexstring","adr": true,"rxInfo": [{"gatewayID": "ac1f09fffe08bf79","loRaSNR": 0,"rssi": -59,"location": {"latitude": 0,"longitude": 0,"altitude": 0}}],"txInfo": {"frequency": 868800000,"dr": 7}}
自定义解码方法
decoder(bytes: any) { var batt_v = ((bytes[0] << 8 | bytes[1]) & 0x3FFF)/1000; var temp_int = ((bytes[2] << 24 >> 16 | bytes[3])/100).toFixed(2); var temp_ext = ((bytes[7] << 24 >> 16 | bytes[8])/100).toFixed(2); var hum_int = ((bytes[4] << 8 | bytes[5])/10).toFixed(1); var ext_sen = { "0":"No external sensor", "1":"Temperature Sensor", }[bytes[6]&0x7F]; return { Ext_sensor: ext_sen, BatV: batt_v, TempC_SHT: temp_int, Hum_SHT: hum_int, TempC_DS: temp_ext, }; }
问题现象
预期解码后得到正常的传感器数据,但实际输出全为无效值。已排查网关配置、Hex转换器、LHT65N负载格式化工具,确认API密钥无误,均未解决问题。
解决方案
问题根源在于传入解码方法的参数类型错误:直接将Hex字符串传入了解码函数,而解码函数需要的是字节数组(UInt8Array)类型数据。将Hex字符串转换为Buffer(Node.js中Buffer属于UInt8Array的子类)后,解码恢复正常。
实现代码如下:
client.on('message', (topic, message: Buffer, packet: mqtt.IPublishPacket) => { let payload = JSON.parse(message.toString()) console.log(Buffer.from(payload.data, 'hex')) this.data = this.Decoder(Buffer.from(payload.data, 'hex')); console.log(this.data) })
内容的提问来源于stack exchange,提问作者ptxd
相关产品推荐
相关产品推荐

