每一个网关中都会有配置点表,它会在里面写入一些网关运行过程中所需要的配置项,比如连接的服务器地址、当前固件版本号等。而点表最重要的作用就是定义网关需要采集或者处理的设备点抽象,实际开发中我们会将每个需要关注的终端设备抽象成一个具体的数据点,这个点里通常包含key:代表终端设备的唯一键值
、name:当前点代表的设备
、type:当前设备的数据类型,比如温度传感器是浮点型的,灯是bool类型的
,其它的成员可能略有不同,比如modbus设备会有具体的modbus协议地址。点表不是一成不变的,因为网关是个通用品,很可能对下采集的设备会发生改变。所以程序设计时候必须根据实际情况来,直接在程序中写死需要处理的数据点不具备扩展性。
真实物联网场景中,点表通过客户端界面(上位机或者web页面)编辑,生成json文件后下发给设备,设备解析使用。下发过程详见网关开发指导--设备搜索响应进程
,注意网关设备端进程在调试过程中,可以先固定一个目录:比如/mnt/config
,把点表固定放到此目录,所有进程共享。在搜索响应进程
获取点表之前,其它模块调试时候可以先提前放一个到目录使用,最后再联调即可。PS:这里边带注释,如果要使用,需要去掉注释!
点表(1.配置 2.数据点,下接设备)
代码属于JSON
//当前的配置信息
{
"version": "v1.0", //协议版本,方便后续升级
"report": { //设备上报属性
"type": 1, //0-不上报,客户端主动采集;1-变化上报,即连续2次值不相等;2-周期上报
"period": 5 //上报周期时间,单位秒,仅在type=2时有效
},
"mqtt_server": { //mqtt服务器配置
"addr": "192.168.x.x",
"port": 1883
},
"mb_dev": { //modbus设备地址配置
"addr": "192.168.x.x",
"port": 502
},
"mb_app": { //手机IP地址
"addr": "192.168.xx.xx",
"port": 8887
},
*************************************************************
"stm32":{
"data": [{
//设备的抽象 key:代表终端设备的唯一键值、name:当前点代表的设备、type:当前设备的数据类型,比如温度传感器是浮点型的,灯是bool类型的
"key": 301, //第一个点比较特殊,根据自己组实际传感器的实际情况来,可以修改
"name": "sensor", //数据点名称(确保单个设备内的唯一性)
"type": 3 //数据点值的类型,1:bool类型 2:int型 3:float型
},
{
"key": 302,
"name": "bat", //电池电量
"type": 3
},
{
"key": 303,
"name": "light", //电灯
"type": 1
}
]
},
*****************************************************
"m0": {
"data": [{
"key": 1, //数据点唯一标识(确保数据点表内的唯一性)
"name": "temperature", //数据点名称(确保单个设备内的唯一性)
"type": 3 //数据点值的类型,1:bool类型 2:int型 3:float型
},
{
"key": 2,
"name": "humidity",
"type": 3
},
{
"key": 3,
"name": "ill",
"type": 2
},
{
"key": 4,
"name": "light",
"type": 1
},
{
"key": 5,
"name": "alarm",
"type": 1
},
{
"key": 6,
"name": "fan",
"type": 2
}
]
},
"modbus": {
"data": [{
"key": 101, //数据点唯一标识(确保数据点表内的唯一性)
"name": "temperature", //数据点名称(确保单个设备内的唯一性)
"addr": 30001, //modbus地址,根据设备类型选择,温度传感器是只读的输入寄存器
"type": 3 //数据点值的类型,1:bool类型 2:int型 3:float型
},
{
"key": 102,
"name": "humidity",
"addr": 30003, //湿度传感器是只读的输入寄存器
"type": 3
},
{
"key": 103,
"name": "air-switch",
"addr": 1, //空调开关是线圈寄存器
"type": 1
},
{
"key": 104,
"name": "air-temp",
"addr": 40001, //空调温度控制,保持寄存器
"type": 3
},
{
"key": 105,
"name": "light",
"addr": 2, //灯控,线圈寄存器
"type": 1
}
]
},
"mbapp": {
"data": [{
"key": 201, //数据点唯一标识(确保数据点表内的唯一性)
"name": "ill", //数据点名称(确保单个设备内的唯一性)
"addr": 40001, //modbus地址,根据设备类型选择,温度传感器是只读的输入寄存器
"type": 2 //数据点值的类型,1:bool类型 2:int型 3:float型
},
{
"key": 202,
"name": "x",
"addr": 40002, //湿度传感器是只读的输入寄存器
"type": 3
},
{
"key": 203,
"name": "y",
"addr": 40003, //空调开关是线圈寄存器
"type": 3
},
{
"key": 204,
"name": "z",
"addr": 40004, //空调温度控制,保持寄存器
"type": 3
},
{
"key": 205,
"name": "light",
"addr": 1, //灯控,线圈寄存器
"type": 1
},
{
"key": 206,
"name": "alarm",
"addr": 2, //报警
"type": 1
}
]
}
}