关于harmonyos:HarmonyOS开发者创新大赛作品智能农场相关开发技术分享

3次阅读

共计 4465 个字符,预计需要花费 12 分钟才能阅读完成。

HarmonyOS 开发者翻新大赛已于 2021 年 5 月 24 日闭幕,在本次赛事中,来自古都西安的开拓者战队凭借《智能农场》这款作品最终取得大赛三等奖,该作品通过 HarmonyOS 的分布式软总线、分布式数据库技术、分布式任务调度、分布式跨设施数据流转等能力实现了多设施(传感器、智慧屏等)的互联互通、自动控制,实现了农场场景下多设施协同智能养殖体验,令人印象粗浅。

以下是“开拓者战队”基于 HarmonyOS 打造《智能农场》作品的相干思考以及关键技术的简略分享:

1. 背景介绍

目前,市面上智慧农业相干的厂商设施(传感器等)绝对独立,没有对立的操作系统平台,互联互通艰难,且大多数设施部署须要连线,部署老本工夫长,老本高,保护复杂度高。随着 5G 网络的笼罩,下一代全场景操作系统(HarmonyOS)的呈现,让万物互联变得更加不便,能够实现一部手机操作所有 IoT 设施,实现各个 IoT 设施的互联互通。智能农场零碎是基于 HarmonyOS 实现了多个 IoT 设施(传感器,电机,大屏等设施)的互联互通、自动控制,并实现全场景化的智慧养殖。智能农场通过各项传感器设施对农场的各项环境指标进行实时检测,并且能够进行自适应调节,让动物始终处于一个良好的成长环境。通过本零碎能够实现指标超过阈值预警,智能揭示,智能求助等性能,让农场养殖门槛变低,让农场主轻松成为养殖专家。

2. 需要剖析

智能农场零碎通过对农场的空气温,湿度、光照度等各项环境参数进行实时采集,确保农场主可随时通过智能手机 APP 理解农场情况。同时,零碎能够依据农场内外环境因子的变动进行自适应调解,不仅能保障农场中的动物长期处于良好的成长环境中,还能晋升动物的产量和品质。本零碎的特色业务性能包含:精细化智能揭示,专家视频求助等。

智能揭示性能体现在多个场景中,如:农场温度过高,降温设施有损坏或者指定工夫内温度没有降下来等异常情况呈现时,零碎会间接给管理者进行电话揭示或者音讯推送;不仅如此,零碎还会依据动物的年龄,对不同动物的成长周期进行预测,揭示管理者为动物打疫苗。智能求助性能则体现为,当管理者遇到一些养殖常识问题,能够通过智能求助查到相干帮忙信息;同时,也提供了养殖专家视频求助性能,帮忙管理者及时的解决养殖方面遇到的疑难杂症。

3. 解决方案

本解决方案波及角色:农场主,养殖专家;波及硬件设施:手机、智慧屏、开发板,各类型传感器(比方:温湿度传感器、可燃气体传感器、光敏传感器、人体红外传感器等)以及各项外设(比方:风扇,加水设施,取暖设施等)。手机、智慧屏、开发板基于 HarmonyOS,通过 WIFI 组网,实现各项设施之间的互联互通。农场主能够通过手机 APP 对养殖场景中的各项环境指标(温湿度阈值范畴、可燃气体浓度范畴、光照强度等)进行设置,也可设置定时工作(比方:定时加水、加料,定时播放音乐等),实现智能化揭示和自动化管制。解决方案中养殖技术和案例等信息的查问和剖析等服务,由云端的数据服务提供,专家视频求助性能的视频通话服务由云端提供。

4. 次要模块介绍

数据采集模块(以采集湿度为例)

系统启动胜利后,数据采集模块会启动定时工作采集温度数据,定时从温度传感器采集一次以后温度数据。如果采集胜利,存入分布式数据库(KV 形式存储),采集到的温度数据会实时刷新到温度显示界面。温度数据范畴:-40~80℃。采集到的数据,能够流转到大屏不便用户查看。(采集流程见下图 1)

业务流程:


图 1 采集温度数据流程

自动控制模块(以温度控制为例)

定时获取以后温度数据与用户设置的失常阈值范畴或者最大阈值范畴(来自:Preferences)进行比拟。如果以后温度在失常阈值范畴内,不做解决;如果超过失常阈值范畴,未超过最大阈值范畴(比方:失常范畴:5~30℃),包含两种状况:

1. 低于 5℃,关上加热设施,并调用智能揭示模块告诉用户;温度恢复正常范畴,敞开设施。

2. 高于 30℃,关上风扇降温,并调用智能揭示模块告诉用户;温度恢复正常范畴,敞开设施。

如果超过最大阈值范畴(比方:最大阈值范畴:<-20℃或 >60℃),包含两种状况:

