2017-07-07 3 views
0

Je suis nouveau à AWS IOT. J'ai le code python suivant qui affiche la température aléatoire au sujet "température". Je suis un tutoriel de projet Hackster.io, mais dans ce tutoriel, l'auteur envoie juste des données à AWS IOT et le reçoit en utilisant un autre script python. Je voudrais stocker ces données dans DynamoDB.AWS IOT température de stockage à 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...") 

Après avoir exécuté le script ci-dessus, je suis en mesure d'afficher les données qu'il envoie à AWS IOT en utilisant la fonction « Test ».

J'ai créé une règle

"SELECT * FROM #" 

une action DynamoDB comme:

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()} 

et une ombre comme suit:

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

Le tableau DynamoDB est configuré comme:

Partition key: temperature{String} 

Sort key: timestamp{String} 

La température n'est pas enregistrée dans la table DynamoDB. Qu'est-ce que je fais mal?

Répondre

0

Accédez à la console AWS IoT, puis définissez et activez CloudWatch Logs pour voir ce qui se passe. Vérifiez également si votre stratégie d'objet vous donne la permission de mettre des données sur DynamoDB. Étant donné que vous ne faites que d'un tutoriel, vous pouvez utiliser une politique comme celle-ci:

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

Ne pas oublier de joindre cette politique à votre certificat.