2016-08-17 11 views
0

AWS IoT経由でデバイスと通信できるiOSアプリケーションを構築しています。デバイスとアプリの両方がアップデート/受け入れ、受け入れ/受け入れ、更新/デルタに登録されています。いずれの側からもアップデートを公開することができ、アップデートはAWS IoTの事柄の影に反映されますが、アップデートは決してデバイス間で中継されませんでした。アプリでsendを押すと、AWS IoTにアップデートが表示されますが、トピックに登録されているデバイスは、このようなアップデートを受け取っていないように見えます。逆も同様です。 以下は、デバイス側のcod snippetです。AWS IoTデバイスがiOSアプリケーションによってメッセージを公開していない

# For certificate based connection 
myShadowClient = AWSIoTMQTTShadowClient("myDevice") 
myShadowClient.configureEndpoint("xxxxxxxxx.iot.us-east-1.amazonaws.com", 8883) 
myShadowClient.configureCredentials("certs/root-CA.crt", "certs/private.pem.key", "certs/certificate.pem.crt") 
myShadowClient.configureConnectDisconnectTimeout(10) # 10 sec 
myShadowClient.configureMQTTOperationTimeout(5) # 5 sec 


# Custom MQTT message callback 
def customCallback(client, userdata, message): 
    print("Received a new message: ") 
    print(message.payload) 
    print("from topic: ") 
    print(message.topic) 
    print("--------------\n\n") 

# Custom Shadow callback 
def customShadowCallback_Update(payload, responseStatus, token): 
    # payload is a JSON string ready to be parsed using json.loads(...) 
    # in both Py2.x and Py3.x 
    if responseStatus == "timeout": 
     print("Update request " + token + " time out!") 
    if responseStatus == "accepted": 
     payloadDict = json.loads(payload) 
     print("~~~~~~~~~~~~~~~~~~~~~~~") 
     print("Update request with token: " + token + " accepted!") 
     print("property: " + str(payloadDict["state"]["desired"]["property"])) 
     print("~~~~~~~~~~~~~~~~~~~~~~~\n\n") 
    if responseStatus == "rejected": 
     print("Update request " + token + " rejected!") 

def customShadowCallback_Delete(payload, responseStatus, token): 
    if responseStatus == "timeout": 
     print("Delete request " + token + " time out!") 
    if responseStatus == "accepted": 
     print("~~~~~~~~~~~~~~~~~~~~~~~") 
     print("Delete request with token: " + token + " accepted!") 
     print("~~~~~~~~~~~~~~~~~~~~~~~\n\n") 
    if responseStatus == "rejected": 
     print("Delete request " + token + " rejected!") 

#MQTT Operations 
JSONPayload = '{"state":{"reported":{"property": "published from Device"}}}' 


myShadowClient.connect() 
myMQTTClient = myShadowClient.getMQTTConnection() 

# AWSIoTMQTTClient connection configuration 
myMQTTClient.configureAutoReconnectBackoffTime(1, 32, 20) 
myMQTTClient.configureOfflinePublishQueueing(-1) # Infinite offline Publish queueing 
myMQTTClient.configureDrainingFrequency(2) # Draining: 2 Hz 
myMQTTClient.configureConnectDisconnectTimeout(10) # 10 sec 
myMQTTClient.configureMQTTOperationTimeout(5) # 5 sec 

myMQTTClient.publish("$aws/things/myDevice/shadow/update", JSONPayload, 1) 
myMQTTClient.publish("$aws/things/myDevice/shadow/get", "", 1) 
myMQTTClient.subscribe("$aws/things/myDevice/shadow/update/accepted", 1, customCallback) 
myMQTTClient.subscribe("$aws/things/myDevice/shadow/update/rejected", 1, customCallback) 

myMQTTClient.subscribe("$aws/things/myDevice/shadow/get/accepted", 1, customCallback) 
myMQTTClient.subscribe("$aws/things/myDevice/shadow/get/rejected", 1, customCallback) 
myMQTTClient.subscribe("$aws/things/myDevice/shadow/update/delta", 1, customCallback) 


# Create a device shadow instance using persistent subscription 

myDeviceShadow = myShadowClient.createShadowHandlerWithName("Bot", True) 
while True: 
    time.sleep(10) 

答えて

1

これは動作を意図したものです。説明はあります。

デルタ状態は、望ましい状態と報告された状態の違いを含む仮想状態の状態です。レポートされたセクションにない、目的のセクションのフィールドはデルタに含まれます。報告されたセクションにあり、希望のセクションにないフィールドは、デルタに含まれているではなく、です。

関連する問題