1. 低于 -20℃,关上多个加热设施,并调用智能揭示模块,发送告诉,并拨打电话告诉用户;温度恢复正常范畴,敞开设施。

2. 高于 60℃,关上喷水降温,并调用智能揭示模块,发送告诉,并拨打电话告诉用户;温度恢复正常范畴,敞开设施。(管制流程见下图 2)


图 2 温度控制流程

5. 要害技术细节实现

1)分布式多设施发现,实现多设施协同、调度

分布式设施发现要害代码:

List<DeviceInfo> onlineDevices = DeviceManager.getDeviceList(DeviceInfo.FLAG_GET_ONLINE_DEVICE);

分布式设施任务调度要害代码:

Intent intent = new Intent();

Operation operation =

new Intent.OperationBuilder()

.withDeviceId(devicesId)

.withBundleName(getBundleName())

.withAbilityName(Ability.class.getName())

.withFlags(Intent.FLAG_ABILITYSLICE_MULTI_DEVICE)

.build();

intent.setOperation(operation);

2)分布式数据流转

调用 continueAbility 进行实现数据流转(要害代码)

continueAbility(chooseDevice.getDeviceInfo().getDeviceId());

3)socket 通信实现设施间互联互通 (如下要害代码)

// 调用 NetManager.getInstance(Context) 获取网络管理的实例对象。

NetManager netManager = NetManager.getInstance(context);

// 调用 NetManager.getDefaultNet() 获取默认的数据网络。

NetHandle netHandle = netManager.getDefaultNet();

// 调用 NetHandle.bindSocket() 绑定网络。

DatagramSocket socket = new DatagramSocket();

netHandle.bindSocket(socket);

// 应用 socket 发送数据

socket.send(request);

4) 踩坑 (分布式任务调度和分布式数据库技术配合应用)(性能:智能农场手机端采集的数据实时同步到 TV 端)

当手机端收到采集到的环境数据(如温度、湿度及可燃气体浓度),须要流转到智慧屏上进行显示,团队一开始应用的分布式任务调度,流转到 TV 端后,发现 TV 端显示的数据并没有实时刷新,显然不合乎事实需要。

为了实现数据的实时刷新,团队发现 HarmonyOS 有分布式数据服务的能力,能够实现同利用,同网络,同账号在不同设施之间实现数据实时共享,因而最终采纳了 HarmonyOS 的分布式数据库技术,确保了手机端和 TV 端数据同步刷新的性能。在不依赖云端服务的状况下,实现此性能。

上面是实现的要害代码:

手机端数据存储:

// 初始化获取 SingleKvStore 对象

KvManagerConfig kvManagerConfig = new KvManagerConfig(context);

kvManager = KvManagerFactory.getInstance().createKvManager(kvManagerConfig);

Options options = new Options();

options.setCreateIfMissing(true)

.setEncrypt(false)

.setKvStoreType(KvStoreType.SINGLE_VERSION)

.setAutoSync(true);

SingleKvStore singleKvStore = kvManager.getKvStore(options, storeId);

将采集到的传感器数据,存储在分布式数据库:

singleKvStore.putString(“key”,

” +…此处省略

“}”);

TV 端进行数据获取:

// 初始化 singleKvStore,并为其注册监听器 kvStoreObserverClient,察看数据变动:

KvManagerConfig config = new KvManagerConfig(getContext());

KvManager kvManager = KvManagerFactory.getInstance().createKvManager(config);

Options CREATE = new Options();

CREATE.setCreateIfMissing(true).setEncrypt(false).setKvStoreType(KvStoreType.SINGLE_VERSION)

.setAutoSync(true);

singleKvStore = kvManager.getKvStore(CREATE, Constant.KV_STORE_NAME);

kvStoreObserverClient = new KvStoreObserverClient();

singleKvStore.subscribe(SubscribeType.SUBSCRIBE_TYPE_ALL, kvStoreObserverClient);

// 实现 KvStoreObserver,从新 onChange()办法,获取分布式数据,更新 UI 须要切换到主线程。

private class KvStoreObserverClient implements KvStoreObserver {

@Override

public void onChange(ChangeNotification notification) {

String value = singleKvStore.getString(“*“);

DataCollectionEntry entry = ZSONObject.stringToClass(value, DataCollectionEntry.class);

getUITaskDispatcher().asyncDispatch(() -> initView(entry));

}

}

从报名 HarmonyOS 开发者翻新大赛开始,团队从一群素来没有配合过的 HarmonyOS 老手开发者成长为了业余开发者。加入大赛也让团队粗浅感触到了 HarmonyOS 弱小的分布式技术以及先进的设计理念,为今后开发更具创意和社会价值的作品打下了松软的根底。

星光不问赶路人,每一位 HarmonyOS 开发者都是华为汇聚的星星之火,心愿越来越多的开发人才可能退出到 HarmonyOS 开发者生态,一起发明有限可能!

正文完
 0