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?