AWS IOT 将温度存储到 DynamoDB

AWS IOT store temperature to DynamoDB

我是 AWS 物联网的新手。我有以下 python 代码将随机温度发布到主题 "temperature"。 我正在关注 Hackster.io 项目教程,但在该教程中,作者只是将数据发送到 AWS IOT 并使用另一个 python 脚本接收数据。我想将这些数据存储到 DynamoDB 中。

import paho.mqtt.client as paho
import os
import socket
import ssl
from time import sleep
from random import uniform

connflag = False

def on_connect(client, userdata, flags, rc):
    global connflag
    connflag = True
    print("Connection returned result: " + str(rc) )

def on_message(client, userdata, msg):
    print(msg.topic+" "+str(msg.payload))

#def on_log(client, userdata, level, buf):
#    print(msg.topic+" "+str(msg.payload))

mqttc = paho.Client()
mqttc.on_connect = on_connect
mqttc.on_message = on_message
#mqttc.on_log = on_log

awshost = "data.iot.eu-west-1.amazonaws.com"
awsport = 8883
clientId = "myThingName"
thingName = "myThingName"
caPath = "aws-iot-rootCA.crt"
certPath = "cert.pem"
keyPath = "privkey.pem"

mqttc.tls_set(caPath, certfile=certPath, keyfile=keyPath, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)

mqttc.connect(awshost, awsport, keepalive=60)

mqttc.loop_start()

while 1==1:
    sleep(0.5)
    if connflag == True:
        tempreading = uniform(20.0,25.0)
        mqttc.publish("temperature", tempreading, qos=1)
        print("msg sent: temperature " + "%.2f" % tempreading )
    else:
        print("waiting for connection...")

在 运行 上面的脚本之后,我可以使用 "Test" 函数查看它发送到 AWS IOT 的数据。

我创建了一个规则

"SELECT * FROM #"

DynamoDB 操作为:

Table name : temperature

Hash key: temperature

Hash key type: STRING

Hash key value: ${temperature()}

Range key: timestamp

Range key type: STRING

Range key value: ${timestamp()}

和阴影如下:

https://c1.staticflickr.com/5/4259/35723809136_d968acf299_o.png

DynamoDB table 配置为:

Partition key: temperature{String}

Sort key: timestamp{String}

温度没有保存在 DynamoDB 中 table。我做错了什么?

转到 AWS IoT 控制台,然后设置并启用 CloudWatch Logs,这样我们就可以看到发生了什么。 此外,检查您的事物策略是否允许您将数据放在 DynamoDB 上。 鉴于您只是在做教程,您可以使用这样的策略:

{
  "Version": "2012-10-17",
  "Statement": [
    {
      "Action": [
        "iot:*"
      ],
      "Resource": [
        "*"
      ],
      "Effect": "Allow"
    }
  ]
}

不要忘记将此策略附加到您的证书中。