2017-07-07 83 views
0

我是AWS IOT的新用户。我有以下python代码,将随机温度发布到主题“温度”。 我正在关注Hackster.io项目教程,但在该教程中,作者只是将数据发送到AWS IOT并使用其他Python脚本接收数据。我想将这些数据存储到DynamoDB中。AWS IOT将温度存储到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...") 

运行上面的脚本后,我能够看到它使用了“测试”功能发送给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表被配置为:

Partition key: temperature{String} 

Sort key: timestamp{String} 

温度未保存在DynamoDB表中。我究竟做错了什么?

回答

0

转到AWS IoT控制台,然后设置并启用CloudWatch Logs,以便我们可以看到发生了什么。 另外,检查您的事情政策是否允许您将数据放入DynamoDB。 既然你只是做一个教程,你可以使用这样的策略:

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

不要忘了这个策略附加到您的证书。