2017-07-07 12 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に送信しているデータを表示できます。次のように

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のテーブルは次のように構成されています

私はDynamoDBのアクションとして

"SELECT * FROM #" 

としてのルールを作成している

Partition key: temperature{String} 

Sort key: timestamp{String} 

温度がDynamoDBテーブルに保存されません。私は間違って何をしていますか?

答えて

0

AWS IoTコンソールにアクセスして、CloudWatchログを設定して有効にして、何が起きているかを確認します。 また、物事方針がDynamoDBにデータを置く権限を与えるかどうかを確認してください。

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

は、証明書には、このポリシーを付加することを忘れないでください:あなただけのチュートリアルをやっていることを考えると は、次のようなポリシーを使用することができます。

関連する問題