94 lines
3.0 KiB
JavaScript
94 lines
3.0 KiB
JavaScript
import Mailjet from 'node-mailjet'
|
|
|
|
const monitoringUrl = "https://monitoringapi.solaredge.com/site/2516130/overview?api_key=GVF1BZAAM74IRDZ2WRWT32A5V0CY9G4Z&format=json"
|
|
|
|
async function getData() {
|
|
const response = await fetch(monitoringUrl);
|
|
|
|
return response.json();
|
|
}
|
|
|
|
async function getCurrentPower(data) {
|
|
return data.overview.currentPower.power
|
|
}
|
|
|
|
async function getLastUpdateTime(data) {
|
|
return data.overview.lastUpdateTime
|
|
}
|
|
|
|
async function sendAlert(msg) {
|
|
console.log("sendAlert start")
|
|
|
|
const mailjet = Mailjet.apiConnect(
|
|
process.env.MJ_APIKEY_PUBLIC,
|
|
process.env.MJ_APIKEY_PRIVATE,
|
|
);
|
|
|
|
const request = mailjet
|
|
.post('send', { version: 'v3.1' })
|
|
.request({
|
|
Messages: [
|
|
{
|
|
From: {
|
|
Email: "admin@lestoitsduval.fr",
|
|
Name: "Les Toits du Val - Salle Greyzollon Duluth"
|
|
},
|
|
To: [
|
|
{
|
|
Email: "alert@lestoitsduval.fr",
|
|
Name: "Équipe pour les alertes"
|
|
}
|
|
],
|
|
Subject: "😱 Alerte sur la production",
|
|
TextPart: msg,
|
|
}
|
|
]
|
|
})
|
|
|
|
request
|
|
.then((result) => {
|
|
console.log("result")
|
|
console.log(result.body)
|
|
})
|
|
.catch((err) => {
|
|
console.log("err")
|
|
console.log(err)
|
|
})
|
|
console.log("sendAlert end")
|
|
return
|
|
}
|
|
|
|
function formatTime(seconds) {
|
|
if (seconds < 60) {
|
|
return `${seconds} seconde${seconds > 1 ? 's' : ''}`;
|
|
} else if (seconds < 3600) {
|
|
const minutes = Math.floor(seconds / 60);
|
|
const remainingSeconds = seconds % 60;
|
|
return remainingSeconds === 0
|
|
? `environ ${minutes} minute${minutes > 1 ? 's' : ''}`
|
|
: `${minutes} minute${minutes > 1 ? 's' : ''} et ${remainingSeconds} seconde${remainingSeconds > 1 ? 's' : ''}`;
|
|
} else {
|
|
const hours = Math.floor(seconds / 3600);
|
|
const remainingMinutes = Math.floor((seconds % 3600) / 60);
|
|
return remainingMinutes === 0
|
|
? `environ ${hours} heure${hours > 1 ? 's' : ''}`
|
|
: `environ ${hours} heure${hours > 1 ? 's' : ''} et ${remainingMinutes} minute${remainingMinutes > 1 ? 's' : ''}`;
|
|
}
|
|
}
|
|
|
|
const data = await getData();
|
|
const now = new Date();
|
|
const currentPower = await getCurrentPower(data);
|
|
const lastUpdateTime = await getLastUpdateTime(data);
|
|
console.log(`[${lastUpdateTime}] La salle Greyzollon Duluth produissait ${currentPower} watt${currentPower>0?'s':''} !`)
|
|
const secondDifference = Math.ceil(Math.abs(now.getTime() - new Date(lastUpdateTime).getTime()) / 1000);
|
|
const formatedDifference = formatTime(secondDifference)
|
|
|
|
if (secondDifference > (6 * 60)) {
|
|
const msg = `❌ L'installation n'a pas répondu depuis '${lastUpdateTime}' ça fait ${formatedDifference} (${secondDifference}) !`
|
|
console.log(msg);
|
|
await sendAlert(msg);
|
|
} else {
|
|
console.log(`✅ L'installation répond correctement dernière mise à jour il y a ${formatedDifference} (${secondDifference}).`);
|
|
}
|