const { Analysis, Device, Utils } = require("@tago-io/sdk");
async function myAnalysis(context) {
// Lê os tokens de dispositivo dos parâmetros de ambiente
const env_vars = Utils.envToJson(context.environment);
const deviceTokens = [
env_vars.device_token_1,
env_vars.device_token_2,
// Adicione mais tokens conforme necessário
];
// Loop através dos tokens de dispositivo
for (const deviceToken of deviceTokens) {
if (!deviceToken) {
context.log("Token de dispositivo ausente nos parâmetros de ambiente");
continue;
}
const device = new Device({ token: deviceToken });
// Loop para cada mês do ano
for (let month = 1; month <= 12; month++) {
// Formata o mês para ter dois dígitos (por exemplo, "01" para janeiro)
const formattedMonth = month < 10 ? `0${month}` : `${month}`;
const year = new Date().getFullYear(); // Obtém o ano corrente
// Filtro para obter todos os valores da variável "vazaopoco1" para o mês atual
const vazaoFilter1 = {
variable: "vazaopoco1",
start_date: `${year}-${formattedMonth}-01T00:00:00Z`,
end_date: `${year}-${formattedMonth}-31T23:59:59Z`,
};
// Filtro para obter todos os valores da variável "vazaopoco2" para o mês atual
const vazaoFilter2 = {
variable: "vazaopoco2",
start_date: `${year}-${formattedMonth}-01T00:00:00Z`,
end_date: `${year}-${formattedMonth}-31T23:59:59Z`,
};
try {
// Obtém todos os valores da variável "vazaopoco1" para o dispositivo atual e o mês atual
const dataVazao1 = await device.getData(vazaoFilter1);
// Obtém todos os valores da variável "vazaopoco2" para o dispositivo atual e o mês atual
const dataVazao2 = await device.getData(vazaoFilter2);
// Calcula a soma de todos os valores da variável "vazaopoco1" para o mês atual
const somaTotal1 = dataVazao1.reduce((total, data) => total + parseFloat(data.value), 0);
// Calcula a soma de todos os valores da variável "vazaopoco2" para o mês atual
const somaTotal2 = dataVazao2.reduce((total, data) => total + parseFloat(data.value), 0);
// Define o nome da variável de consumo com base no mês atual para "vazaopoco1"
const nomeVariavelConsumo1 = `vazaopoco1_${formattedMonth}`;
// Define o nome da variável de consumo com base no mês atual para "vazaopoco2"
const nomeVariavelConsumo2 = `vazaopoco2_${formattedMonth}`;
// Cria objetos para enviar para as variáveis de consumo correspondentes ao mês atual
const consumoValue1 = {
variable: nomeVariavelConsumo1,
value: somaTotal1,
};
const consumoValue2 = {
variable: nomeVariavelConsumo2,
value: somaTotal2,
};
// Envia os valores calculados para as variáveis de consumo correspondentes ao mês atual
await device
.sendData(consumoValue1)
.then(() => context.log(`Somatório total da variável 'vazaopoco1' atribuído à '${nomeVariavelConsumo1}' para o dispositivo ${deviceToken}`))
.catch((error) => context.log(`Erro ao enviar dados para '${nomeVariavelConsumo1}' no dispositivo ${deviceToken}: ${error}`));
await device
.sendData(consumoValue2)
.then(() => context.log(`Somatório total da variável 'vazaopoco2' atribuído à '${nomeVariavelConsumo2}' para o dispositivo ${deviceToken}`))
.catch((error) => context.log(`Erro ao enviar dados para '${nomeVariavelConsumo2}' no dispositivo ${deviceToken}: ${error}`));
} catch (error) {
context.log(`Erro ao obter ou enviar dados para o dispositivo ${deviceToken}: ${error}`);
}
}
}
}
module.exports = new Analysis(myAnalysis);