Page 1 sur 1

[Bash] Notification mail et SMS pour Eco compteur Legrand

Publié : 25 avr. 2021, 15:12
par Lavabre
Bonjour,
Une petite suggestion pour un Raspberry Pi avec un EcoCompteur...

Objectif: être avisé par mail et SMS (pour les clients Free) d'une consommation d'eau anormale sur une journée.
Deux seuils sont fixés. Le premier correspond à une conso inhabituelle et le second à une conso anormale.
Le bash est à mettre dans la crontab du RPi (par exemple tous les matins à 08H00).
Si tout est "normal" un mail est envoyé avec le résumé des mesures de la journée avec en pièce jointe les deux fichiers CSV de conso horaire et journalière.
Si on est entre une conso d'eau inhabituelle et anormale, idem ci-dessus avec un message d'information dans l'objet
Si on est au dessus de la conso anormale, idem ci-dessus avec un message d'alerte dans l'objet

Bon le code n'est pas de "première qualité", mais ça fonctionne parfaitement !
Tous les matins à 08H00 vous serez informé par mail de la télémétrie de la veille et si une valeur d'eau est anormalement élevée, cela vous sera signalé par mail en plus par SMS !

Code : Tout sélectionner

#!/bin/bash
# Récupère les données en FTP via WGET sur l'EcoCompteur et les met dans /home/pi/Desktop
# les renomme et et les envoie par mail messagerie Mutt
# Après expédition suppression des fichiers CSV
#
# Pour créer le bash : chmod +x EcoCompteur.sh
# Pour automatiser via CRON : sudo crontab -e
# Pour exécutions tous les jours à 08H03, rajouter : 5 8 * * * bash /home/pi/Desktop/EcoCompteur.sh

# Active le clignotement de la LED ACT
echo heartbeat| sudo tee /sys/class/leds/led0/trigger

Vol_Verif=300
Vol_Alerte=400


cd /home/pi/Desktop
wget --user=admin --password='password' --no-passive-ftp ftp://IP_ECOCOMPTEUR_EN_LOCAL/APPLI/LOG1.CSV
wget --user=admin --password='password' --no-passive-ftp ftp://IP_ECOCOMPTEUR_EN_LOCAL/APPLI/LOG2.*

sudo cat /home/pi/Desktop/LOG2.OLD /home/pi/Desktop/LOG2.CSV >> /home/pi/Desktop/LOG3.CSV

sudo cat /home/pi/Desktop/Historique\ par\ heures.csv /home/pi/Desktop/LOG3.CSV > /home/pi/Desktop/LOGPROV.CSV && awk '!x[$0]++' /home/pi/Desktop/LOGPROV.CSV > /home/pi/Desktop/Historique\ par\ heures.csv
sudo cat /home/pi/Desktop/Historique\ par\ jours.csv /home/pi/Desktop/LOG1.CSV > /home/pi/Desktop/LOGPROV.CSV && awk '!x[$0]++' /home/pi/Desktop/LOGPROV.CSV > /home/pi/Desktop/Historique\ par\ jours.csv

sudo mv /home/pi/Desktop/LOG1.CSV /home/pi/Desktop/EcoCompteur\ jours.CSV
sudo mv /home/pi/Desktop/LOG3.CSV /home/pi/Desktop/EcoCompteur\ heures.CSV


# Ne conserver que les deux dernières lignes du fichier EcoCompteur\ jours.CSV
sudo tail -n 2 EcoCompteur\ jours.CSV >> EcoWater.CSV

# Récupérer les deux dernières valeurs horaires de la cellule 18 dans H2 et H1
for enreg in `cat /home/pi/Desktop/EcoWater.CSV`
do
     LINKY2=`echo $enreg | awk -F";" '{ print $6 }'`
     PAC2=`echo $enreg | awk -F";" '{ print $8 }'`
     RESIST2=`echo $enreg | awk -F";" '{ print $10 }'`
     CHEAU2=`echo $enreg | awk -F";" '{ print $12 }'`
     CPRI2=`echo $enreg | awk -F";" '{ print $14 }'`
     EPRI2=`echo $enreg | awk -F";" '{ print $16 }'`
     EAU2=`echo $enreg | awk -F";" '{ print $18 }'`
     sed -i".bak" '$d' /home/pi/Desktop/EcoWater.CSV
