4

我正在使用 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}));
  });

4

2 回答 2

2

您是否在策略中指定了 iot:Receive 操作? http://docs.aws.amazon.com/iot/latest/developerguide/policy-actions.html

iot:Receive 表示从 AWS IoT 接收消息的权限。每次将消息传递给客户端时,都会检查 iot:Receive 权限。因为每次交付都会检查此权限,所以它可用于撤销对当前订阅主题的客户端的权限。

我遇到了与从未调用过订阅回调的情况类似的问题。我的 IOT 客户正在发布和订阅同一个主题。发布工作,但订阅回调从未被执行。将 iot:Receive 操作添加到同一主题后,订阅回调现在按预期工作。

于 2017-11-24T01:53:48.717 回答
1

设备证书附带的策略中似乎没有发布和订阅的策略声明。为了发布和订阅 AWS IoT 代理,附加到设备的策略应包含以下语句:

{
  "Effect": "Allow",
  "Action": [
    "iot:Publish",
    "iot:Subscribe",
    "iot:Connect",
    "iot:Receive"
  ],
  "Resource": [
    "*"
  ]
}
于 2018-05-28T15:36:03.820 回答