Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript AWSIoT:AWSIoTShadowClient与AWSIoTMQTTClient_Javascript_Python_Amazon Web Services_Iot_Aws Iot - Fatal编程技术网

Javascript AWSIoT:AWSIoTShadowClient与AWSIoTMQTTClient

Javascript AWSIoT:AWSIoTShadowClient与AWSIoTMQTTClient,javascript,python,amazon-web-services,iot,aws-iot,Javascript,Python,Amazon Web Services,Iot,Aws Iot,我有一个物联网项目,它是: 2个灯泡,连接到2个树莓皮(python) 带有3个按钮的web应用程序(Javascript):一个用于打开/关闭灯泡1,一个用于打开/关闭灯泡2,一个用于打开/关闭两个灯泡 我有两种不同的方法 使用AWSIoTMQTTClient: Pi: class CallbackContainer(object): def __init__(self, client): self._client = client def messa

我有一个物联网项目,它是:

  • 2个灯泡,连接到2个树莓皮(python)
  • 带有3个按钮的web应用程序(Javascript):一个用于打开/关闭灯泡1,一个用于打开/关闭灯泡2,一个用于打开/关闭两个灯泡
我有两种不同的方法

使用AWSIoTMQTTClient:
  • Pi:

     class CallbackContainer(object):
    
        def __init__(self, client):
            self._client = client
    
        def messagePrint(self, client, userdata, message):
            print("Received a new message: ")
            print(message.payload)
            print("from topic: ")
            print(message.topic)
            print("--------------\n\n")
    
    
    myAWSIoTMQTTClient = AWSIoTMQTTClient("myClientID")
    myAWSIoTMQTTClient.configureEndpoint("xxxxx.iot.eu-west-1.amazonaws.com", 8883)
    myAWSIoTMQTTClient.configureCredentials("./certs/rootCA.pem", "./certs/xxxxxxx-private.pem.key", "./certs/xxxxxxx-certificate.pem.crt")
    myAWSIoTMQTTClient.configureConnectDisconnectTimeout(10)  # 10 sec
    myAWSIoTMQTTClient.configureMQTTOperationTimeout(5)  # 5 sec
    myCallbackContainer = CallbackContainer(myAWSIoTMQTTClient)
    
    myAWSIoTMQTTClient.connect()
    
    myAWSIoTMQTTClient.subscribe("topic_both", 0, myCallbackContainer.messagePrint)
    myAWSIoTMQTTClient.subscribe("topic_bulb1", 0, myCallbackContainer.messagePrint)
    
    while True:
       time.sleep(1)
    
  • Javascript:

    var params = {
        payload: JSON.stringify(body),
        topic: myTopic, //"topic_both" or "topic_bulb1"
        qos: 0 
    };
    
    
    var iotPromise = iotData.publish(params).promise();
    
  • 使用AWSIoTShadowClient:
  • Pi:

    def customShadowCallback_Delta(payload, responseStatus, token):
    
       print(responseStatus)
       payloadDict = json.loads(payload)
       print("++++++++DELTA++++++++++")
       print("property: " + str(payloadDict["state"]))
       print("+++++++++++++++++++++++\n\n")
       #Need to handle JSON to control bulbs
    
    thingName = "control_bulb"
    
    myAWSIoTMQTTShadowClient = AWSIoTMQTTShadowClient("myClientID")
    myAWSIoTMQTTShadowClient.configureEndpoint("xxxxxx.iot.eu-west-1.amazonaws.com", 8883)
    myAWSIoTMQTTShadowClient.configureCredentials("/certs/rootCA.pem", "/certs/xxxxx-private.pem.key", "/certs/xxxxx-certificate.pem.crt")
    myAWSIoTMQTTShadowClient.configureConnectDisconnectTimeout(10)  # 10 sec
    myAWSIoTMQTTShadowClient.configureMQTTOperationTimeout(5)  # 5 sec
    
    myAWSIoTMQTTShadowClient.connect()
    
    
    deviceShadowHandler = myAWSIoTMQTTShadowClient.createShadowHandlerWithName(thingName, True)
    deviceShadowHandler.shadowRegisterDeltaCallback(customShadowCallback_Delta)
    
    
    while True:
       time.sleep(1)
    
  • JavaScript:

    var params = {
       payload: '{"state":{"desired":' + JSON.stringify(body) + '}}',
       thingName: 'control_bulb'
    };
    
    
    iotData.updateThingShadow(params, function(err, data) {
    }
    
  • 这两种方法都能达到项目的目的。然而,我的问题是:

    • AWSIoTMQTTClient和AWSIoTShadowClient在性能、安全性和维护方面有什么不同
    • 在哪种情况下,使用的是AWSIoTShadowClient还是AWSIoTMQTTClient

    感谢

    这两个不同的客户端代表了AWS物联网的两个不同(尽管表面上相似)功能:

    • AWSIoTMQTTClient
      为AWS物联网的MQTT代理提供通用接口。它所做的只是允许您跨主题发送和接收消息。事实上,如果您真的想这样做,您可以使用任何MQTT客户机(例如Paho MQTT),但我会坚持使用AWS,因为它已经为他们的代理配置好了
    • AWSIoTShadowClient
      是专门用于AWS物联网设备的接口。设备阴影是AWS管理的、每决策的双向同步“状态”。碰巧与阴影交互的一种方式是MQTT。但其目的不仅仅是发送/接收消息,而是为设备提供一种机制,使其能够持久化并从云中获取状态
    为了回答你的问题:

    • 性能:两者使用相同的底层协议,因此具有相似的性能。如果您将其专门用于自己的使用,而不是遵循设备阴影模式,则推送时,AWSIoTMQTTClient的性能可能会更好;但我预计任何收益都可以忽略不计

    • 安全性:再次使用AWS IoT的客户端/证书安全模型以完全相同的方式对两者进行安全保护
      AWSIoTShadowClient
      默认情况下可能更安全,因为它已经配置为确保只有设备可以设置其报告的状态

    • 维护:这取决于一点。如果您的用例(下一步讨论)是让设备报告其状态,并使该状态可从云中检查和更新,那么
      AWSIoTShadowClient
      更易于维护;仅仅因为这就是它的设计和测试目的——您将不得不编写和维护更少的自己的代码

    选择一种方法:

    • 设备阴影:如果您没有拒绝的理由,请使用阴影。这是一种受管理且经过良好测试的模式(包括边缘情况,例如当您请求更改时,blub处于脱机状态),用于让您的设备从云端发送/接收/同步状态。它内置于AWS中,因此您可以在控制台中轻松查看/更改此状态。它还具有内置的持久性,因此您可以随时检查最新状态,即使您没有不断地侦听代理上的更改

    • 您自己的MQTT主题:有几个理由不使用阴影。shadow要求您发送JSON有效负载,在电池/网络高度受限的情况下,您可能希望使用自己的二进制协议来节省字节。类似地,它的成本大约是原来的两倍(尽管仍然很便宜)。最后,如果您的读数是快速移动的,只写遥测数据,您不需要保留这些数据,并且可以在感兴趣时订阅这些数据,那么您可能会跳过阴影,因为您不需要它的任何功能


    因此,在您的情况下,我想说您想要使用阴影。

    两个不同的客户端代表AWS物联网的两个不同(尽管表面上相似)功能:

    • AWSIoTMQTTClient
      为AWS物联网的MQTT代理提供通用接口。它所做的只是允许您跨主题发送和接收消息。事实上,如果您真的想这样做,您可以使用任何MQTT客户机(例如Paho MQTT),但我会坚持使用AWS,因为它已经为他们的代理配置好了
    • AWSIoTShadowClient
      是专门用于AWS物联网设备的接口。设备阴影是AWS管理的、每决策的双向同步“状态”。碰巧与阴影交互的一种方式是MQTT。但其目的不仅仅是发送/接收消息,而是为设备提供一种机制,使其能够持久化并从云中获取状态
    为了回答你的问题:

    • 性能:两者使用相同的底层协议,因此具有相似的性能。如果您将其专门用于自己的使用,而不是遵循设备阴影模式,则推送时,AWSIoTMQTTClient的性能可能会更好;但我预计任何收益都可以忽略不计

    • 安全性:再次使用AWS IoT的客户端/证书安全模型以完全相同的方式对两者进行安全保护
      AWSIoTShadowClient
      默认情况下可能更安全,因为它已经配置为确保只有设备可以设置其报告的状态

    • 维护:这取决于一点。如果您的用例(下一步讨论)是让设备报告其状态,并使该状态可从云中检查和更新,那么
      AWSIoTShadowClient
      更易于维护;仅仅因为这就是它的设计和测试目的——您将不得不编写和维护更少的自己的代码

    选择一种方法:

    • 设备阴影:如果您没有拒绝的理由,请使用阴影。这是一种经过管理和测试的模式(包括边缘情况,例如当您请求更改时,blub处于脱机状态),用于让您的设备发送消息