25

Amazon Web Servicesのインターネット(AWS IoT)を使用してWebブラウザとの間でメッセージを送受信しようとしています(例:AWS IoTは...私たちは、これが可能であることを期待AWS IoTを使用してWebブラウザとの間でメッセージを送受信する方法

JavaScriptをサポートしているAWS秘密/鍵を公開している(私たちは、AWSのIoTドキュメントで検索しましたが、サーバー側の例を見つけました... )

ブラウザでWebSockets/MQTTを使用してメッセージを送受信するためのAWS IoTの使用例またはチュートリアル(例:AWS Cognitoで認証)?ありがとう!

答えて

19

JSのCognito IDプールを使用して、サブスクリプションに接続し、公開し、反応するサンプルです。

// Configure Cognito identity pool 
AWS.config.region = 'us-east-1'; 
var credentials = new AWS.CognitoIdentityCredentials({ 
    IdentityPoolId: 'us-east-1:your identity pool guid', 
}); 

// Getting AWS creds from Cognito is async, so we need to drive the rest of the mqtt client initialization in a callback 
credentials.get(function(err) { 
    if(err) { 
     console.log(err); 
     return; 
    } 
    var requestUrl = SigV4Utils.getSignedUrl('wss', 'data.iot.us-east-1.amazonaws.com', '/mqtt', 
     'iotdevicegateway', 'us-east-1', 
     credentials.accessKeyId, credentials.secretAccessKey, credentials.sessionToken); 
    initClient(requestUrl); 
}); 

function init() { 
    // do setup stuff 
} 

// Connect the client, subscribe to the drawing topic, and publish a "hey I connected" message 
function initClient(requestUrl) { 
    var clientId = String(Math.random()).replace('.', ''); 
    var client = new Paho.MQTT.Client(requestUrl, clientId); 
    var connectOptions = { 
     onSuccess: function() { 
      console.log('connected'); 

      // subscribe to the drawing 
      client.subscribe("your/mqtt/topic"); 

      // publish a lifecycle event 
      message = new Paho.MQTT.Message('{"id":"' + credentials.identityId + '"}'); 
      message.destinationName = 'your/mqtt/topic'; 
      console.log(message); 
      client.send(message); 
     }, 
     useSSL: true, 
     timeout: 3, 
     mqttVersion: 4, 
     onFailure: function() { 
      console.error('connect failed'); 
     } 
    }; 
    client.connect(connectOptions); 

    client.onMessageArrived = function (message) { 

     try { 
      console.log("msg arrived: " + message.payloadString); 
     } catch (e) { 
      console.log("error! " + e); 
     } 

    }; 
} 

Documentation for the credentials.get call, here

にも/公開を購読するためのあなたのIAM役割を承認することを忘れないでください。ここではサンプルです:here's a tutorial AWS IOTにサーバレスとWebSocketをを使用してReactJSフロントエンドにリアルタイムの更新を取得する方法を、簡単なチャットアプリを経由して示しています。それ以外の場合は誰に

{ 
    "Version": "2012-10-17", 
    "Statement": [ 
     { 
      "Effect": "Allow", 
      "Action": [ 
       "iot:Connect" 
      ], 
      "Resource": "*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": "iot:Receive", 
      "Resource": "*" 
     }, 
     { 
      "Effect": "Allow", 
      "Action": "iot:Subscribe", 
      "Resource": [ 
       "arn:aws:iot:us-east-1::your/mqtt/topic" 
      ] 
     }, 
     { 
      "Effect": "Allow", 
      "Action": "iot:Publish", 
      "Resource": [ 
       "arn:aws:iot:us-east-1::your/mqtt/topic" 
      ] 
     } 
    ] 
} 
+7

sigv4関数は参考までに[ここ](http://draw.kyleroche.com/sigv4utils.js)です。 –

+0

次のエラーが発生しています: aws-sdk-2.7.1.js:6834キャッチエラー:瞬間が定義されていません(...)callListeners @ aws-sdk-2.7.1.js:6834emit @ aws-sdk-2.7.1 .js:6810emit @ aws-sdk-2.7.1.js:4054transition @ aws-sdk-2.7.1.js:3831runTo @ aws-sdk -..... 私もaws sdkを更新しましたが、それでも同じエラーが出る場合は、あなたが私を助けてくれ、可能であれば、あなたが使っているaws-sdk.jsファイルを共有してください。 –

+0

あなたは "iotdevicegateway"を使っていますが、 "iotdevicegateway"として何をパラメータとして渡していますか? resourceIdまたはDeviceIdを渡す必要がありますか? –

1

は解決策を探しています。チュートリアルのソースコードはon Githubです。

+1

この例には、Cognitoサポートは含まれていません。それは明確ではありません:この例では、javascriptソースのキーを公開していますか? –

関連する問題