• 已删除用户
陈永强
陈永强
发布于 2026-07-23 / 0 阅读
0

IOT 设备数据采集(MQTT)

IOT 设备数据采集(MQTT)

MQTT 协议中的几个订阅主题

订阅主题:设备接受消息的标识,服务器往设备下发指令就是通过订阅的主题

发布主题:设备向上推送信息的标识,设备往服务器上上报自己数据的主题

上线主题:设备上线后发送一条上线信息给服务器

离线主题:设备断电往服务器发送的最后一条消息

一、使用设备

1.1 GeekOpen 智能插座(迷你智能转换器插座-WiFi版):支持MQTT、TCP 协议,通过wifi连接上传数据,数据内容:电压、电流、功率、用电量。当前设备采用的JSON格式的进行数据的采集和指令的下发。

GeekOpen官网:https://www.smart-bird.cn/index.html

此次设备的文档:http://v.smart-bird.cn/work/default/column/26

解析的js脚本

//解析设备上传数据
function getResult(msg){
    var str = '';
    for (var i = 0; i < msg.length; i++) {
        str += String.fromCharCode(msg[i]);
    }

    var data = JSON.parse(str)
    data["currents"] = ''+data["current"]+''
    return data
}
//下发指令解析
function sendCommand(str){
  var obj = str;
  return obj;
}

示例上传数据

{
	"messageId":"",
	"mac":"8CCE4E504FF9",
	"key":1,
	"voltage":225.412,
	"current":0,
	"power":0.035,
	"energy":195.963,
	"currents":"0"
}

1.2 有人DTU + 温湿度传感器:DTU作为数据透传,温湿度传感器上报温湿度数据,数据内容:温度、湿度,温湿度传感器的设备是Modbus RTU 协议,温湿度传感器配置成每秒上传一次数据。温湿度传感器配置需要找到对应厂家的文档,已经提前配置好。

有人官网:http://cloud.usr.cn/

示例数据

"010404013a025b9aee"

解析js脚本

//解析设备上传数据
function getResult(msg){
   var strHex =byteToHex(msg);
//忽略DTU的心跳包
  if(strHex === '7777772e7573722e636e'){
    return null;
  }
  var temp = parseInt(strHex.slice(6, 10),16)
  var hum = parseInt(strHex.slice(10, 14),16)
  var data = {
    temp : (temp/10).toFixed(1),
    hum : (hum/10).toFixed(1),
    strHex: strHex
    }
  return data;
}
//下发指令解析
function sendCommand(str){
  var obj = str;
  return obj;
}
function byteToHex(bytes){
  var hex="",len=bytes.length;
    for(var i=0;i<len;i++){
    	var tmp,num=bytes[i];
        if( num < 0){
        	tmp=(255+num+1).toString(16);
        }else{
        	tmp=num.toString(16);
        }
        if(tmp.length == 1){
        	tmp= "0"+tmp;
        }
        hex = hex+""+tmp;
    }
    return hex
}

二、代码仓库

GitLab代码仓库:http://gitlab.chenyongqiang.top/iot/ruoyi

代码仓库中有数据库等相关文件,项目是以若依为基础框架。