2016-04-28 53 views
3

我如何使用Node.js和AWS-IOT-设备SDK尝试AWS物联网与我的树莓派。它连接正常,但在.subscribe它没有调用回调函数。并发布不公布。请如果你能指出我正确的方向。我还在AWS IoT上创建了一条规则,其中topic3的所有数据都重新发布为topic2设备subcription主题的AWS物联网

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) { 
 
\t console.log(error); 
 
     console.log(result); 
 
    }); 
 
    device.publish('topic2', JSON.stringify({ test_data: 2})); 
 
    });

+0

它的好人,我发现什么是缺乏。我的AWS IoT中的规则未配置为重新发布到主题,而是记录。愚蠢的错误,但它发生。现在一切都很好,运行良好。但仍然困惑为什么订阅的回调函数没有被调用。也许这没有回调。我会深入挖掘mqtt.js文档 –

+0

Hi @Sandeep Randhawa ..如果可以帮忙,我有两个问题。 1)。你将如何在后台运行nodeJS程序。像例如我正在使用节点“test.js”来运行程序。现在,如果我关闭SSH会话,服务器也会死亡。我们应该如何在后台运行它。 2)。我们如何根据我们从响应中得到的结果进行切换。 –

+0

@Ankit Khanna您可以永久使用或使用pm2进行节点流程管理。不过,我会推荐使用'nohup',例如'nohup node index.js&'。我没有得到你的第二个问题,请你详细说明你想在这里实现什么。 –

回答

0

你指定的IOT:策略中的接收操作? http://docs.aws.amazon.com/iot/latest/developerguide/policy-actions.html

IOT:接收 表示从AWS的IoT接收消息的权限。每次将消息发送到客户端时,都会检查iot:Receive权限。由于每次投递都会检查此权限,因此可以使用该权限撤销当前订阅主题的客户端的权限。

我有一个类似的问题,你遇到了从未调用过订阅回调的地方。我的物联网客户正在发布并订阅相同的主题。发布作品,但订阅回调从未得到执行。将iot:Receive操作添加到同一主题后,订阅回调将按预期工作。