done

for enreg in `cat /home/pi/Desktop/EcoWater.CSV.bak`
do
     LINKY1=`echo $enreg | awk -F";" '{ print $6 }'`
     PAC1=`echo $enreg | awk -F";" '{ print $8 }'`
     RESIST1=`echo $enreg | awk -F";" '{ print $10 }'`
     CHEAU1=`echo $enreg | awk -F";" '{ print $12 }'`
     CPRI1=`echo $enreg | awk -F";" '{ print $14 }'`
     EPRI1=`echo $enreg | awk -F";" '{ print $16 }'`
     EAU1=`echo $enreg | awk -F";" '{ print $18 }'`
done

# Calcul du volume eau sur la dernière journée
LINKY=$(echo "($LINKY2-$LINKY1)" |bc )
PAC=$(echo "($PAC2-$PAC1)" |bc )
RESIST=$(echo "($RESIST2-$RESIST1)" |bc )
TCHAUFF=$(echo "($PAC+$RESIST)" |bc )
CHEAU=$(echo "($CHEAU2-$CHEAU1)" |bc )
CPRI=$(echo "($CPRI2-$CPRI1)" |bc )
EPRI=$(echo "($EPRI2-$EPRI1)" |bc )
EAU=$(echo "($EAU2-$EAU1)*1000" |bc )
EAU=${EAU%.*}

# Récupération de la température du RPi
TEMPRPI=$(cat /sys/class/thermal/thermal_zone0/temp)
TEMPRPI=$(($TEMPRPI/1000))
TEMPRPI=${TEMPRPI%.*}


echo "Bonjour, consommations de la journée du $(date --date='1 days ago' +%d-%b-%Y) :\n\nEau froide  : $EAU litres\nTotal Linky : $LINKY kWh\nTempér. RPi : $TEMPRPI°C\n\nDétail :\nPompe à chaleur : $PAC kWh\nRésitance P.A.C.: $RESIST kWh\nTOTAL Chauffage : $TCHAUFF kWh\n\nChauffe-eau : $CHEAU kWh\n\nCuisine et prises 1 : $CPRI kWh\nEclairage - prises 2: $EPRI kWh" > /home/pi/Desktop/message.txt

# Si le volume d eau mesuré en 1 journée est >= au volume fixé nécessitant une vérification (mais < au volume d alerte)
if [ $EAU -ge $Vol_Verif ] && [ $EAU -lt $Vol_Alerte ]
then
  # Expédition de l'avis par mail
  message="Pour information: Consommation d'eau inhabituelle ($EAU litres) pour la journée du $(date --date='1 days ago' +%d-%b-%Y)"
  messSMS=$(echo $message | sed s/' '/'%20'/g)
  mutt -s "$message"   -- adresse.mail1@gmail.com adresse.mail2@gmail.com -a /home/pi/Desktop/EcoCompteur\ heures.CSV -a /home/pi/Desktop/EcoCompteur\ jours.CSV < /home/pi/Desktop/message.txt
  # Expédition de l'avis par SMS
  login='MON_LOGIN'
  key='MON_MOT_DE_PASSE'
  curl "https://smsapi.free-mobile.fr/sendmsg?user="$login"&pass="$key"&msg="$messSMS""

