家庭自动化架构:使用ESP8266的设计与实现
摘要
本文提出了一种基于物联网(IoT)应用于家庭自动化的解决方案的设计方法与实现细节。该解决方案采用系统级芯片ESP8266实现。所提出的架构允许通过家庭无线网络连接的传感器和执行器(客户端节点)之间进行交互。该协议在TCP/IP模型的应用层实现,同时对TCP/IP协议栈的其余层进行了适当调整,具体如下:1)物理层采用IEEE 802.11标准,定义发射器功率和接收器灵敏度等基本参数;2)媒体访问控制采用CSMA/CA,允许多个站点共享同一传输介质;3)网络层中,节点间的交互配置为_mesh模式_,每个节点使用基于其MAC地址的32位标识符;4)传输层采用TCP协议,以确保数据传输的可靠性;5)应用层采用MQTT协议。为了评估所提出协议的性能,制造了客户端节点的原型。同时开发了一款用于基于Android的移动设备的应用程序,使用户能够通过自己的移动设备控制和管理网络。
一、引言
智能环境(智慧城市、智能家居等)解决方案的开发是当前研究领域的热点。如今,生活水平表明,人们在日常生活中追求更高的安全性和舒适性,同时希望其生活环境保持不变或仅因技术而产生不易察觉的改变,例如安装简便的设备[1]。市场上有众多技术供应商致力于开发家庭自动化解决方案,以促进福祉与安全[2]。然而,遗憾的是,大多数市场上的技术解决方案均为专有系统,扩展性差且适应性低。
家庭自动化技术在其网络架构中使用不同的协议。目前为家庭自动化网络设计和使用的总线通信协议通常包括:X‐10、LonWorks、ModBUS、EHS、BatiBus[3]。前两种协议是专有协议,而其他协议是标准化协议。家庭自动化中的主要无线通信技术是:Zigbee[4]和Z波[5]。
本工作的贡献主要集中在物联网家庭自动化架构的概念设计与实现。该架构包括定义四个实体:应用层协议(开放家庭自动化协议(OHAP))、拓扑结构、实现中使用的协议集和库,以及最后用于配对新节点和配置主节点的交互过程。
OHAP允许安装在家庭自动化网络中的传感器和执行器之间进行交互。用户与系统的交互通过移动设备上的Android应用程序完成。该Android应用程序显示执行器的状态并执行自动化任务。所提出的协议是可靠且安全的。
本文组织如下:第二节总结了相关工作。第三节介绍了所提出的系统架构。第四节描述了所提出的家庭自动化协议。第五节展示了实现的实践结果。第六节为结论和未来工作。
二、相关工作
一些研究工作展示了物联网技术在家庭自动化中的应用。例如,[6]提出了一个物联网应用程序的设计与实现,其中包括利用全球移动通信系统(GSM)实现远程通信的家庭监控与控制网络开发。[7]的作者提出了一种协议,能够在不使用互联网站点或服务提供商的情况下运行。该工作通过用户数据报协议(UDP)发送封装的消息,以高效利用网络带宽和CPU资源。参考文献[8]分析了IEEE 802.15.4(ZigBee)标准及其在家庭自动化环境中的可靠性。它在数据链路层采用基于CSMA/CA的简单轻量级协议进行消息传输。[9]的作者构建了一个家庭自动化控制网络,无线连接网络中的所有节点。该系统由一个控制节点和多个外围节点组成。外围节点能够连接并控制房屋内的各种设备。用户通过托管在中央控制节点上的网页应用来控制系统安装。
在之前的工作[1]中,我们提出了一种用于智能家居无线总线(WBD)协议开发的简单方法的设计与实现。该方法在物理层采用的技术是RF24L01。在此方案中,我们使用基于Wi‐Fi技术的网状网络来解决可扩展性和覆盖范围的问题。此外,还实现了认证和隐私协议以保障网络安全。
III. 系统架构
图1展示了所提出系统的总体概述。该系统由一个无线传感器与执行器网络(WSAN)组成,其中包括多个传感器/执行器节点,一个服务器和一个包含多个客户端的无线局域网(WLAN)。客户端是带有人机界面(HMI)的移动Android设备。客户端与网关之间的通信通过无线保真技术实现。传感器/执行器节点之间的交互则使用不同的协议进行。该架构还考虑了新节点的配对过程。
A. 网络拓扑
该架构使用两种类型的网络。第一种是无线传感器执行网络(WSAN),第二种是无线局域网(WLAN)。无线传感器执行网络由传感器/执行器节点组成,这些节点采用ESP8266 WiFi模块实现。这些节点可承担三种不同角色之一:边缘节点、执行器节点(灯泡、锁、电机等)或传感器节点(开关、运动、亮度等)。无线局域网由移动设备、服务器和路由器组成。移动设备提供用户与家庭自动化网络之间的交互。节点由电网供电。
无线传感器执行网络(WSAN)与无线局域网(WLAN)之间的通信通过网关进行。该组件实际上是服务器和边缘节点的组合。网关通过边缘节点将来自传感器的信息转发到服务器,以及从服务器转发到执行器。传感器节点获取用户的控制信息,并通过网关将其发送到服务器。执行器节点接收来自服务器的指令并执行。无线局域网中的路由器设备通过无线接口实现移动设备与服务器之间的连接。
服务器是整个网络的核心组件,承担以下功能:
- 首先,它管理整个网络。它具有两个接口:第一个接口连接到无线传感器执行网络(边缘节点),第二个接口连接到无线局域网;
- 其次,它将信息存储在MySQL数据库中;该数据库存储节点位置、执行器状态、节点的配对和配置;
- 第三,它还管理配置服务;
- 最后,它托管并管理一个用于用户交互的发布/订阅类型的应用程序。
B. 网络协议和库
无线传感器执行网络(WSAN)的网络层使用网状网络,支持多跳,从而实现远距离通信和网络可扩展性;所使用的实现库是painlessMesh[10]。该实现在ESP8266模块的序列号基础上进行寻址;节点通过芯片ID(32位)唯一标识。网状网络具有多个优点和缺点。
第一个优点是支持多跳,因此可以覆盖更大的区域。第二个优点是具有较强的鲁棒性,因为当某个节点发生故障时,数据可以通过多条路径传输。缺点包括在使用多个跳数时产生的延迟,以及由于所有节点都充当路由器而导致的更高功耗。
在应用层,系统实现了一种发布/订阅模型。最常见的发布/订阅模型包括基于主题的模型、基于内容的模型和基于类型的模型[11]。我们决定使用MQTT协议[12],因为它在ESP8266上具有稳定的实现(Mosquitto MQTT代理)。MQTT协议采用基于主题的订阅模型。
MQTT协议由与服务器通信的客户端组成;该服务器也被称为“代理”。Mosquitto MQTT代理安装在树莓派上。客户端可以是信息的发布者(传感器节点)、订阅者(执行器节点),或带有发布/订阅客户端应用程序的移动设备。信息按主题的层次结构进行组织。节点的主题即为其位置。当一个节点添加到网络时,会配置其位置。此信息存储在MQTT服务器的数据库中。信息经过验证后,将发送给属于该位置的节点。
WSAN与无线局域网之间的通信通过网关实现。该网关由一个作为边缘节点的ESP8266模块和一台运行MQTT网关及Mosquitto MQTT代理的树莓派组成。用于painlessMesh的MQTT网关基于[13]。边缘节点通过串行通信将无线接收到的消息重新传输到树莓派。它监听串口中的消息,并将其重新传输到MQTT服务器。该库还执行反向操作:MQTT服务器将消息发送给MQTT网关;MQTT网关获取这些消息并将其重新传输到串口;边缘节点从串口接收消息,再通过无线方式重新发送。
painlessMesh库存在一个限制:ESP8266的处理能力/内存有限。为了避免使网络过载并导致其不稳定,建议尽量减少每分钟发送的消息数量(尤其是广播消息)[14]。所提出的智能家居应用的优势在于,它不使用广播消息,且每分钟的消息数量也减少了。执行器节点仅用于开关控制。
IV. 开放式家庭自动化协议
OHAP协议有四个过程用于初始化家庭网络:(1)网关配置(第四节-A);(2)mesh网络配对(第四节-B);(3)信息定义(第四节-C);以及(4)交互定义(第四节-D)。完成初始化过程后,家庭自动化网络即可使用。所有过程均通过Android应用程序(第四节-E)执行。该应用程序通过不同类型的帧与传感器、执行器和网关进行交互(第四节-F)。
A. 网关配置过程
配置网关的过程从开启网关开始。首次开启网关时,其配置文件为空,网关将以AP模式启动,SSID为“OHAP‐#MAC#”,其中#MAC#指的是_mesh接口的MAC地址。然后,用户应运行Android应用程序。当应用程序启动时,会请求本地WLAN的认证信息(SSID和密码)。之后,应用程序通过接收信号强度指示(RSSI)从高到低对搜索到的网关进行排序。刚开启的网关应位于列表顶部。一旦用户选择该网关,应用程序将默认生成SSID为“UHAP‐#MAC#”,并为网状网络生成一个随机密码。应用程序发送一个扩展认证帧(包含WLAN SSID、WLAN密码、Mesh SSID和Mesh密码)。
当网关接收到该扩展认证帧后,会存储这些信息并立即重启。当配置文件中已存在值时,网关将以_mesh模式启动。
B. 网状网络配对过程
通过客户端‐服务器配置完成添加新传感器/执行器节点的配对过程。传感器/执行器节点充当服务器,而移动设备则作为客户端。节点最初配置为接入点(AP)模式,并实现一个超文本传输协议(HTTP)服务器。配对过程逐个节点进行,通过移动应用程序在节点与移动设备之间建立通信。移动设备向节点发送配对信息(凭证),该信息包括服务集标识符(SSID)、端口和mesh网络的密码。
如前所述,一个节点以AP模式作为服务器建立,并且每个节点都有特定的SSID。移动设备会扫描所有可用的WiFi网络,查找现有节点的SSID。为了配置一个节点,用户必须靠近该节点,因为应用程序会选择RSSI信号强度最高的节点的SSID。移动设备向选定的节点发送一条初始化消息,以点亮指示灯LED,并询问所选节点是否为用户所需的节点。
如果是目标节点,则执行凭证传输。否则,选择下一个RSSI水平最高的节点,重复该过程。
节点配置完成后,该节点将停止在AP模式下运行,并使用提供的凭据加入网状网络。另一方面,移动设备与服务器通信。为了能够与服务器通信,移动设备需要获取IP地址。该IP地址通过网关中实现的本地DNS获得。
C. 信息定义过程
此过程允许节点具有名称,这些名称可由家庭住户理解。节点名称通常与节点位置相关。这些名称有助于住户熟悉各个节点。另一个需要添加的信息是主题,这些主题可被视为场景。名称和主题用于促进家庭自动化交互的定义。
D. 交互定义过程
在完成网络配对过程后,所有节点都属于网状网络,但节点之间尚不进行交互。最初,用户必须添加所有交互。当交互建立后,用户可以更改节点之间的交互,或在需要时将其移除。交互如下:
1) 添加:此功能允许用户在传感器和执行器之间添加交互,一个执行器可以匹配 n(位置中的传感器数量)个传感器。要添加交互,用户需选择哪个传感器控制特定的执行器。
2) 更改:此功能用于更改先前建立的交互。该过程涉及向服务器发送一条包含执行器、当前传感器和新传感器的交互消息。此信息存储在数据库中,并以单播模式发送到执行器节点,使其知晓当前是哪个传感器在对其进行控制。
3) 移除:此功能用于移除已建立的交互。该过程涉及向代理发送一条交互消息。该消息包含要移除的交互所对应的执行器ID和传感器ID。
E. Android应用程序
移动设备在安卓应用程序中部署一个仪表板。该应用程序包含一个发布/订阅客户端模块,与MQTT代理进行交互。此外,它还与服务器上的配置服务进行交互;允许执行网络配对、在节点之间添加交互,以及执行对执行器的远程控制。
F. 消息帧
移动设备与服务器之间用于信息交换的消息使用MQTT进行编码。这些帧通过主题“mobile”并使用请求‐响应机制发送。这些消息采用JSON格式。
表I:通用帧的帧类型
| 描述 | ID |
|---|---|
| 配置帧 | 1 |
| 网络配对帧 | 2 |
| 交互定义帧 | 3 |
| 信息帧 | 4 |
| 控制帧 | 5 |
通用帧结构如图2所示。该帧包含三个字段:信息类型、命令和有效载荷。信息类型根据功能对帧的类型进行分类(见表I)。命令字段的定义取决于信息类型,表示帧的具体类型。最后一个字段是有效载荷,其传输内容取决于前两个字段。
家庭自动化通过使用字段information type标识的四种类型的帧来实现。家庭自动化协议执行四种过程:网关配置、_mesh网络配对、交互定义,以及最终的家庭自动化控制。
1) 配置帧:这些帧(图3)用于在首次启动时执行网关配置。此类帧仅有一个命令,该命令指定在有效载荷中传输一个扩展认证帧。
2) 网络配对帧:这类帧用于将节点添加到网络中。表II列出了用于执行网络配对的四个命令。第一个命令指的是验证帧;该帧在节点与移动设备通过AP模式建立连接后发送。此帧不包含有效载荷。
当节点接收到验证帧时,节点会启用一个验证LED并回复确认帧。该帧的有效载荷如图4a所示。当用户确认该节点为所选节点后,移动设备会向该节点发送包含网关中配置的SSID和密码信息的网状网络认证帧(图4b)。同时,移动设备将确认帧转发至网关;网关根据确认帧中包含的信息在数据库中添加新节点。
表II:网络配对命令
| 描述 | ID |
|---|---|
| 验证帧 | 1 |
| 确认帧 | 2 |
| 网状网络认证帧 | 3 |
确认帧
节点ID 节点类型
网状网络认证帧
SSID 密码
3) 信息定义帧:这些帧提供节点的位置定义。此外,它还添加和移除主题。表III显示了命令及其编码。图5显示了更新节点位置帧。添加/移除主题帧只有一个字段;该字段是主题的名称。
表III:信息定义命令
| 描述 | ID |
|---|---|
| 更新节点位置帧 | 1 |
| 添加主题帧 | 2 |
| 移除主题帧 | 3 |
节点ID 位置
4) 交互定义帧:此类帧指的是用于定义传感器与执行器节点之间交互的信息。交互通过主题实现。节点(传感器/执行器)订阅特定主题。主题被定义为特定场景。有两种命令用于管理传感器与执行器之间的交互:添加帧(命令值0)和移除帧(命令值1);即向主题添加节点或从主题移除节点。该信息通过添加/移除帧(图6)在网关数据库中进行更新。
5) 控制帧:这些帧用于更改主题的状态。传感器节点发布主题的更新状态。执行器节点订阅该主题,并在主题更新时更改其状态。有一种类型的控制帧命令,即更改状态。图7展示了此帧。对于开关型执行器,状态值为(0) 关闭,(1) 开启,以及(2) 拒绝当前状态。
G. 安全性
1) 认证:确保网状网络安全的一种方法是将其设为私有的。这可以防止未授权用户通过无线方式连接到网络并捕获信息甚至访问其他节点。因此,要访问我们项目的网状网络,需要提供访问密码。
2) 加密:我们使用AES‐256加密算法。所有由mesh中的节点传输的信息都会被加密,并发送到网关节点。网关节点对信息进行解密,然后串行发送至服务器。同时,服务器的信息被加密后发送到mesh,每个节点负责解密接收到的信息。
3) 服务器-移动设备数据传输:数据帧仅包含头部和标识符;端点能够解析它们。
V. 结果
A. 场景定义
所有测试中均有两个监控设备:一个用于发射器,另一个用于接收器。在这种情况下,计算机与时区和时间戳同步;通过串行通信与节点(无论是发射器还是接收器)建立连接。一旦执行控制命令或状态更改命令,测量设备便会存储操作执行的时间(精确到毫秒),从而计算出操作的延迟时间。
B. 结果
在所提出的系统中,时间是一个关键因素,反映了良好的服务质量(QoS)和系统性能。因此,分别对服务器上的函数执行时间以及节点上的响应时间进行了测量。这些测量在多种环境和条件下进行。此外,在相同条件下进行了多次测量,以获得95%的置信区间和平均值。
C. 测量1:节点向家庭自动化网络的聚合
为了将节点添加到网络中,第一步是执行节点与移动设备之间的同步。传感器节点平均需要 5.31±0.3665 秒来完成同步,而执行器节点完成相同任务需要 4.83 ± 0.2405秒。下一步是将节点添加到网状网络中。在此过程中,节点更改操作模式,断开与移动设备的连接,并加入mesh。传感器节点更改模式的过程需要 5.86 ± 0.4351秒,执行器节点需要 4.92 ± 0.3185秒。
最后一步是将节点添加到家庭自动化网络中。在此过程中,网状网络节点会向服务器发送请求,以加入家庭自动化网络。聚合过程的平均时间为:传感器 11.56 ± 0.4281秒,执行器 22.44 ± 0.3518秒。执行器节点的时间相较于传感器节点更高,具体为10.88秒。这是因为执行器节点在加入网络前需要执行更多的过程。
通常情况下,节点执行的所有过程的总时间约为二十到三十秒(执行器时间为 22.73 ± 1.2283秒,传感器时间为 32.19 ±0.9108秒),这是确保节点正确聚合到家庭网络所需的最短时间。
D. 测量2:设备间距离变化时的延迟
图8展示了用于进行这些测量的两个场景。在第一个场景中,传感器节点保持在服务器旁边,而执行器节点逐渐远离。在第二个场景中,传感器节点和执行器节点均远离服务器。如图9所示,第二个场景的延迟时间最长。这是因为所有消息都必须经过服务器才能到达节点,显然,服务器与节点之间的距离越远,消息到达目标节点所需的时间就越长。
另一方面,当从移动设备操作执行器时,其响应时间取决于服务器与家庭路由器之间的距离。图1显示了消息从移动设备到节点所经过的路径。在此方案中,影响响应时间的主要因素是路由器和服务器。由于存在从节点到移动设备的确认消息,因此从移动设备执行操作所需的总时间为往返时间。
VI. 结论
本研究表明,所使用的网状网络在延迟方面表现良好,即使进行多跳通信也是如此。然而,当操作信道拥塞时,控制消息的发送会出现延迟。此外,将服务器中进程的执行时间与信息传输传感器-执行器时间相关联时,结果发现网络内的传输时间大于服务器中的处理时间,因此随着网络传输信道趋于饱和,延迟增加。网络达到最大饱和时的延迟为130毫秒。
MQTT协议有助于减轻网状网络的负载,促进移动设备与服务器之间的通信。为了实现家庭控制,移动设备订阅“mobile”主题以接入家庭自动化网络。
根据结果,建议将服务器尽可能靠近路由器放置,并将其连接到网线,以最大程度地减少产生的延迟。家庭自动化系统通过家庭的无线保真网络进行通信,从而实现对执行器的本地控制。该原型可以通过使服务器从互联网上可访问来扩展,从而实现多个应用程序对执行器的远程控制。节点要控制的电负载类型为 ON/OFF,但由于所用设备没有硬件限制,未来可以开发支持具有多个功率等级的设备。
MQTT协议提供了在网络中实现更复杂的传感器和执行器的可能性,例如人脸识别传感器,其可对网络内的设备进行操作。
针对在使mesh的操作信道饱和时出现的问题,一种可能的解决方案是:当检测到网络拥塞时,由服务器发送配置消息,编程节点自动切换信道。
在原型中未对移动设备的用户进行认证。可以实现诸如RADIUS之类的认证服务器。

549

被折叠的 条评论
为什么被折叠?



