AWS IoT设备未获取iOS应用发布的消息

AWS IoT设备未获取iOS应用发布的消息

问题描述:

因此,我正在构建一个可通过AWS IoT与设备进行通信的iOS应用。设备和应用都订阅了更新/接受,获取/接受和更新/增量。我可以从任何一方发布更新,并且更新反映在AWS IoT事物影子上,但不知何故更新从不会从一个设备传递到另一个设备。因此,如果我在应用程序上按下发送更新,则会在AWS IoT上显示更新,但假定订阅主题的设备似乎没有收到此类更新,反之亦然。 下面是设备端的鳕鱼片段。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) 

这是预期的行为。可以找到解释here

三角洲状态是一种虚拟类型的状态,它包含期望状态和报告状态之间的差异。增量中包含所需部分中不在报告部分中的字段。报告部分中未包含在期望部分中的字段是而不是包含在增量中的