es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo leer datos del sensor desde mi ESP32 a DynamoDB?

Estoy aprendiendo acerca de los servicios de AWS y estoy intentando crear un canal de datos desde mi ESP32 (datos del fotorresistor) hacia DynamoDB.

He creado una regla que recibe mensajes MQTT entrantes desde mi ESP32 y activa una función lambda que envía los datos a mi DynamoDB.

Lo tengo funcionando para valores codificados en la función lambda, pero ¿cómo puedo modificar el siguiente código para leer en tiempo real los datos del sensor desde el ESP32?

Aquí está el código lambda (node.js):

const AWS = require("aws-sdk");
const ddb = new AWS.DynamoDB.DocumentClient({region: 'us-west-2'});

exports.handler = async (event, context, callback) => {
    // Captura el requestId del mensaje de contexto
    const requestId = context.awsRequestId;

    // Maneja los estados de promesa cumplidos/rechazados
    await createMessage(requestId).then(() => {
        callback(null, {
            statusCode: 201,
            body: '',
            headers: {
                'Access-Control-Allow-Origin' : '*'
            }
        });
    }).catch((err) => {
        console.error(err)
    });
};

// Función createMessage
// Escribe el mensaje en la tabla de DynamoDB llamada "Message"
function createMessage(requestId) {
    const params = {
        TableName: 'my-ddd-data',
        Item: {
            'partKey': requestId,
            'Dropouts': "67476", // esto se envía correctamente a mi base de datos, pero me gustaría tener datos de sensor en tiempo real
            'Runtime' : "0 mins"
        }
    };
    return ddb.put(params).promise();
}

El formato JSON de los datos que se alimentan a esta función lambda:

{
  "Dropouts": "1",
  "Runtime": "0 mins"
}
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para modificar el código lambda para leer datos de sensor en tiempo real desde el ESP32, necesitarás modificar la función createMessage() de las siguientes formas:

    1. Reemplaza el valor codificado para Dropouts con los datos reales del sensor que deseas enviar a DynamoDB. Puedes acceder a estos datos desde el parámetro event que se pasa a la función lambda. Por ejemplo, si tus datos del sensor están almacenados en event.Dropouts, puedes reemplazar "67476" con event.Dropouts.
    2. Modifica el valor de partKey para asegurarte de que cada entrada en la tabla de DynamoDB tenga una clave única. Puedes usar el identificador único del ESP32 o una marca de tiempo como parte del valor de partKey.

    Aquí tienes una versión actualizada de createMessage() que incorpora estos cambios:

    function createMessage(requestId, sensorData) {
        const params = {
            TableName: 'my-ddd-data',
            Item: {
                'partKey': `${requestId}-${Date.now()}`, // utiliza una combinación de requestId y marca de tiempo para una clave única
                'Dropouts': sensorData.Dropouts,
                'Runtime': sensorData.Runtime
            }
        }
        return ddb.put(params).promise();
    }
    

    Además, deberás modificar el código que llama a la función createMessage() para pasar los datos del sensor desde el parámetro event. Aquí tienes una versión actualizada de la función lambda que incorpora los cambios anteriores:

    exports.handler = async (event, context, callback) => {
        // Captura el requestId del mensaje de contexto
        const requestId = context.awsRequestId;
    
        // Maneja los estados de cumplimiento/rechazo de la promesa
        await createMessage(requestId, event).then(() => {
            callback(null, {
                statusCode: 201,
                body: '',
                headers: {
                    'Access-Control-Allow-Origin' : '*'
                }
            });
        }).catch((err) => {
            console.error(err)
        })
    };
    

    Con estos cambios, tu función lambda debería poder recibir datos de sensor en tiempo real desde tu dispositivo ESP32 y escribirlos en la tabla de DynamoDB.

Comments are closed.