设备联动:监测设备状态变化情况并发送通知 【零代码零硬件玩转华为云IoT】

举报
bug菌 发表于 2024/03/18 18:38:58 2024/03/18
【摘要】 前言  在物联网场景下,设备的状态变化对于设备管理者来说是非常重要的信息。为了及时监测设备状态变化并采取相应的措施,华为云IoT设备接入服务提供了规则引擎功能,可以通过简单的操作实现设备状态变化的监测和通知功能。  本文以Java开发语言为例,介绍如何使用华为云IoT设备接入服务的规则引擎功能实现设备联动,监测设备状态变化情况并发送通知。  首先我们在了解端对端开发流程之前,我们可以先整体...

【】

前言

  在物联网场景下,设备的状态变化对于设备管理者来说是非常重要的信息。为了及时监测设备状态变化并采取相应的措施,华为云IoT设备接入服务提供了规则引擎功能,可以通过简单的操作实现设备状态变化的监测和通知功能。

  本文以Java开发语言为例,介绍如何使用华为云IoT设备接入服务的规则引擎功能实现设备联动,监测设备状态变化情况并发送通知。

  首先我们在了解端对端开发流程之前,我们可以先整体了解一下物联网基础架构,比较典型的是五层架构,从上图可以看到五层架构包含以下:

image.png

设备发放:云端批量发放,设备自动就近接入:

image.png

摘要

  本文将以Java开发语言为例,介绍如何使用华为云IoT设备接入服务的规则引擎功能来监测设备状态变化情况,并通过物联网平台触发指定动作进行通知。具体实现步骤包括定义规则、设置触发条件、配置动作以及编写代码逻辑等。

概述

  在物联网场景下,设备的状态变化对于设备管理者来说是非常重要的信息。比如,物联网网关设备的上下线情况需要及时监测,以保证网络的稳定性和正常运行。为了实现设备状态变化的监测和通知功能,可以使用华为云IoT设备接入服务的规则引擎功能。

  规则引擎是一种将规则与具体应用程序或系统进行绑定的技术。在物联网场景下,可以使用规则引擎来实现设备状态的监测和通知。华为云IoT设备接入服务提供了规则引擎功能,可以通过编写规则引擎规则,设定设备状态变化的条件和相应的动作,来实现设备联动,监测设备状态变化情况并发送通知。

image.png

  从引导图可以看出,开发者可以登录控制台完成创建产品,模型定义,同时结合在线调试工具完成相关的插件开发,基于平台已经创建的产品,可以根据提供的应用 API,调试完成后上线到对应的应用商店以供使用。

  针对设备侧开发我们在选择接入方式上可以使用 SDK 接入,模组接入,以及使用原生的协议接入,完成设备侧开发之后,我们端侧集成完可以进行在线调试,业务通过后,完成注册设备,就可以将设备进行商用。

源代码解析

下面是使用华为云IoT设备接入服务的规则引擎功能来监测设备状态变化并发送通知的源代码示例:

// 在设备上线时触发规则
function onDeviceOnline(device) {
    // 获取设备ID
    var deviceId = device.getDeviceId();
    
    // 获取设备类型
    var deviceType = device.getDeviceType();
    
    // 判断设备类型是否为网关设备
    if (deviceType == "gateway") {
        // 获取设备上线时间
        var onlineTime = device.getOnlineTime();
        
        // 判断设备离线时间是否超过5分钟
        if (onlineTime >= 5 * 60) {
            // 上报告警信息
            reportAlarm(deviceId, "Gateway offline", "The gateway device has been offline for more than 5 minutes.");
            
            // 发送邮件通知
            sendEmail(deviceId, "Gateway offline", "The gateway device has been offline for more than 5 minutes.");
            
            // 发送短信通知
            sendSms(deviceId, "Gateway offline", "The gateway device has been offline for more than 5 minutes.");
        }
    }
}

// 在设备下线时触发规则
function onDeviceOffline(device) {
    // 获取设备ID
    var deviceId = device.getDeviceId();
    
    // 获取设备类型
    var deviceType = device.getDeviceType();
    
    // 判断设备类型是否为网关设备
    if (deviceType == "gateway") {
        // 获取设备离线时间
        var offlineTime = device.getOfflineTime();
        
        // 判断设备上线时间是否小于1分钟
        if (offlineTime <= 60) {
            // 恢复告警信息
            recoverAlarm(deviceId, "Gateway offline", "The gateway device has been offline for more than 5 minutes.");
            
            // 发送邮件通知
            sendEmail(deviceId, "Gateway offline", "The gateway device has been offline for more than 5 minutes.");
            
            // 发送短信通知
            sendSms(deviceId, "Gateway offline", "The gateway device has been offline for more than 5 minutes.");
        }
    }
}

// 上报告警信息
function reportAlarm(deviceId, alarmType, alarmMessage) {
    // TODO: 上报告警信息的代码逻辑
}

// 发送邮件通知
function sendEmail(deviceId, alarmType, alarmMessage) {
    // TODO: 发送邮件通知的代码逻辑
}

// 发送短信通知
function sendSms(deviceId, alarmType, alarmMessage) {
    // TODO: 发送短信通知的代码逻辑
}

// 恢复告警信息
function recoverAlarm(deviceId, alarmType, alarmMessage) {
    // TODO: 恢复告警信息的代码逻辑
}

