电信nb-iot命令的几种状态及发送机制收集

时间:2024-03-16 10:18:51

电信nb-iot命令的几种状态及发送机制收集
平台命令的各状态
平台提供两种命令下发机制:命令立即下发:立即发送收到的命令,如果设备不在线或者没有收到指令则下发失败。命令缓存下发:平台收到命令后放入队列,在设备上线的时候,平台一次递送队列中的命令。
1、DEFAULT
PSM模式下,命令刚到平台时,它的状态是“DEFAULT”
2、PENDING(缓存的命令待送达)
查看命令是否能立即下发,如果不能,状态更新为“PENDING”
3、SENT(立即下发的命令待送达)
设备上报数据后,命令下发下去(但是不确定命令是否到达设备),消息是CON,状态更新为“SENT”
4、DELIVERED(已送达)
平台收到与CON消息对应的ACK后(但是不确定命令是否执行成功),状态更新为“DELIVERED”
5、SUCCESSFUL(成功)
平台收到命令的执行结果上报后将命令状态更新为“SUCCESSFUL”
6、FAILED(失败)
如果命令在下发过程中报错,则直接将命令状态更新为“FAILED”
7、EXPIRED(TTL超时)
在设定的时间内未执行下发命令操作,命令状态为“EXPIRED”
 8、TIMEOUT(等待ACK超时)
 如果ACK超时(PSM和DRX按照CoAP协议层超时时间,EDRX按照EDRX周期+往返时延(默认20s)),向IOCM更新设备状态为TIMEOUT
9、CANCELED(被取消)
先调用修改设备接口,然后再调用查询命令状态,状态为被取消“CANCELED”
注:若在设备对平台应答中实现了mid(非必填参数),并且命令执行结果已上报成功,则:
1) 命令执行结果相应中的状态(SUCCESSFUL/FAILED)会刷新到平台数据库中该命令记录;
2) 平台推送给APP Server的命令执行结果通知中携带commandId;
3) APP Server查询会得到该命令的状态为SUCCESSFUL/FAILED。
若在设备对平台应答中未实现mid,并且命令执行结果已上报成功,则:
1) 命令执行结果响应中的状态(SUCCESSFUL/FAILED)不会刷新到平台数据库中该命令记录;
2) 平台推送给APP Server的命令执行结果通知中不携带commandId;
3) APP Server查询会得到该命令的状态为DELIVERED。

 


PSM模式下,命令刚下发到平台时,它的状态是“DEFAULT”,然后查看是否能否立即下发,若不能,状态更新为“PENDING”;设备上报数据后,命令下发下去(但不确定命令是否到达设备),消息是CON,状态更新为“SENT”;平台收到与CON消息对应的ACK后(但不确定命令是否执行成功),状态更新为“DELIVERED”;平台收到命令的执行结果上报后将命令状态更新为“SUCCESSFUL”或“failed”。如果在下发过程中报错,则直接将命令状态更新为“FAILED”。

若平台缓存有多条命令,下一条命令的下发会在“收到本次下发的命令的CON消息的ACK后”下发。多条命令就这样依次下发。如果由于某种原因导致平台没有收到某命令ACK(原因是多样的,也有可能设备一直没有收到该命令而导致无法回复ACK),下发过程中断,下一条命令就不会下发,就会在下一次设备有数据上报时下发。

 

平台下发一个命令到设备,状态更新为sent,但不确定该命令是否到达设备。如果收到设备返回的ACK, 表明命令到达设备,状态就更新为delivered。对于一个设备,平台每一个时间点至多只允许一条命令处于sent状态,如果下发的CON消息未收到ACK消息,CoAP自带重发机制(算上那一次下发的,大概一共会重发五次),如果平台还是未收到ACK,就会将该命令状态更新为timeout。
平台不会让命令一直处于sent状态,因为这会阻塞后续命令的下发。

 

 

Q:请问在北向开发中,如何向设备立即发送数据,而不是缓存发送数据。

A:平台提供两种命令下发机制:立即下发:立即发送收到的命令,如果设备不在线或者设备没收到指令则下发失败。立即下发适合对命令实时性有要求的场景,比如路灯开关灯,燃气表开关阀。使用立即下发时,应用需要自己保证下发的时机。缓存下发:平台收到命令后放入队列。在设备上线的时候,平台依次下发命令队列中的命令。缓存下发适合对命令实时性要求不高的场景,比如配置水表的参数。NA向IoT联接管理平台下发命令时,携带参数expireTime(简称TTL,表示最大缓存时间)。expireTime=0:命令立即下发。expireTime>0:命令缓存下发。在创建设备命令API中,只要将expireTime参数设置为0,即表示立即下发。

Q:在进行OceanConnect立即命令下发时,平台显示历史命令等待发送,一直等到终端设备发送上报数据才下发,按照开发者论坛里面【自调试】立即命令下发失败怎么办? 进行操作,并没有立即发送。

A:网络注册成功后,如果一段时间内没有数据收发,链路就会被网络侧Release掉,这个是NB 网络特征决定的。 Connect-->idle-->psm, 链路被Release掉就进入IDLE了。NB 为低功耗设计, 进入IDLE 和PSM才能达到省电;  另外一直处于connect态也会占用带宽,NB是窄带应用,这样会导致上线率低。目前运营商有SIM卡业务可以不带PSM,但是还有IDLE (DRX or EDRX)。立即下发命令不成功,需要确认网络当时是否处于connect态。

电信nb-iot命令的几种状态及发送机制收集