APP下载

基于HarmonyOS的智能家居App设计与实现

2023-05-08孙健

电脑知识与技术 2023年9期
关键词:云平台智能家居

孙健

关键词:HarmonyOS;智能家居;云平台

0 引言

HarmonyOS 是华为基于OpenHarmony 开源项目开发的面向多场景智能设备的商用版本,在遵循AOSP(Android Open Source Project) 的开源许可上实现的新一代智能终端操作系统[1]。在我国信创产业蓬勃发展的背景下,HarmonyOS比Android在物联网领域具有先天优势[2]。在物联网诸多应用场景中,智能家居是物联网技术融入生活的典型案例,开发一款基于HarmonyOS的智能家居App既能够使人们享受到科技发展带来的便捷,又能够发展壮大国产自主可控的鸿蒙生态。

1 需求分析

本文采用移动端App+云的技术方案[3],基于Har?monyOS的智能家居App以智能控制家居环境中的空调设备为例,通过温度传感器获取室内温度信息,并将温度的数据上报给物联网云平台[4]。智能家居App从物联网云平台获取访问认证后,可查看当前各房间的温度信息,当需要时可以通过智能家居App远程控制家中的空调设备进行温度调节,具体功能的需求描述如下:

1) 进行页面的设计与开发;

2) 完成App与物联网云平台的交互认证;

3) 在页面上绑定设备;

4) 数据展示界面能展示卧室、客厅温度传感器的实时数据;

5) 设备控制界面能实现自动控制、手动控制两种模式对卧室空调和客厅空调控制工作;

6) 能实时监测设备状态(在线、离线、运转情况),有异常时能实现告警提示;

7) 能充分利用了组件的拉伸、占比、延伸和均分能力,配合媒体查询以及多态组件Swiper,实现在不同的终端设备上有不同的显示方式,适配不同的设备屏幕形态,从而实现应用的“一次开发,多端部署”。

2 系统总体设计

基于HarmonyOS的智能家居App连接在华为云上用Docker容器技术部署的ThingsBoard物联网云平台,通过MQTTBox软件模拟物联网设备的数据上报给ThingsBoard,智能家居App成功获取到ThingsBoard云平台的安全访问认证后,从ThingsBoard云平台获取设备数据并展示数据,当需要时进行设备监控和远程控制设备。

3 系统详细设计

3.1 云平台搭建

ThingsBoard是一种开源物联网云平台[5],智能家居设备数据要上报到ThingsBoard 平台,需要在ThingsBoard 平台上有对应的设备信息,因此需要在ThingsBoard平台上添加并配置设备相关的设备配置、设备之间的关联关系等信息。

1) 添加设备配置

设备配置主要用于确定设备类型,可通过设备配置信息对设备进行分类过滤,查找到合适的设备进行页面渲染。智能家居App需要添加2个设备配置,如表1所示。

2) 添加设备

在设备配置添加完成后,需要添加设备。Things?Board平台中的设备主要作为真实设备的映射,所有真实设备需要在ThingsBoard平台中创建对应的设备。通过侧边栏单击设备切换主页,找到主页右上角“+”号,选择添加新设备,输入设备名称、设备标签、选择添加的设备配置、输入设备说明、单击添加,添加后可在设备列表查看到添加的设备信息。智能家居App需要添加4个设备,如表2所示。

3) 添加关联关系

创建好设备后,传感器设备和空调设备需相互关联产生联系,根据温度传感器获得的温度控制空调设备。在ThingsBoard平台中,单击侧边栏设备,选择并单击空调设备,选择关联,方向选择“从”,单击弹框的右上角“+”号,类型选择设备。找到相关传感器设备,单击添加,即可在关联列表查看到关联设备信息,如表3所示。

4) 使用MQTTBox发送遥测数据

