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,一个用于打开/关闭两个灯泡
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)
var params = {
payload: JSON.stringify(body),
topic: myTopic, //"topic_both" or "topic_bulb1"
qos: 0
};
var iotPromise = iotData.publish(params).promise();
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)
var params = {
payload: '{"state":{"desired":' + JSON.stringify(body) + '}}',
thingName: 'control_bulb'
};
iotData.updateThingShadow(params, function(err, data) {
}
- AWSIoTMQTTClient和AWSIoTShadowClient在性能、安全性和维护方面有什么不同
- 在哪种情况下,使用的是AWSIoTShadowClient还是AWSIoTMQTTClient
感谢这两个不同的客户端代表了AWS物联网的两个不同(尽管表面上相似)功能:
为AWS物联网的MQTT代理提供通用接口。它所做的只是允许您跨主题发送和接收消息。事实上,如果您真的想这样做,您可以使用任何MQTT客户机(例如Paho MQTT),但我会坚持使用AWS,因为它已经为他们的代理配置好了AWSIoTMQTTClient
是专门用于AWS物联网设备的接口。设备阴影是AWS管理的、每决策的双向同步“状态”。碰巧与阴影交互的一种方式是MQTT。但其目的不仅仅是发送/接收消息,而是为设备提供一种机制,使其能够持久化并从云中获取状态李>AWSIoTShadowClient
- 性能:两者使用相同的底层协议,因此具有相似的性能。如果您将其专门用于自己的使用,而不是遵循设备阴影模式,则推送时,AWSIoTMQTTClient的性能可能会更好;但我预计任何收益都可以忽略不计
- 安全性:再次使用AWS IoT的客户端/证书安全模型以完全相同的方式对两者进行安全保护
默认情况下可能更安全,因为它已经配置为确保只有设备可以设置其报告的状态AWSIoTShadowClient
- 维护:这取决于一点。如果您的用例(下一步讨论)是让设备报告其状态,并使该状态可从云中检查和更新,那么
更易于维护;仅仅因为这就是它的设计和测试目的——您将不得不编写和维护更少的自己的代码AWSIoTShadowClient
- 设备阴影:如果您没有拒绝的理由,请使用阴影。这是一种受管理且经过良好测试的模式(包括边缘情况,例如当您请求更改时,blub处于脱机状态),用于让您的设备从云端发送/接收/同步状态。它内置于AWS中,因此您可以在控制台中轻松查看/更改此状态。它还具有内置的持久性,因此您可以随时检查最新状态,即使您没有不断地侦听代理上的更改
- 您自己的MQTT主题:有几个理由不使用阴影。shadow要求您发送JSON有效负载,在电池/网络高度受限的情况下,您可能希望使用自己的二进制协议来节省字节。类似地,它的成本大约是原来的两倍(尽管仍然很便宜)。最后,如果您的读数是快速移动的,只写遥测数据,您不需要保留这些数据,并且可以在感兴趣时订阅这些数据,那么您可能会跳过阴影,因为您不需要它的任何功能
因此,在您的情况下,我想说您想要使用阴影。两个不同的客户端代表AWS物联网的两个不同(尽管表面上相似)功能:
为AWS物联网的MQTT代理提供通用接口。它所做的只是允许您跨主题发送和接收消息。事实上,如果您真的想这样做,您可以使用任何MQTT客户机(例如Paho MQTT),但我会坚持使用AWS,因为它已经为他们的代理配置好了AWSIoTMQTTClient
是专门用于AWS物联网设备的接口。设备阴影是AWS管理的、每决策的双向同步“状态”。碰巧与阴影交互的一种方式是MQTT。但其目的不仅仅是发送/接收消息,而是为设备提供一种机制,使其能够持久化并从云中获取状态李>AWSIoTShadowClient
- 性能:两者使用相同的底层协议,因此具有相似的性能。如果您将其专门用于自己的使用,而不是遵循设备阴影模式,则推送时,AWSIoTMQTTClient的性能可能会更好;但我预计任何收益都可以忽略不计
- 安全性:再次使用AWS IoT的客户端/证书安全模型以完全相同的方式对两者进行安全保护
默认情况下可能更安全,因为它已经配置为确保只有设备可以设置其报告的状态AWSIoTShadowClient
- 维护:这取决于一点。如果您的用例(下一步讨论)是让设备报告其状态,并使该状态可从云中检查和更新,那么
更易于维护;仅仅因为这就是它的设计和测试目的——您将不得不编写和维护更少的自己的代码AWSIoTShadowClient
- 设备阴影:如果您没有拒绝的理由,请使用阴影。这是一种经过管理和测试的模式(包括边缘情况,例如当您请求更改时,blub处于脱机状态),用于让您的设备发送消息