2016-04-28 49 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操作添加到同一主題後,訂閱回調將按預期工作。