MQTT是一种轻量级的基于客户端-服务器的消息发布/订阅传输协议,实现MQTT协议的通信需要有客户端和服务器。MQTT协议的通信过程中有三种身份:发布者(Publish) 、消息代理(MQTT Broker) 、订阅者(Subscribe) 。其中,消息的发布者和订阅者都是客户端,消息代理是服务器。消息发布者可以同时是消息的訂阅者。MQTT会自动构建底层网络传输,建立客户端到服务器的连接,提供两者之间的一个有序的、无损的、基于字节流的双向传输。ThingsBoard物联网平台当接入MQTT协议的设备时,此时的ThingsBoard充当MQTT 服务器(MQTT Broker) ,再使用MQTTBox软件充当客户端,客户端模拟真实设备通过MQTT协议连接到ThingsBoard。

在搭建好ThingsBoard后,通过MQTTBox测试连接到该平台实现设备遥测的测试,按照如下步骤实现。

第一步:双击打开MQTTBox 软件,单击CreateMQTT Client(创建MQTT客户端),输入MQTT ClientName(客户端名称),选择传输协议:mqtt/tcp,输入用户名:设备的访问令牌值,输入远程服务器的IP 和PORT(Host) ,选择服务质量(QoS) 选择1-Atleast Once,单击Save,页面跳转后,出现Connected则证明MQTT?Box客户端已经连接ThingsBoard平台。

第二步:MQTTBox连接成功后,输入遥测主题,选择服务质量(QoS) 为1-Atleast Once,输入载荷(Pay?load) :“{"temp":25}”,单击publish。

第三步:打开ThingsBoard平台,通过侧边栏单击设备,找到并单击连接MQTTBox复制Token的设备,选择最新遥测值,可查看到MQTTBox 提交的遥测信息。

通过以上方式,按下列参数,将4个设备的模拟遥测数据发送到ThingsBoard对应的设备中,智能家居App设备的主题和负载测试数据如表4所示。

3.2 数据展示

1) 设备数据展示页面的UI设计

设备数据展示页面主要用来展示传感器的状态信息和设备数据,根据智能家居App的功能需求,需要展示温度传感器数据以及空调设备的状态信息。在view目录下创建Device.ets文件。

2) 创建数据实体类

根据智能家居App的设备情况,需创建出温度传感器和空调两类设备对应的数据实体类,用来保存从云平台获取到的设备信息。

3) 封装从云平台获取数据的方法

页面设计好后,智能家居App需要从ThingsBoard平台获取温度传感器设备和空调设备的信息。在Tb?Cloud类中添加获取温度传感器数据的方法、获取空调设备的方法、获取空调设备访问令牌TOKEN的方法、获取遥测数据的方法以及获取空调设备关联的温度传感器设备ID的方法。

4) 从云平台获取数据并展示在设备页上

在TbCloud编写好相应的方法后,则需在Device页面初始化的时候去获取设备的各种信息,所以需要在Device.ets文件中的aboutToAppear()方法中编写代码。首先需要判断是否登录过,接下来创建线程每7秒获取一次设备信息以及设备遥测信息。

5) 将设备页放到Tabs中

打开Index.ets页面,导入设备页,并修改TabCon?tent中的设备页为Device。

3.3 设备控制

1) 手动控制设备

通过单击空调设备的开关图标,达到控制空调设备的开关效果,所以需在TbCloud中创建修改设备遥测信息的方法。

2) 联动控制设备

在手动控制完成后,须实现联动控制设备,也就是设置相应温度传感器一个阈值,当前温度超过阈值时,启动空调设备,实现手动和自动的联动控制。因此需先创建弹框,通过单击设备的编辑按钮,弹出弹框对自动控制的温度阈值与自动化/手动化进行切换。故在view 文件夹下创建AirDeviceEditDialog.ets文件。弹框页面最外层是通过Column组合而成,里面自上而下分别由文本框、横线、输入框、选择器以及确定和取消按钮组合而成,其中选择器以及确定和取消按钮分别用弹性布局进行包裹渲染。

至此,单击弹框后可将数据进行保存,并再次展示,但若是退出App至后台,则无法进行联动控制,故需要在Device.ets的初始化线程中添加一个业务,将持久化的数据读取并保存到空调设备集合的全局状态变量中,而当自动化数据可保存后,该数据需在获取到温度数据时判断是否需要开启空调设备,以达到真实的自动化效果。在Device.ets的初始化线程中,添加一个业务,判断当前温度是否超过自动化数据中设定的阈值,如果温度超过阈值,空调设备未打开并且已经开启自动化,则打开空调设备