# Si le volume d eau mesuré en 1 heure est >= au volume fixé d alerte
elif [ $EAU -ge $Vol_Alerte ]
then
  message="ATTENTION: Consommation d'eau ANORMALEMENT ELEVEE ($EAU litres) pour la journée du $(date --date='1 days ago' +%d-%b-%Y)"
  messSMS=$(echo $message | sed s/' '/'%20'/g)
  # Expédition de l'avis par mail
  mutt -s "$message"  -- adresse.mail1@gmail.com adresse.mail2@gmail.com -a /home/pi/Desktop/EcoCompteur\ heures.CSV -a /home/pi/Desktop/EcoCompteur\ jours.CSV  < /home/pi/Desktop/message.txt
  # Expédition de l'avis par SMS
  login='MON_LOGIN'
  key='MON_MOT_DE_PASSE'
  curl "https://smsapi.free-mobile.fr/sendmsg?user="$login"&pass="$key"&msg="$messSMS""

# Sinon envoie du résumé normalement
else
  message="Bonjour, télémétrie des Aumières pour la journée du $(date --date='1 days ago' +%d-%b-%Y)"
  # Expédition de l'avis par mail
  mutt -s "$message"  adresse.mail1@gmail.com -a /home/pi/Desktop/EcoCompteur\ heures.CSV -a /home/pi/Desktop/EcoCompteur\ jours.CSV  < /home/pi/Desktop/message.txt
fi



#mutt -s "Bonjour, télémétrie des Aumières du $(date)" adresse.mail1@gmail.com -a /home/pi/Desktop/EcoCompteur\ heures.CSV -a /home/pi/Desktop/EcoCompteur\ jours.CSV <.

