AWS物联网探索-第三部分-警报创建和数据监控

Encora | 2021年9月23日

 

在这篇文章中, 我们将了解如何通过创建AWS物联网规则通过电子邮件或短信发送通知. 该规则将MQTT消息数据发送到亚马逊 SNS主题. 然后,主题将过滤数据并根据设置的规则发送通知.

假设您正在使用温度传感器,并希望在温度超过设定限制时通过电子邮件和短信接收通知. 每当报告的温度超过最大容量时,该规则将检测并发送包含设备ID的通知, 报道温度, 以及JSON格式的超标温度. 您必须在规则部分设置温度传感器设备的最大限制.

 创建一个亚马逊 SNS主题

  • 亚马逊SNS控制台 选择 主题 从左侧菜单
  • 选择 创建主题 然后是 标准 输入 Details 缺省情况下,控制台按照FIFO顺序创建主题.
  • 在中输入SNS主题名称 名字。 (e.g. high_temp_notice)
  • 在这一页的最后选择 创建 主题
  • 新话题是 Details 页现在将显示在控制台中

为亚马逊 SNS创建一个订阅

  • 主题的详细信息页有一个名称 high_temp_notice.
  • 选择 创建订阅
  • 创建订阅 页,在 Details 节,我们可以看到 协议 列表
  • 选择短信或电子邮件(您可以通过创建两个订阅来添加两者)
  • 端点 字段中,输入需要发送短信的手机号码. 确保它以一个+符号开头,包括国家代码. 以同样的方式,我们通过创建另一个订阅来添加电子邮件.
  • 选择 创建订阅.

测试亚马逊 SNS通知

  • 选择 主题亚马逊SNS控制台
  • 这里我们将看到一个主题列表. 选择主题名称i.e high_temp_notice.
  • high_temp_notice 详情页,选择 发布消息
  • 将消息发布到主题部分,我们会看到 消息 Body部分,然后在 消息 正文要发送到端点字段,输入短消息
  • 选择 发布消息 在底部
  • 确认我们之前配置的手机号码收到了短信

根据AWS物联网规则的特定标准发送文本消息

我们将在这里创建的AWS物联网规则将订阅MQTT主题 设备/ device_id /数据 在哪里 device_id 发送消息的物联网设备(例如:温度传感器)的ID是什么. 我们在主题过滤器中将这些主题描述为设备/ + /数据. 加号是一个通配符,我们可以使用它来传递任何设备的标识(例如 device_id). 使用此规则,我们还可以测试MQTT消息有效负载中温度字段的值.

如果规则收到来自匹配主题的消息,它将获取温度值和 device_id 从主题名称, 为测试的最大限制添加一个常数值, 并将这些值作为JSON文档发送到亚马逊 SNS通知主题.

例如, 来自天气传感器设备#32的MQTT消息使用设备/32/data主题,并具有以下消息有效负载,

纯文本
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
{
“温度” : 22 ,
“湿度” : 84 ,
“晴雨表” : 1233 ,
“风” :
{
“速度” : 32 ,
“轴承” : 245
}
}
{“温度”:22,“湿度”:84,“气压计”:1233,“风”:{“速度”:32,“轴承”:245}}
 
{
    “温度”:22日
    “湿度”:84年,
    “晴雨表”:1233年,
    “风”:
    {
        32岁的“速度”:
        “轴承”:245
    }
}

规则查询语句将收集温度的 值和'device_id” 从主题出发. 它将添加一个常量值,例如'max_temperature” 并将消息有效载荷发送到亚马逊SNS主题,看起来像这样,

纯文本
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
{
“device_id” : "32" ,
“reported_temperature” : 38 ,
“max_temperature” : 30
}
{“device_id”: "32", “reported_temperature”: 38, “max_temperature”:30}
 
{
    “device_id”:“32”,
    38岁的“reported_temperature”:
    “max_temperature”:30
}

创建验证超限制温度值的规则,并为亚马逊 SNS主题创建数据

  • Select 规则 AWS物联网控制台中左侧导航
  • 选择 创建.
  • 创建规则 页面
    • 中输入任何名称 名字。 Field - temp_limit_notify. 此名称在您的AWS区域和物联网规则中必须是唯一的, 并且不应包含任何空格(允许使用下划线).
    • 添加一个有意义的和容易理解的描述 描述
  • 规则查询 的语句部分 创建规则 页面:
    • Select 2016-03-23使用SQL版本
    • 在“规则查询语句”字段中输入如下语句:
纯文本
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
SELECT 主题 ( 2 ) device_id,
温度为reported_temperature,
30 作为max_temperature
“设备/ + /数据”
在温度 > 30
SELECT 主题(2) as device_id 温度为reported_temperature, max_temperature为30 从“设备/ + /数据” 在温度 > 30
 