代码解析:

  根据如上代码,我们可以知道:这段代码是一个设备上线和下线时触发的规则。它通过判断设备类型和设备在线时间来进行一些操作。

  在设备上线时触发的规则(onDeviceOnline函数)中,首先获取设备的ID和类型。如果设备类型是网关设备,则获取设备的在线时间。如果在线时间超过5分钟,则执行以下操作:

  1. 调用reportAlarm函数上报告警信息,参数包括设备ID、告警类型和告警信息。
  2. 调用sendEmail函数发送邮件通知,参数包括设备ID、告警类型和告警信息。
  3. 调用sendSms函数发送短信通知,参数包括设备ID、告警类型和告警信息。

  在设备下线时触发的规则(onDeviceOffline函数)中,同样首先获取设备的ID和类型。如果设备类型是网关设备,则获取设备的离线时间。如果离线时间小于等于1分钟,则执行以下操作:

  1. 调用recoverAlarm函数恢复告警信息,参数包括设备ID、告警类型和告警信息。
  2. 调用sendEmail函数发送邮件通知,参数包括设备ID、告警类型和告警信息。
  3. 调用sendSms函数发送短信通知,参数包括设备ID、告警类型和告警信息。

  这段代码中的reportAlarm、sendEmail、sendSms和recoverAlarm函数都是占位函数,需要根据实际需求来实现上报告警、发送邮件和发送短信的具体逻辑。

应用场景案例

  下面是一个应用场景案例,演示了如何使用华为云IoT设备接入服务的规则引擎功能来监测网关设备的状态变化并发送通知。

  1. 定义规则:创建一个规则,设置触发条件为网关设备上线或下线。
  2. 配置动作:设置触发条件满足时,执行上报告警信息和发送通知的动作。
  3. 编写代码逻辑:编写代码逻辑,根据设备状态变化的条件判断执行相应的动作。

优缺点分析

  使用华为云IoT设备接入服务的规则引擎功能来监测设备状态变化并发送通知具有以下优点和缺点:

优点:

  • 实时监测设备状态变化,及时采取相应的措施。
  • 简单易用的规则引擎配置,不需编写复杂的代码逻辑。
  • 支持多种通知方式,如邮件、短信等。

缺点:

  • 需要使用华为云IoT设备接入服务,对于不使用该服务的场景不适用。
  • 需要编写一定的代码逻辑来处理设备状态变化的条件判断和动作执行。

类代码方法介绍

  在上面的源代码解析中,我们定义了几个方法来实现设备状态变化的监测和通知功能。下面对这些方法进行介绍。

  • onDeviceOnline(device):设备上线时触发的方法,通过判断设备类型和设备上线时间来执行相应的动作。
  • onDeviceOffline(device):设备下线时触发的方法,通过判断设备类型和设备离线时间来执行相应的动作。
  • reportAlarm(deviceId, alarmType, alarmMessage):上报告警信息的方法,将告警信息上报到物联网平台。
  • sendEmail(deviceId, alarmType, alarmMessage):发送邮件通知的方法,通过邮件通知设备管理者。
  • sendSms(deviceId, alarmType, alarmMessage):发送短信通知的方法,通过短信通知设备管理者。
  • recoverAlarm(deviceId, alarmType, alarmMessage):恢复告警信息的方法,将告警信息恢复到正常状态。

测试用例

  为了验证设备联动功能的正确性,我们可以编写测试用例来对代码逻辑进行测试。下面是一个测试用例的示例:

@Test
public void testDeviceOnline() {
    // 创建一个网关设备
    Device device = new Device("gateway", "gateway-001");
    
    // 设置设备上线时间为5分钟
    device.setOnlineTime(5 * 60);
    
    // 模拟设备上线触发规则
    onDeviceOnline(device);
    
    // 验证是否上报了告警信息
    assertEqual(reportAlarmCalled, true);
    
    // 验证是否发送了邮件通知
    assertEqual(sendEmailCalled, true);
    
    // 验证是否发送了短信通知
    assertEqual(sendSmsCalled, true);
}

代码解析:

  根据如上代码,我们可以知道:这段代码是一个单元测试方法,用于测试设备上线功能。测试步骤如下:

  1. 创建一个名为"gateway-001"的网关设备。
  2. 设置设备的上线时间为5分钟。
  3. 模拟设备上线事件,调用onDeviceOnline()方法。
  4. 验证是否触发了告警信息的上报,即reportAlarmCalled为true。
  5. 验证是否发送了邮件通知,即sendEmailCalled为true。
  6. 验证是否发送了短信通知,即sendSmsCalled为true。

  如果以上验证都通过,说明设备上线功能正常。

全文小结

  本文介绍了如何使用华为云IoT设备接入服务的规则引擎功能来监测设备状态变化情况,并发送通知。通过定义规则、设置触发条件、配置动作以及编写代码逻辑等步骤,可以实现设备联动功能。同时,我们还介绍了一个应用场景案例,并分析了该功能的优缺点。

总结

  通过华为云IoT设备接入服务的规则引擎功能,我们可以实现设备状态变化的监测和通知功能。在本文中,我们通过使用华为云IoT设备接入服务的规则引擎功能,以Java开发语言为例,详细介绍了如何实现设备联动监测功能。通过监测设备的状态变化并触发指定动作进行通知,我们可以及时感知设备的上下线情况。

结尾

  物联网技术的发展极大地推动了设备联动监测的需求。通过华为云IoT设备接入服务的规则引擎功能,我们可以方便地实现设备联动监测,并及时发送通知。本文以Java开发语言为例,通过详细的源代码解析、应用场景案例和测试用例,展示了如何使用规则引擎功能实现设备联动监测。希望本文能对读者在物联网设备联动监测方面的研究和实践提供一定的参考价值。


我正在参加【有奖征文 第29期】零代码零硬件玩转华为云IoT物联网平台多场景
链接:https://bbs.huaweicloud.com/blogs/423245

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。