跳转到主要内容

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

假设您正在使用温度传感器,并且希望在温度超过设定的限制时通过Email和SMS接收通知. 该规则将检测报告的温度何时超过最大容量,并发送包含设备ID的通知, 报道温度, 和超过的温度JSON格式. 您必须在规则部分中设置温度传感器设备的最大限制.

 创建一个亚马逊SNS主题

  • 亚马逊SNS控制台 选择 主题 从左边菜单
  • 选择 创建主题 然后是 标准 输入 Details 默认情况下,控制台以FIFO顺序创建主题.
  • 输入SNS主题名称 的名字 (e.g. high_temp_notice)
  • 在页面的末尾选择 创建 主题
  • 新话题的 Details 页面现在将显示在控制台中

为亚马逊 SNS创建一个订阅

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

测试亚马逊 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/数据主题,并具有以下消息有效负载,

{
    “温度”:22日
    “湿度”:84年,
    “晴雨表”:1233年,
    “风”:
    {
        32岁的“速度”:
        “轴承”:245
    }
}

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

{
    “device_id”:“32”,
    38岁的“reported_temperature”:
    “max_temperature”:30
}

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

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

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

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

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

  • 在AWS物联网控制台中,订阅此主题 设备/ + /数据.
    • 在左侧导航栏中选择 测试,然后 订阅主题.
    • 在输入主题过滤器-中输入主题 设备/ + /数据
    • 订阅主题,其他字段保持不变.
    • 订阅 列,选择 订阅主题,并选择 设备/ + /数据发布到主题
  • 通过提供特定的设备ID -,将消息发布到给定的输入主题 设备/ 32 /数据. 您必须列出完整的设备ID. 我们不能发布到包含通配符的MQTT主题.
  • 订阅 部分中,选择 发布到主题 在MQTT客户机中
    • 输入输入主题名称e., 设备/ 32 /数据发布
    • 在消息有效负载部分输入以下数据
{
    “温度”:22日
    “湿度”:84年,
    “晴雨表”:1233年,
    “风”:
    {
        32岁的“速度”:
        “轴承”:245
    }
}
    • 选择 发布到主题 发布MQTT消息.
  • 根据AWS物联网规则确认文本消息已成功发送.
    • 下面主题旁边的一个绿点 订阅 表示主题中的新消息.
    • 在订阅部分下,选择主题(i.e., 设备/ + /数据)来查看通过MQTT匹配的消息有效负载,应该如下所示:
{
    “温度”:22日
    “湿度”:84年,
    “晴雨表”:1233年,
    “风”:
    {
        “速度”:22日
        “轴承”:255
    }
}
  • 在电话上,会显示如下信息:
{
    “device_id”:“32”,
    38岁的“reported_temperature”:
    “max_temperature”:30
}

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

  • 如果记录的温度低于最大限制,那么您将不会收到任何通知.
    • 订阅 部分中,选择 发布到主题 在MQTT客户机中
    • 输入您的输入主题名称e. 设备/ 33 /数据,在 发布
    • 您必须传递如下所示的数据消息有效负载部分,
{
    “温度”:22日
    “湿度”:84年,
    “晴雨表”:1233年,
    “风”:
    {
        32岁的“速度”:
        “轴承”:245
    }
}
    • 选择发布到主题来发布MQTT消息

由于温度低于最大值,所以不会发送Email或电话通知.

高温警报创建.

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

收件箱中的警报消息.

使用AWS物联网监控数据.

留下一个回复