SELECT 主题(2) as device_id 
温度为reported_temperature, 
max_temperature为30 
从“设备/ + /数据” 
在温度 > 30
    • 该查询将:将规则查询与 设备/ + /数据 主题过滤器,如果温度值大于30,则使用和, 它将侦听MQTT消息. 然后,它 选择 主题字符串中的第二个元素(设备/ + /数据),并将其分配给 device_id 它选择值temperature并将其赋值给 reported_temperature 字段,从消息有效负载获取. 然后,它创建一个代表最高温度限值的常数值30,并将其分配给 max_temperature 场.
  • 选择 添加 操作,在“设置一个或多个操作”部分中打开规则操作列表.
  • In 选择一个动作,选择 发送消息作为SNS推送通知
  • 如果希望打开所选操作的配置页面,请选择 配置操作,位于动作列表的底部
  • 配置操作:
    • SNS target -> Select -> search for the SNS 主题 with the name high_temp_notice 然后选择.
    • 选择RAW, In 消息格式
    • 选择 创建角色 in 选择或创建一个角色来授予AWS物联网访问权限以执行此操作
    • 创建一个新角色,为新角色输入一个唯一的名称. (e.g. sns_rule_role)
    • 现在选择 创建角色.
  • 如果要重用现有角色,请选择 更新的作用. 这将更新角色的策略文档,以便与SNS目标一起工作.
  • 选择 添加操作 然后回到 创建规则 现在,您可以看到规则将在下面的新操作标题中调用的SNS主题 发送消息作为SNS推送通知
  • 创建规则 页面,向下滚动并选择 创建规则,完成该步骤.

测试AWS物联网规则和亚马逊 SNS通知:

来测试我们刚刚创建的规则, 我们必须使用MQTT客户机来订阅和发布使用此规则的消息.

在新的窗口中打开AWS物联网控制台中的MQTT客户端. 我们可以在不丢失MQTT客户机先前配置的情况下编辑现有规则. 客户端将不保留任何订阅或消息日志,如果我们打开相同的窗口,或者如果从客户端移动到访问另一个页面.

  • 在AWS物联网控制台中,订阅主题 设备/ + /数据.
    • 在左侧导航栏中选择 测试,然后 订阅一个主题.
    • 在输入主题过滤器-中输入主题 设备/ + /数据
    • 订阅主题,其他字段保持原样.
    • 订阅 列,选择 订阅主题,并选择 设备/ + /数据发布到主题
  • 通过提供特定的设备ID -,向给定的输入主题发布消息 设备/ 32 /数据. 您必须列出完整的设备ID. 我们不能向包含通配符的MQTT主题发布.
  • 订阅 部分中,选择 发布到主题 在MQTT客户机中
    • 输入输入主题名称e., 设备/ 32 /数据发布
    • 在消息有效负载部分输入以下数据
纯文本
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
{
“温度” : 22 ,
“湿度” : 84 ,
“晴雨表” : 1233 ,
“风” :
{
“速度” : 32 ,
“轴承” : 245
}
}
{“温度”:22,“湿度”:84,“气压计”:1233,“风”:{“速度”:32,“轴承”:245}}
 
{
    “温度”:22日
    “湿度”:84年,
    “晴雨表”:1233年,
    “风”:
    {
        32岁的“速度”:
        “轴承”:245
    }
}
    • 选择 发布到主题 来发布MQTT消息.
  • 根据AWS物联网规则确认短信已成功发送.
    • 下面主题旁边有一个绿点 订阅 指示主题中的新消息.
    • 在“订阅”部分下,选择主题(i.e., 设备/ + /数据)来查看通过MQTT匹配传递的消息有效负载,并且应该看起来像这样:
纯文本
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
{
“温度” : 22 ,
“湿度” : 84 ,
“晴雨表” : 1233 ,
“风” :
{
“速度” : 22 ,
“轴承” : 255
}
}
{“温度”: 22, “湿度”: 84, “晴雨表”: 1233, “风”: {“速度”: 22, “轴承”:255}}
 
{
    “温度”:22日
    “湿度”:84年,
    “晴雨表”:1233年,
    “风”:
    {
        “速度”:22日
        “轴承”:255
    }
}
  • 在手机上,像下面这样的信息会显示,
纯文本
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
{
“device_id” : "32" ,
“reported_temperature” : 38 ,
“max_temperature” : 30
}
{“device_id”: "32", “reported_temperature”: 38, “max_temperature”:30}
 
{
    “device_id”:“32”,
    38岁的“reported_temperature”:
    “max_temperature”:30
}

device_id 是字符串数据类型和温度值是数字自从 主题() 函数提取 device_id 从订阅主题作为字符串. 但是,来自消息有效负载的温度值是数值. 为了使… device_id 数值,必须在规则查询语句-中对其进行类型转换 将主题(2)转换为DECIMAL格式. 如果在主题中传递了任何数值(例如.e. 代替通配符),然后进行强制转换 主题(2) 值转换为数字是可能的.

  • 如果记录的温度低于最高限制,那么您将不会收到任何通知.
    • 订阅 部分中,选择 发布到主题 在MQTT客户机中
    • 输入您的输入主题名称. 设备/ 33 /数据,在… 发布
    • 您必须传递如下所示的数据消息有效负载部分,
纯文本
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
{
“温度” : 22 ,
“湿度” : 84 ,
“晴雨表” : 1233 ,
“风” :
{
“速度” : 32 ,
“轴承” : 245
}
}
{“温度”:22,“湿度”:84,“气压计”:1233,“风”:{“速度”:32,“轴承”:245}}
 
{
    “温度”:22日
    “湿度”:84年,
    “晴雨表”:1233年,
    “风”:
    {
        32岁的“速度”:
        “轴承”:245
    }
}
    • 选择发布到主题以发布MQTT消息

由于温度值低于最大值,因此不会发送邮件或电话通知.

 

高温警报创建.

 

基于范围为警报消息创建规则.

 

收件箱中的警报消息.

 

使用AWS物联网监控数据.

 

新的文字-动作

了解的内容

分享这篇文章

特色的见解