2016-04-28 16 views
3

私は、Node.jsとaws-iot-device-sdkを使用して自分のRaspberry PiでAWS IoTを試していました。これは正常に接続していますが、.subscribeではコールバック関数が呼び出されていません。公開は公開していません。あなたが正しい方向に私を向けることができればお願いします。また、topic3のすべてのデータをtopic2に再公開するAWS IoTに関するルールを作成しました。AWS IoTのトピックサブスクリプション

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

こんにちは@Sandeep Randhawa ..もしあなたが助けることができるなら、2つの質問があります。 1)。バックグラウンドでnodeJSプログラムをどのように実行しますか?例えばのようなものである。私はノード "test.js"を使ってプログラムを実行しています。今私はSSHセッションを閉じると、サーバーも殺されます。私たちはどのようにバックグラウンドでそれを実行するのですか? 2)。どのように我々は、応答から得た結果に基づいてスイッチを行うことができます。 –

+0

@Ankit Khannaノードプロセス管理にforeverまたはpm2を使用できます。しかし、 'nohup node index.js 'などの' nohup'を使うことをお勧めします。そして、私はあなたの2番目の質問を得られませんでした。あなたがここで達成したいものを精巧にしてください。 –

答えて

0

あなたはIOTを指定しました:ポリシーでアクションを受信しますか? http://docs.aws.amazon.com/iot/latest/developerguide/policy-actions.html

IOT: を受信AWSのIoTからメッセージを受信する権限を表します。 iot:受信許可は、メッセージがクライアントに配信されるたびにチェックされます。このアクセス許可はすべての配信でチェックされるため、現在トピックに登録されているクライアントへのアクセス許可を取り消すために使用できます。

私はサブスクライブコールバックが呼び出されなかった場所で遭遇したのと同様の問題がありました。私のIOTクライアントは、同じトピックを発行して購読していました。公開は機能しますが、購読コールバックは決して実行されませんでした。同じトピックにiot:Receiveアクションを追加すると、サブスクライブコールバックが今度は期待通りに機能します。