2016-04-19 14 views
3

私はAWS IoTとMQTTの初心者です。私は単純な例でAWSからペイロードを読み込み、ペイロードをAWSに公開しようとしています。デバイス上でペイロードを読み取ることはできますが、公開することはできません。 AWSコンソールからシャドウ状態を更新すると、ラズベリー・ピーはメッセージを受け取ることができますが、何も起こっていないときは公開しています。 AWSコンソールでは状態が変わっていません。mqttとAWS iotのトラブルシューティング方法

コードが付属しています。提案してください。

def on_connect(mqttc, obj, flags, rc): 
    if rc==0: 
     print ("Subscriber Connection status code: "+str(rc)+" | Connection status: successful") 
    elif rc==1: 
     print ("Subscriber Connection status code: "+str(rc)+" | Connection status: Connection refused") 

def on_subscribe(mqttc, obj, mid, granted_qos): 
    print("Subscribed: "+str(mid)+" "+str(granted_qos)+"data"+str(obj)) 
    first_message() 

def on_message(mqttc, obj, msg): 
    print("Received message from topic: "+msg.topic+" | QoS: "+str(msg.qos)+" | Data Received: "+str(msg.payload)) 

def on_publish(client, userdata, mid): 
    print("Message is published") 

def first_message(): 
    data = {} data['r'] = 2 data['g'] = 255 data['b'] = 95 data2 = {} data2['color'] = data data3 = {} data3['reported'] = data2 data4 = {} 
    data4['state'] = data3 json_data = json.dumps(data4) print(str(json_data)) 
    (rc, mid) = mqttc.publish("$aws/things/thirdthing/shadow/update/", str(json_data), 1) 

mqttc = mqtt.Client(client_id="thirdthing1") 
mqttc.on_connect = on_connect 
mqttc.on_subscribe = on_subscribe 
mqttc.on_message = on_message 
mqttc.on_publish = on_publish 
mqttc.tls_set("/home/pi/deviceSDK/root-CA.crt", 
       certfile="/home/pi/deviceSDK/7391d7d21d-certificate.pem.crt", 
       keyfile="/home/pi/deviceSDK/7391d7d21d-private.pem.key", 
       tls_version=ssl.PROTOCOL_TLSv1_2, 
       ciphers=None) 
mqttc.connect("AYYCW0HM971XS.iot.us-west-2.amazonaws.com", port=8883) #AWS IoT service hostname and portno 
mqttc.subscribe("$aws/things/thirdthing/shadow/update/#", qos=1) #The names of these topics start with $aws/things/thingName/shadow." 
mqttc.loop_forever() 
+0

コードをテキストとして入力してください。画像ではありません。 – Undo

+0

CloudWatchを有効にしてログを確認します。あなたの製品に適切なポリシーを付けることを忘れないでください –

答えて

1

[OK]を私は自分自身でこれを解決しました。

上記コードのエラーは、私が送信していたjsonデータの形式化です。 first_message()関数を指定されたコードに置き換えると、この例は完全に動作します。

def first_message(): 
    payload = json.dumps({ 
     "state":{ 
      "reported":{ 
       "this_thing_is_alive":True, 
       "color":{ 
        "r":255, 
        "g":1, 
        "b":255 
       } 
      } 
     } 
    }) 

    mqttc.publish("$aws/things/thirdthing/shadow/update", payload) 
関連する問題