const { Analysis, Device, Resources, Services, Account, Utils } = require("@tago-io/sdk");
async function notificacoes(context) {
//AQUI VOCE TERÁ QUE COLOCAR A KEY E O VALUE QUE VOCE IRÁ DEFINIR DENTRO DO SEU DISPOSITIVO NO CAMPO TAGS, LEMBRANDO QUE TODOS ELES TEM QUE TER O MESMO VALOR E CHAVE.
const filter = {
tags: [
{
key: "DLGG", // key definida no dispositivo
value: "sensor", // valor da key
},
],
};
//AQUI FILTRAREMOS O NOME O ID DOS DISPOSITIVOS ENCONTRADOS COM A MESMA TAG
const dispositivos = await Resources.devices.list({
page: 1,
fields: ["name","id"],
filter,
amount: 100,
});
const env_vars = Utils.envToJson(context.environment);
const account = new Account({ token: env_vars.account_token });
//AQUI É ONDE SERÁ PEGO O DEVICE_TOKEN PARA TER ACESSO AS VARIAVEIS (NÃO PRECISA MEXER EM NADA)
for (const my_id of dispositivos) {
const my_token = await Utils.getTokenByName(account, my_id.id).catch(console.error);
const device = await new Device({token: my_token});
const my_email = {
variable: "email",
query: "last_item",
} //localizando o email
const my_telefone = {
variable: "telefone",
query: "last_item",
} //localizando o telefone
const alertas = {
variable: ["alarme_pluviometro","alarme_hidrometro","alarme_nivel_maximo","alarme_nivel_minimo"],
query: "last_item"
} // variaveis dos alertas definidos na analise de alertas
const dados = {
variable: ["int0","int1","i1"],
query: "last_item",
} //int0: pluviometro, int1: hidrometro, i1: sensor de nível
//coleta dos dados para análise de envio de notificação e sms
const device_email = await device.getData(my_email).catch(console.error);
const device_telefone = await device.getData(my_telefone).catch(console.error);
const device_alertas = await device.getData(alertas).catch(console.error);
const device_dados = await device.getData(dados).catch(console.error);
// Instance the SMS and Email service usando the analysis token from the context.
const email_service = new Services({ token: device });
const sms_service = new Services({ token: device });
// COMPARAÇÃO DO PLUVIOMETRO ------------ SE OS DADOS QUE ESTÃO CHEGANDO FOR MAIOR QUE O QUE ESTÁ DEFINIDO NOS ALARMES, SERÁ ENVIADO O EMAIL
if (device_dados[0].value > device_alertas[0].value) {
await email_service.email.send({
to: device_email[0].value,
subject: `ALERTA MÁXIMO PLUVIÔMETRO COM VALOR DE: ${device_dados[0].value}`,
message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MAXIMO DO PLUVIOMETRO ACIMA DE ${device_alertas[0].value} m³ em ${device_dados[0].time}`,
}).then(console.log(`email ALERTA PLUVIOMETRO enviado para o dispositivo: ${JSON.stringify(device)} no email: ${device_email[0].value}`)).catch(console.log);
} else {
console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[0]}`);
}
// COMPARAÇÃO HIDROMETRO
if (device_dados[1].value > device_alertas[1].value) {
await email_service.email.send({
to: device_email[0].value,
subject: `ALERTA MÁXIMO HIDRÔMETRO COM VALOR DE: ${device_dados[1].value} m³`,
message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MAXIMO DO PLUVIOMETRO ACIMA DE ${device_alertas[1].value} mm em ${device_dados[1].time}`,
}).then(console.log(`email ALERTA HIDROMETRO enviado para o dispositivo: ${JSON.stringify(device)} no email: ${device_email[0].value}`)).catch(console.log);
} else {
console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[1]}`);
}
// COMPARAÇÃO NIVEL MÁXIMO
if (device_dados[2].value > device_alertas[2].value) {
await email_service.email.send({
to: device_email[0].value,
subject: `ALERTA MÁXIMO SENSOR DE NÍVEL COM VALOR DE: ${device_dados[2].value} MCA`,
message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MAXIMO DO SENSOR DE NÍVEL ACIMA DE ${device_alertas[2].value} MCA em ${device_dados[2].time}`,
}).then(console.log(`email ALERTA NIVEL MAXIMO enviado para o dispositivo: ${JSON.stringify(device)} no email: ${device_email[0].value}`)).catch(console.log);
} else {
console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[2]}`);
}
context.log(device_dados[2].value);
// COMPARAÇÃO NIVEL MINIMO
if (device_dados[2].value < device_alertas[3].value) {
await email_service.email.send({
to: device_email[0].value,
subject: `ALERTA MÍNIMO SENSOR DE NÍVEL COM VALOR DE: ${device_dados[2].value} MCA`,
message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MÍNIMO DO SENSOR DE NÍVEL ABAIXO DE ${device_alertas[3].value} MCA em ${device_dados[2].time}`,
}).then(console.log(`email ALERTA NIVEL MINIMO enviado para o dispositivo: ${JSON.stringify(device)} no email: ${device_email[0].value}`)).catch(console.log);
} else {
console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[2]}`);
}
/************************ ENVIO SMS ***************************/
if (device_dados[2].value < device_alertas[3].value) {
await sms_service.sms.send({
to: device_telefone[0].value,
message: `Você está recebendo a notificação do dispositivo: ${device}. ALERTA MÍNIMO DO SENSOR DE NÍVEL ABAIXO DE ${device_alertas[3].value} MCA em ${device_dados[2].time}`,
}).then(console.log(`sms ALERTA NIVEL MINIMO enviado para o dispositivo: ${JSON.stringify(device)} no telefone: ${device_telefone[0].value}`)).catch(console.log);
} else {
console.log(`SEM ALERTAS PARA ENVIAR DE ${dados.variable[2]}`);
}
}
}
module.exports = new Analysis(notificacoes);
[2024-03-06 14:11:46] Analysis finished.
[2024-03-06 14:11:46] Duration: 2s Billed Duration: 2s.
[2024-03-06 14:11:46] SEM ALERTAS PARA ENVIAR DE int0 SEM ALERTAS PARA ENVIAR DE int1
[2024-03-06 14:11:46] sms ALERTA NIVEL MINIMO enviado para o dispositivo: {"params":{"token":"c2*****************************"}} no telefone: +553************
[2024-03-06 14:11:46] email ALERTA NIVEL MINIMO enviado para o dispositivo: {"params":{"token":"c2**********************"}} no email: s********@fractum.com.br [2024-03-06 14:11:46] SEM ALERTAS PARA ENVIAR DE i1 -3.75
[2024-03-06 14:11:45] 0 SEM ALERTAS PARA ENVIAR DE i1 SEM ALERTAS PARA ENVIAR DE i1
[2024-03-06 14:11:45] SEM ALERTAS PARA ENVIAR DE i1
[2024-03-06 14:11:45] email ALERTA HIDROMETRO enviado para o dispositivo: {"params":{"token":"9b******************"}} no email: f********@gmail.com [2024-03-06 14:11:45] SEM ALERTAS PARA ENVIAR DE int0
[2024-03-06 14:11:45] > TagoIO-SDK: No region or env defined, using fallback as usa-1.
[2024-03-06 14:11:44] Starting Analysis...