1. 第三方硬件接入
1.1. NBIOT部分
硬件开发者需要从IoT平台服务商获取如下信息:
- 设备对接地址/端口号
- 数据协议
1.1.1. 相关名词解释
- 偏移值:该字段在本条消息码流中起止位置的字节下标,下标从0开始。
1.1.2. 厂家测试流程
- 厂家将imei号上报,由平台录入
- 给厂家指定目标ip和端口
- 上传数据
- 接收指令
1.1.3. 接入格式
第一个字节是地址域,列举如下:
-
0x0 定时上传
- 温度,2字节,16位有符号整数,摄氏度*100上传,偏移值1-3
- 湿度,2字节,16位有符号整数,百分比*100上传,偏移值3-5
- 电压,2字节,16位有符号整数,伏特*100上传,偏移值5-7
- 信号强度,2字节,16位有符号整数,dbm*100上传,偏移值7-9
- 倾斜x轴角度,2字节,16位有符号整数,角度*100上传,偏移值9-11
- 倾斜y轴角度,2字节,16位有符号整数,角度*100上传,偏移值11-13
- 倾斜z轴角度,2字节,16位有符号整数,角度*100上传,偏移值13-15
- 剩余电量,1字节,8位无符号整数,偏移值15-16
- 锁1,开光状态1字节,8位无符号整数,偏移值16-17(1为开,0为关)
- 门1,开光状态1字节,8位无符号整数,偏移值17-18(1为开,0为关)
- 锁2,开光状态1字节,8位无符号整数,偏移值18-19(1为开,0为关)
- 门2,开光状态1字节,8位无符号整数,偏移值19-20(1为开,0为关)
-
0x02 告警上传
- 告警类型1字节,偏移值1-2,候选项值如下:
- 1: '门磁破坏',
- 2: '震动告警',
- 3: '水浸告警',
- 4: '烟雾告警',
- 5: '温度警告',
- 6: '湿度警告',
- 7: '长时间未关门',
- 8: '低电量',
- 9: '信号强度过弱'
- 10:'烟雾告警'
- 告警值2字节,偏移值2-4,当告警随值出现时,需要传递
- 告警类型1字节,偏移值1-2,候选项值如下:
-
0x3 ping,每次开机向服务器发送数据
- 序号1字节,偏移值1-2
-
0x30 参数下发
-
键1字节,偏移值1-2
命令下发类型 Key(8位无符号0~255) Value(32位有符号) 温度报警阈值 0x51 摄氏度 湿度报警阈值 0x52 百分之 上传数据间隔 0x53 分钟 检查传感间隔 0x54 分钟 NB附着间隔 0x55 分钟 重传次数 0x56 次 检查水浸间隔 0x57 分钟 检查震动间隔 0x58 分钟 水浸事件最小间隔 0x59 秒 震动事件的最小间隔 0x5a 秒 震动敏感度 0x5b 一个数值,范围0~100,越高越敏感,默认值50 -
值4字节,偏移值2-6
-
-
0x31 开锁下发
- 开锁指令1字节,值为01,偏移值1-2
-
0x32 key下发
- key16字节,偏移值1-17
上传消息成功有返回响应数据,响应数据默认为AAAA0000
1.1.4. 设备接入平台
设备接入IoT平台后,IoT平台才可以对设备进行管理。本节基于NB-IoT设备进行说明。
设备接入平台时,需要保证IoT平台已经有对应应用,并且已经在该应用下注册了此设备。
- 设备上电后,使用串口工具连接设备。
- 使用串口工具依次执行AT命令。如下AT命令仅供参考,具体命令集请向相应的模组厂商获取。
AT命令 | 作用 | 备注 |
---|---|---|
AT+CMEE=1 | 报错查询。 | 标准AT指令 |
AT+CFUN=0 | 关机。设置IMEI和平台IP端口前要先关机。 | 标准AT指令 |
AT+CGSN=1 | 查询IMEI。IMEI为设备标识,应用服务器调用API接口注册设备时,nodeId/verifyCode都需要设置为IMEI。 | 标准AT指令 |
AT+NTSETID=1,xxxx | xxxx为IMEI。如果查询不到可自行设置IMEI,IMEI必须是唯一的,不能与其他设备重复,且只能设置一次。IMEI为设备标识,应用服务器调用API接口注册设备时,如果设备使用海思芯片,则nodeId/verifyCode都需要设置成IMEI;如果设备使用高通芯片,则nodeId/verifyCode都需要设置成urn:imei:IMEI。 | 海思芯片私有AT指令,在flash中保存IMEI。应用服务器在向平台进行设备注册时,使用此参数,其他芯片或模组厂商可参考实现。 |
AT+NCDP="IP","port" | 设置设备对接的IoT平台的IP地址和端口号,5683为非加密端口,5684为DTLS加密端口。 | 海思芯片私有AT指令,在flash中保存IP和端口。应用服务器在向平台进行设备注册时,使用此参数,其他芯片或模组厂商可参考实现。 |
AT+CFUN=1 | 开机。 | 标准AT指令 |
AT+NBAND=5 | 设置频段。 | 海思芯片私有AT指令,在flash中保存频段。设备在入网时,使用此参数,其他芯片或模组厂商可参考实现。 |
AT+CGDCONT=1,"IP","CTNB" | 设置核心网APN。APN与设备的休眠、保活等模式有关,需要与运营商确认。 | 标准AT指令 |
AT+CGATT=1 | 入网。 | 标准AT指令 |
AT+CGPADDR | 获取终端IP地址。 | 标准AT指令 |
AT+NMGS=x,xxxx | 发送上行数据。第1个参数为字节数,第2个参数为上报的16进制业务码流。 | 海思芯片私有AT指令,初次发送数据时,完成设备注册;后续发送数据时,仅发送数据。其他芯片或模组厂商可参考实现。 |
AT+NQMGR | 接收下行数据。 | 海思芯片私有AT指令,查询接收buffer中可以接收的数据量,以及当前总共接收的消息数和丢弃的消息数。其他芯片或模组厂商可参考实现。 |
AT+NMGR | 读取数据。 | 海思芯片私有AT指令,读取从IoT平台(LWM2M SERVER)接收到的数据。其他芯片或模组厂商可参考实现。 |
1.1.5. 设备数据上报
在设备侧执行AT命令(AT+NMGS=x,xxxx),使设备上报数据。
发送上行数据。第1个参数为字节数,第2个参数为上报的16进制业务码流。
1.1.6. 命令下发
在设备侧执行AT命令(AT+NMGR),读取从IoT平台接收的命令信息。
命令缓存时间默认为48小时。
1.2. 蓝牙
1.2.1. 基础概念
- BLE分为三部分:Service、Characteristic、Descriptor,这三部分都由UUID作为唯一标示符。一个蓝牙4.0的终端可以包含多个Service,一个Service可以包含多个Characteristic,一个Characteristic包含一个Value和多个Descriptor,一个Descriptor包含一个Value。service是characteristic的集合.一个characteristic包括一个单一变量和0-n个用来描述characteristic变量的descriptor。Descriptor用来描述characteristic变量的属性。例如,一个descriptor可以规定一个可读的描述,或者一个characteristic变量可接受的范围,或者一个characteristic变量特定的测量单位。一般来说,Characteristic是手机与BLE终端交换数据的关键.。
- 消息传递以字节为单位编码,每个字节实际由8位二进制位组成。
1.2.2. 说明
在一个连接周期内,只要在刚连接的时候传递密码验证通过,在这个连接周期内后续的操作都不让它再发送key。
最核心的就是,初始化时通过蓝牙或者nb设定一个16字节的key,蓝牙连接后,先向Characteristic发送这个key,格式示例如下:
0x01, 0x00, 16字节的key
硬件内部程序做比对,如果通过,那么这次建立的连接有效;否则返回提示认证失败,并断开连接
如果因为特殊情况,使硬件内部存储的key与服务器中存储的不一致,那么使用重置命令头+imei号使硬件再次通过nb更新,保持连接,当nb更新后可通知手机端key已更新,命令格式如下:
0x01, 0xAB,imei号
1.2.3. 规则
第一个字节表示消息方向:0x01是向设备下发,0x10是从设备上传;概念定义如下:
1.2.3.1. 下发
第二个字节表示用途,完整示例如下:
- 0x01, 0x00,携带认证key,做连接认证
- 0x01, 0xAA,验证后,携带新key,通过蓝牙更新key
- 0x01, 0xAB,携带imei号,将imei号每一位都转成16进制字节,设备验证通过后,通过nb更新key
- 0x01, 0x03,验证后,通过nb更新当前设备的告警参数
- 0x01, 0x02,验证后,设置携带ip和端口,ip按12个字节,每段3个字节,不足三位时在前补0
- 0x01, 0x31,验证后,开锁
1.2.3.2. 上传
第二个字节表示用途,完整示例如下:
- 第二个字节0x02表示这一条消息是操作响应,示例如下:
- 0x10, 0x02, 0x00,提示设备尚未初始化,未更新key
- 0x10, 0x02, 0xAA,提示通过蓝牙更新key成功
- 0x10, 0x02, 0xAB,提示通过NB更新key成功
- 0x10, 0x02, 0x31,提示开锁成功
- 0x10, 0x02, 0x04,提示key获取有问题