Позвольте мне представить вам мою проблему, прежде всего я должен сказать, что я новичок в AWS и MQTT, я имею в виду (не сердитесь на меня), мой вопрос: я хочу опубликовать через MQTT клиент для AWS IoT / Lambda просто JSON {'petition': 'Hola', 'n': 0}, и после публикации лямбда-функция должна отправить обратно сообщение JSON {'petition': 'Mundo', 'n ': 0} и он должен сделать это 10 раз. Код работает нормально, когда вы публикуете сообщение, но он не получает ничего. Пожалуйста, мне нужна помощь, чтобы решить ее.
Вот скемма:
DEVICE ---> MQTT ---> IoT SQL SENTENCE ---> AWS LAMBDA
УСТРОЙСТВО <--- MQTT <--- AWS LAMBDA </h2>
ПРИМЕЧАНИЕ: устройство работает в терминале Linux, и сообщения должны каким-то образом появляться на экране.
Лямбда-обработчик AWS
import json
def lambda_handler(event, context):
# TODO implement
data={}
data["petition"]="Mundo"
data["n"]=event["n"]
mensaje = event['petition']
if mensaje =='Hola':
envio=json.dumps(data)
return data
else:
return 'nada encontrado'
IoT SQL SENTENCE
SELECT * FROM 'Hello_World'
ПРИМЕЧАНИЕ: те 2, что выше, реализованы с использованием службы лямбда-функций.
КОД УСТРОЙСТВА
import paho.mqtt.client as paho
import os
import socket
import ssl
import time
import json
def on_connect(client, userdata, flags, rc):
print("Connection returned result: " + str(rc) )
# Subscribing in on_connect() means that if we lose the connection and
# reconnect then subscriptions will be renewed.
def on_message(client, userdata, msg):
print("topic: "+msg.topic)
print("payload: "+str(msg.payload))
data=json.loads(msg.payload)
if data["n"]<9 and data["petition"]=="Mundo":
data["petition"] = "Hola"
data["n"] = n+1
envio=json.dumps(data)
mqttc.publish(thingName, envio)
time.sleep(4)
def on_publish(client,userdata,missatge): #create function for callback
print("data published \n")
print "Create client instance"
mqttc = paho.Client()
mqttc.on_connect = on_connect
mqttc.on_publish = on_publish
mqttc.on_message = on_message
#mqttc.on_log = on_log
data={}
awshost = "a20u2bg4i3u0uq.iot.eu-west-2.amazonaws.com"
awsport = 8883
clientId = "39cfba3c326847909aa5f4544211f4a4"
thingName = "Hello_World"
caPath = "/#/rootCA.pem"
certPath = "/#/3218b320c9-certificate.pem.crt"
keyPath = "/#/3218b320c9-private.pem.key"
mqttc.tls_set(caPath, certfile=certPath, keyfile=keyPath, cert_reqs=ssl.CERT_REQUIRED, tls_version=ssl.PROTOCOL_TLSv1_2, ciphers=None)
print "connecting to browser"
mqttc.connect(awshost, awsport, keepalive=60)
mqttc.loop_start()
time.sleep(2)
print"subscribing...."
mqttc.subscribe(thingName)
print"subscribed"
time.sleep(2)
data["petition"]="Hola"
data["n"]=0
envio=json.dumps(data)
print(envio)
print "Sending..."
mqttc.publish(thingName, envio)
time.sleep(4)
print "Sent"
mqttc.disconnect()
mqttc.loop_stop()