# Effacement de tous les fichiers créés sur le bureau
sudo rm /home/pi/Desktop/*.OLD
sudo rm /home/pi/Desktop/*.CSV
sudo rm /home/pi/Desktop/*.bak
sudo rm /home/pi/Desktop/*.txt

# Desactive le clignotement de la LED ACT et la place en mode Panic (clignotement en cas de Kernel Panic)
echo panic| sudo tee /sys/class/leds/led0/trigger
Autre idée dans le même genre, être avisé dans l'heure d'une consommation d'eau anormale.
Comme précédemment, deux seuils d'alerte sont définis.
L'exécution de la crontab est à régler toutes les heures à XXH03 (lEcoCompteur enregistre ses fichiers toutes les heures à XXh02)
S'il y a une consommation supérieure aux seuils fixés, un mail et un SMS vous en averti immédiatement en indiquant en outre le volume d'eau mesuré sur l'heure passée.
Si vous avez par exemple une chasse d'eau qui se bloque, ça ne devrait plus couler qu'une heure...

Code : Tout sélectionner

#!/bin/bash
# Récupère les données en FTP via WGET sur l'EcoCompteur et les met dans /home/pi/Desktop
# Calcule la conso de l eau sur la dernière heure
# Envoie un mail par la messagerie Mutt + SMS en cas de dépassement inhabituel ou anormal (suivant la conso mesurée)
# Après expédition suppression des fichiers CSV OLD ET BAK générés sur le bureau
#
# Pour créer le bash : chmod +x EcoCompteur.sh
# Pour automatiser via CRON : sudo crontab -e
# Pour exécutions chaque heure à XXH03, rajouter : 3 * * * * bash /home/pi/Desktop/VerifConso.sh

# Active le clignotement de la LED ACT
echo heartbeat| sudo tee /sys/class/leds/led0/trigger

Vol_Verif=100
Vol_Alerte=150

cd /home/pi/Desktop
wget --user=admin --password='password' --no-passive-ftp ftp://192.168.0.8/APPLI/LOG1.CSV
wget --user=admin --password='password' --no-passive-ftp ftp://192.168.0.8/APPLI/LOG2.*

sudo cat /home/pi/Desktop/LOG2.OLD /home/pi/Desktop/LOG2.CSV >> /home/pi/Desktop/LOG3.CSV

sudo cat /home/pi/Desktop/Historique\ par\ heures.csv /home/pi/Desktop/LOG3.CSV > /home/pi/Desktop/LOGPROV.CSV && awk '!x[$0]++' /home/pi/Desktop/LOGPROV.CSV > /h$
sudo cat /home/pi/Desktop/Historique\ par\ jours.csv /home/pi/Desktop/LOG1.CSV > /home/pi/Desktop/LOGPROV.CSV && awk '!x[$0]++' /home/pi/Desktop/LOGPROV.CSV > /ho$

sudo mv /home/pi/Desktop/LOG1.CSV /home/pi/Desktop/EcoCompteur\ jours.CSV
sudo mv /home/pi/Desktop/LOG3.CSV /home/pi/Desktop/EcoCompteur\ heures.CSV

# Ne conserver que les deux dernières lignes du fichier EcoCompteur\ heures.CSV
sudo tail -n 2 EcoCompteur\ heures.CSV >> EcoWater.CSV

# Récupérer les deux dernières valeurs horaires de la cellule 18 dans H2 et H1
for enreg in `cat /home/pi/Desktop/EcoWater.CSV`
do
     H2=`echo $enreg | awk -F";" '{ print $18 }'`
     sed -i".bak" '$d' /home/pi/Desktop/EcoWater.CSV
done

for enreg in `cat /home/pi/Desktop/EcoWater.CSV.bak`
do
     H1=`echo $enreg | awk -F";" '{ print $18 }'`
done

# Calcul du volume eau sur la dernière heure
volume=$(echo "($H2-$H1)*1000" |bc )
volume=${volume%.*}

# Effaccement de tous les fichiers créés sur le bureau
sudo rm /home/pi/Desktop/*.OLD
sudo rm /home/pi/Desktop/*.CSV
sudo rm /home/pi/Desktop/*.bak

# Si le volume d'eau mesuré en 1 heure est >= au volume fixé nécessitant une vérification (mais < au volume d alerte)
if [ $volume -ge $Vol_Verif ] && [ $volume -lt $Vol_Alerte ]
then
  # Expédition de l'avis par mail
  message="Consommation d'eau élevée ($volume litres/H) constatée à $(date +%H)H00 le $(date +%d-%b-%Y)"
  messSMS=$(echo $message | sed s/' '/'%20'/g)
  mutt -s "$message"  -- adresse.mail1@gmail.com adresse.mail2@gmail.com <.
  # Expédition de l'avis par SMS
  login='MON_LOGIN'
  key='MA_KEY'
  curl "https://smsapi.free-mobile.fr/sendmsg?user="$login"&pass="$key"&msg="$messSMS""

# Si le volume d'eau mesuré en 1 heure est >= au volume fixé d alerte
elif [ $volume -ge $Vol_Alerte ]
then
  message="Consommation d'eau ANORMALE ($volume litres/H !!!) constatée à $(date +%H)H00 le $(date +%d-%b-%Y)"
  messSMS=$(echo $message | sed s/' '/'%20'/g)
  # Expédition de l'avis par mail
  mutt -s "$message"  -- adresse.mail1@gmail.com adresse.mail2@gmail.com <.
  # Expédition de l'avis par SMS
  login='MON_LOGIN'
  key='MA_KEY'
  curl "https://smsapi.free-mobile.fr/sendmsg?user="$login"&pass="$key"&msg="$messSMS""
fi

# Desactive le clignotement de la LED ACT et la place en mode Panic (clignotement en cas de Kernel Panic)
echo panic| sudo tee /sys/class/leds/led0/trigger
Voila c'était une suggestion pour une surveillance à moindre coût (€10 un Rpi Zero et moins de 1Watt de conso électrique) ! ;-)
Ca marche très bien et est très efficace.
Quant au code, il est sûrement possible de faire beaucoup mieux mais mes connaissances sont limitées... ! ;-))

Re: Notification mail et SMS pour Eco compteur Legrand

Publié : 25 avr. 2021, 15:42
par Keros
Merci Lavabre pour le partage.

Je viens de déplacer ton message dans un nouveau sujet dans la section Tutos. Lien vers le sujet initial sur l'éco compteur Legrand.