局域网通信

局域网通信是指移动端APP和设备在一个局域网内时,不通过云端直接进行通信。

局域网通信能够保证在外网异常的情况下对设备的控制。同时在局域网环境下还可以提供设备之间的高速访问能力及关联控制功能。

如果APP与设备在同一个局域网,同时还可以通过云端连接,则由APP开发者选择配置APP发给设备的控制指令优先走局域网还是优先走云端:

(1)如果优先走局域网,APP会通过局域网发送控制消息给设备,如果在超时时间内没有收到应答,则APP会再次尝试通过云端重发该消息,如果还是超时内没有收到设备的应答,则APP会返回发送失败
(2)如果优先走云端,APP会先通过云端发送控制消息给设备,如果在超时时间内没有收到应答,则APP会再次尝试通过局域网重发该消息,如果还是超时内没有收到设备的应答,则APP会返回发送失败
(3)app通过局域网发送消息给设备,前提条件是app完成了局域网内的设备发现,如果没有在局域网内发现设备,则无论是否设置了局域网优先,app都不会发送局域网消息给设备
(4)app不会对云端连接状态进行判定,也就是说,如果云端无效而局域网有效,但是设置了云端优先,还是会先走云端,超时后再走局域网

建议在云端和局域网都在线的情况下,移动端与设备的交互以及设备的数据上报仍然走云端。只有在外网异,只有局域网的时候,才切换到只使用局域网的状态。这样利于多用户间的数据同步,并能完整记录用户的行为数据和设备的历史数据,使云端数据分析的结果更可靠。

AC联网模块实现了设备与移动端的局域网通信的相关流程,设备端开发人员不需要在做额外的开发。

AC联网模块对发送给设备的局域网消息的处理与发送给设备的云端处理流程是一个流程,都在Src/ac_user_eventCallback.c中的UserCallback_RecvCtrlMsg函数中处理。开发者可以根据该函数的入参T_AC_SAL_MsgInfo *ptCtrlMsgInfo中的IsLANMsg的值来区分消息的来源:如果IsLANMsg=0,则消息为云端发送来的消息;如果IsLANMsg=1,则消息为局域网发送来的消息。发送消息给局域网的流程与发送消息给云端的流程是一样的,都是调用APIAC_Sal_SendMsg_NoRsp将消息发送给APP。具体开发示例参见上面的章节接收云端/移动端消息处理云端/移动端数据发送应答信息

注意
1.开发者在发送局域网消息时,需要在调用AC_Sal_SendMsg_NoRsp时将控制消息的描述信息结构体中的IsLANMsgClientId赋值给发送的消息的描述信息结构体中的IsLANMsgClientId。 2.局域网通信时,开发者不能调用带响应的发送接口AC_Sal_SendMsg_SynRspAC_Sal_SendMsg_AsynRsp

局域网加密

在进行局域网通信时,设备端与APP之间的链路可能会需要加密,为此Ablecloud为开发者提供了三种加密方式,分别是:
(1)动态加密。采用云端动态分配的密钥进行加密。
(2)静态加密。采用程序内置的默认密钥进行加密。
(3)不加密

开发者可以在AC_Hal_Init中通过调用API AC_SetLocalLevel来设置加密方式。