AWS物联网探索-第二部分-设备数据交互和存储

Encora | 2021年9月21日

 

继续我们的AWS物联网探索, 在这篇文章中,我们将看到如何使用AWS物联网规则在DynamoDB表中存储来自物联网设备的传入数据. Part 1 本系列详细介绍了如何使用AWS物联网平台连接设备并对其进行身份验证.

创建一个DynamoDB表

  • 为了在DynamoDB中存储设备数据,我们必须创建一个具有以下属性的DynamoDB表:
  • 在主键部分添加 sample_time. 这是记录样品的时间.
  • 在排序键部分添加 device_id 这是提供样品的设备吗
  • device_data 数据是否从设备接收并由规则查询语句格式化

Open the DynamoDB控制台,并选择“创建表”.

在Create DynamoDB表下

  • In the Table name 节中,输入表名: Iotdevice_data.
  • Under Primary key, in the 分区键, enter sample_time,选择 Number 在字段旁边可用的选项列表中.
  • Then check 添加排序键.
  • Below the 添加排序键, enter device_id,选择 Number 在字段旁边的选项列表中,
  • Now choose Create 最后一名.
  • device_data 可以在配置DynamoDB规则操作时定义吗.

创建用于向AWS DynamoDB表发送数据的AWS IoT规则

将IoT设备数据存储在数据库表中, 使用规则查询语句格式化设备数据. 以下是从天气传感器设备接收到的JSON格式的示例数据,

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

将上述数据存储在DynamoDB表中, 我们使用规则查询语句对数据进行重构,如下所示,

Plain text
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
{
“温度” : 22 ,
"humidity" : 84 ,
"barometer" : 1233 ,
“wind_velocity” : 32 ,
“wind_bearing” : 245
}
{“温度”: 22, "humidity": 84, "barometer": 1233, “wind_velocity”: 32, “wind_bearing”:245}
 
{
  “温度”:22日
  “湿度”:84年,
  “晴雨表”:1233年,
  32岁的“wind_velocity”:
  “wind_bearing”:245
}

在创建此规则时,我们可以使用替代模板. 替换模板是允许我们从函数和消息有效负载中插入动态值的表达式.

  • Enter the Rules AWS物联网控制台的中心.
  • 在规则部分中选择Create
  • 在Name下,输入规则的名称, Iotdevice_data_ddb. 此名称在AWS帐户和区域中是唯一的, 并且不应该包含任何空格, 但是下划线是允许的.
  • In the 描述 节,列出我们规则的目的. 输入一个有意义的描述,概述规则的目的.
  • Under 创建规则的,在“规则查询语句”部分,在“使用SQL版本”字段中选择 2016-03-23.
  • 在“规则查询语句”编辑框中输入以下查询:
Plain text
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
选择温度、湿度、气压计、
wind. velocity wind_velocity,
wind. bearing wind_bearing,
FROM “设备/ + /数据”
选择温度、湿度、气压计、风向.速度如风速,风速.轴承为wind_bearing, 从“设备/ + /数据”
 
选择温度、湿度、气压计、
wind.风速为wind_velocity,
wind.轴承为风向轴承;
从“设备/ + /数据”
  • 此语句侦听来自与主题匹配的主题的MQTT消息 设备/ + /数据 主题过滤.
  • wind属性元素将被格式化为单独的属性. (e.g., wind_velocity and wind_bearing)
  • 温度、湿度和气压计属性将保持不变.
  • Under 设置一个或多个操作 section,
    • 若要查看此规则的操作列表,请选择 Add
    • Choose 将消息插入DynamoDB表
    • 然后选择 Configure 操作,在操作列表的底部,打开所选操作的配置页面
  • In the Configure 行动部分,
    • Under Table name,从上面步骤中创建的列表中选择DynamoDB表名: Iotdevice _data. 其他领域,例如 分区键、分区键类型、排序键、排序键类型 填充来自DynamoDB表的值.
    • Under 分区键值 部分,输入 ${时间戳()}. 在这个规则中, 而不是使用消息有效负载中的直接值, 它将使用Substitution模板并返回时间戳函数的值.
    • Under 排序键值, enter ${cast(topic(2) AS DECIMAL)}. 这是第二个替换模板,它将在主题名称(i)中插入第二个元素值.e device_id)后转换为十进制值以匹配键的数字格式.
    • Under 将消息数据写入此列, enter device_data. 这将创建一个具有名称的新列 device_data DynamoDB表中.
    • Leave the Operation 部分空.
    • Choose 创建角色 from the 选择或创建角色 授予AWS IoT访问权限以执行此操作.
    • Under 创建一个新角色 部分,输入 Iotdevice _ddb_role,然后选择 Create role.
    • Choose Add action 在......底部。 Configure 行动和选择 创建规则 在“创建规则”的底部创建规则.
 
 

测试AWS IoT规则和DynamoDB表插入

使用MQTT客户机,我们可以测试发布和订阅MQTT消息的新规则.

在AWS IoT控制台的左侧导航中

  • 选择MQTT客户机,然后选择订阅一个主题, add 设备/ + /数据 和订阅
  • 对于“主题过滤器”,输入前面创建的主题, 设备/ + /数据 在主题部分
  • 选择订阅.

有了特定的设备ID, 设备/ 22 /数据,向输入主题发布消息. 不能向包含通配符的MQTT主题发布.

  • 在MQTT客户机部分中,选择 发布到主题.
  • 输入输入主题名称, 设备/ 22 /数据 为主题名称,
  • 为Message有效负载输入以下示例数据
Plain text
复制到剪贴板
在新窗中打开代码
lighterjs 3语法高亮
{
“温度 ": 22,
" humidity ": 84,
" barometer ": 1233,
" wind ": {
" velocity ": 32,
" bearing": 245
}
}
{“温度”:22,“湿度”:84,“气压计”:1233,“风”:{“速度”:32,“轴承”:245}}
 
{
 “温度”:22日
 “湿度”:84年,
 “晴雨表”:1233年,
  "wind": {
    32岁的“速度”:
    “轴承”:245
  }
}
  • Choose Publish,以发布MQTT消息和 订阅一个主题 在MQTT客户机部分中.
  • Add 设备/ + /数据 在订阅栏下. 检查前一步中的样例数据是否出现在那里.

检查由您的规则创建的DynamoDB表中的行.

  • Enter the DynamoDB表中心在AWS物联网控制台,并选择 Iotdevice, 然后选择该窗口中的Items选项卡.
  • 现在我们可以看到 sample_time 表中的值是链接的. 发送第一条消息, 我们可以看到它将是列表中唯一一个包含所有数据的
  • Expand the device_data,如果您希望查看由规则查询语句产生的数据. 我们也可以编辑这些数据.
  • 选择保存, 如果您想保存修改或选择“取消”退出不保存任何更改
 

以JSON格式发送设备数据到DynamoDB表.

 

DynamoDB存储数据成功.

 
新的文字-动作 

作者简介

Rasmi Bhuyan

Rasmi拥有理学学士学位,在菠菜大平台(现在的synnerzip)工作了将近一年. 他是一名物联网爱好者,最近一直在摆弄不同的平台.

了解的内容

分享这篇文章

特色的见解