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采集温度数据流程 自动控制模块(以温度控制为例) 定时获取当前温度数据与用户设置的正常阈值范围或者最大阈值范围(来自references)进行比较。如果当前温度在正常阈值范围内,不做处理;如果超过正常阈值范围,未超过最大阈值范围(比如:正常范围: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);
|