在这篇文章中, 我们将看到如何通过创建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物联网监控数据.