¿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"
}
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:Dropouts
con los datos reales del sensor que deseas enviar a DynamoDB. Puedes acceder a estos datos desde el parámetroevent
que se pasa a la función lambda. Por ejemplo, si tus datos del sensor están almacenados enevent.Dropouts
, puedes reemplazar"67476"
conevent.Dropouts
.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 departKey
.Aquí tienes una versión actualizada de
createMessage()
que incorpora estos cambios:Además, deberás modificar el código que llama a la función
createMessage()
para pasar los datos del sensor desde el parámetroevent
. Aquí tienes una versión actualizada de la función lambda que incorpora los cambios anteriores: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.