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
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/triggerCa 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... !