Cómo utilizar AWS IoT para enviar / recibir mensajes a / desde el navegador web

Estamos tratando de utilizar los Servicios web de Amazon Internet of Things (AWS IoT) para enviar mensajes desde / a un navegador web (por ejemplo:. Dado que AWS IoT admite JavaScript, esperamos que esto sea posible

Hemos buscado en la Documentación de IoT de AWS pero solo encontramos ejemplos del lado del servidor (que exponen los secretos / claves de AWS …)

¿Hay algún buen ejemplo de trabajo o tutoriales para usar AWS IoT para enviar / recibir mensajes a través de WebSockets / MQTT en el navegador (por ejemplo: autenticar con AWS Cognito) ? ¡Gracias!

Aquí hay una muestra que utiliza un grupo de identidades cognitivas en JS para conectarse, publicar y reactjsr ante una suscripción.

// 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); } }; } 

Documentación para la llamada credentials.get , aquí.

Recuerde autorizar su rol de IAM para la suscripción / publicación también. Aquí hay una muestra:

 { "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" ] } ] } 

En caso de que alguien más esté buscando una solución: aquí hay un tutorial que demuestra a través de una aplicación de chat simple cómo obtener actualizaciones en tiempo real en un front-end de ReactJS utilizando Serverless y Websockets en AWS IOT. El código fuente del tutorial está disponible en Github .

    Intereting Posts