继续我们的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存储数据成功.