我使用Node.js和aws-iot-device-sdk尝试使用我的Raspberry Pi进行AWS IoT。它连接正常,但在.subscribe
它没有调用回调函数。并且发布不发布。如果你能指出我正确的方向,请。我还在AWS IoT上创建了一条规则,其中topic3
的所有数据都重新发布到topic2
。
var awsIot = require('aws-iot-device-sdk');
var device = awsIot.device({
"host": "A3SXXXXXXXXXXX.iot.us-west-2.amazonaws.com",
"port": 8883,
"clientId": "MyClientId",
"thingName": "MyThingName",
"caCert": "./certs/root-CA.crt",
"clientCert": "./certs/certificate.pem.crt",
"privateKey": "./certs/private.pem.key"
});
device
.on('connect', function() {
console.log('connected');
device.subscribe({'topic3':0}, function(error, result) {
console.log(error);
console.log(result);
});
device.publish('topic2', JSON.stringify({ test_data: 2}));
});

答案 0 :(得分:0)
您是否指定了iot:在策略中接收操作? http://docs.aws.amazon.com/iot/latest/developerguide/policy-actions.html
IOT:接收 表示从AWS IoT接收消息的权限。 iot:每次将消息传递给客户端时都会检查接收权限。由于每次传递都会检查此权限,因此可以使用它来撤消当前订阅主题的客户端的权限。
我遇到的问题与你从未调用过订阅回调的问题有关。我的IOT客户端正在发布和订阅相同的主题。发布工作但订阅回调从未执行过。将iot:Receive操作添加到同一主题后,订阅回调现在按预期工作。
答案 1 :(得分:0)
似乎没有关于在设备证书附带的政策中发布和订阅的政策声明。要发布和订阅AWS IoT brocker,附加到设备的策略应包含以下语句:
QueryDict