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
代码仓库中有数据库等相关文件,项目是以若依为基础框架。