3.4 智能告警

1) 创建告警实体类

告警页的开发首先需通过面向对象进行考虑,所以需在model文件夹中创建AlarmInfo.ets文件,创建出告警实体类,代码如下。

2) 持久化告警数据

在common>database文件夹创建AlarmInfoDao.ets用于持久化存储告警内容。所谓数据管理的存储方式,底层主要采用SQLite来实现,故首先需初始化数据库文件名、建表语句、表名称以及RDB数据库访问对象作为全局变量;在构造函数中通过传入上下文环境对象,获取RDB数据库访问对象,并将该对象设置到全局变量中并执行建表语句;通过RDB数据库访问对象即可执行SQL实现数据的增删改查。

3) 将告警对象设置成全局变量

在设备初始化时,须先初始化告警对象并保存至全局变量中。在EntryAbility 的onCreate()方法中,初始化告警对象,并设置成全局变量。

4) 查询告警的数据

从数据库中查询出来的数据,放在对应的集合中。在viewmodel 文件夹中创建AlarmViewModel.ets文件,用来保存告警信息的数组。

5) 告警信息页面设计

在view目录下创建告警展示页面Alarm.ets,用来展示告警信息列表。其中对告警项的布局进行封装,在view目录下创建AlarmItem.ets文件,通过Flex自左向右设置告警图标、室内温度和空调设备启动提示以及创建时间,其中室内温度和空调设备启动提醒通过Flex布局再次包裹,并在告警页的ListItem中进行引入,以便降低代码冗余,如图1所示。

4 系统部署

HarmonyOS的组件提供了不同的能力,用来实现一次开发,多端部署。智能家居App在开发过程中使用拉伸、占比、延伸、均分、多态等组件能力,实现一次开发,多端部署。

4.1 组件的拉伸能力

组件的拉伸能力无论在平板或手机屏幕中,当前UI组件都能够以相同的宽度或高度展示在屏幕中,也就是在设置width、height、margin和padding等属性的过程中,通过设置百分比,让该组件可以在不同的屏幕上都保持该宽高和间距,在智能家居App的开发过程中,以告警页面为例应用组件的拉伸能力,如图2所示。

4.2 设置组件占比能力

组件的占比能力即通过设置组件的权重属性lay?outWeight,将页面中留白的位置在高度或宽度上全部占满,通过此方式的配置不论在任意分辨率的显示屏上,都是占满的效果,以告警页为例应用组件的占比能力。

4.3 组件的延伸能力

组件延伸能力即当页面高度不足以支持页面数据时,能够自动添加滚动条功能以达到在不同分辨率的显示屏上进行滑动来展示数据效果,通过List控件自带的效果即可展示出效果无须添加属性,此功能以告警页为例应用组件的延伸能力,如图3所示。

4.4 组件的均分能力

组件均分能力即通过Flex布局将组件水平或垂直方向地形成合适的摆放效果,以达到在不同的屏幕分辨率下都能够达到组件均分的效果。在智能家居App中的告警项就是通过Flex的水平均分达到效果,如图4所示。

4.5 多态组件

多態组件指的是Swiper组件即轮播图组件,通过该组件的displayCount函数,传入屏幕中需展示的页数数量,达到不同的展示效果。在该功能下,只需计算出当前屏幕的分辨率即可根据不同分辨率展示页数数量,而此功能即媒体查询功能,即通过媒体查询出当前的屏幕分辨率,根据分辨率设置Swiper组件的displayCount参数,即可实现一次开发多端部署的能力,如图5所示。

5 结论

本文主要完成了基于HarmonyOS 的智能家居App的设计与实现,结合ThingsBoard云平台实现了智能家居数据展示、设备控制、智能告警等工作,并通过多种部署能力达到一次开发,多端部署的效果。

猜你喜欢

云平台智能家居
基于PLC的智能家居控制系统研究
智能家居发展或将实现弯道超车
企业云平台建设研究
基于LD3320的智能家居控制