Page 3 sur 4

Re: détecter les coupures de courant secteur

Publié : 15 mai 2016, 13:04
par guigui79
Bonjour.
je travail dans la domotique (mais pour les entreprises et avec des logiciels spécifiques CRESTRON http://www.crestron.com et EXTRON) donc j'aimerai bien faire mes scripts en lua.
Blocky est bien mais trop limité.
il suffit de connaitre le fonctionnement général, et après, on peut faire beaucoup de chose sympa.

j'ai réussi à faire ce que je voulais.
ça fonctionne, mais j'ai quand même deux questions.
- comment faire pour que le script se lance seulement si il y a un changement d'état sur les GPIO ?
car pour le moment, j'ai mis mon script en "device", et il démarre tout le temps.

- juste pour savoir même si ça ne sert a rien dans ce cas, pourquoi si je remplace les 2 if par
if (devicechanged['GPIO25'] == 'Closed' and uservariables['EDF_coupure_mail_ok'] == '0') then ...
et
if (devicechanged['GPIO25 EDF'] == 'Open' and uservariables['EDF_retablissement_mail_ok'] == '0') then ...
ça ne fonctionne plus. alors que mes variables ont bien la bonne valeur et que je n'ai pas d'erreur dans le log.

Code : Tout sélectionner

-- titre du fichier: script_device_coupure_EDF.lua
-- Ce script vérifie la présence du 3.3volt sur le GPIO25.
-- Un mail est envoyé une fois si la tension est coupé.
-- Un mail est envoyé une fois si la tension est rétabli.
 

commandArray = {}

print('Le Script EDF2 a démarré')

if (devicechanged['GPIO25 EDF'] == 'Closed' and uservariables['EDF_coupure_mail_ok'] == '0') then
   commandArray['SendEmail']='Coupure EDF maison#il y une coupure EDF à la maison#toto.guillaume@gmail.com'
   commandArray['Variable:EDF_coupure_mail_ok']='1'
   commandArray['Variable:EDF_retablissement_mail_ok']='0'
   print('Le mail coupure EDF a été envoyé ')
end

if (devicechanged['GPIO25 EDF'] == 'Open' and uservariables['EDF_retablissement_mail_ok'] == '0') then
   commandArray['SendEmail']='Rétablissement EDF maison #Le courant a été retabli à la maison#toto.guillaume@gmail.com'
   commandArray['Variable:EDF_coupure_mail_ok']='0'
   commandArray['Variable:EDF_retablissement_mail_ok']='1'
   print('Le mail rétablissement EDF a été envoyé ')
end

return commandArray[code]
[/code]

Merci par avance.

voici le script qui fonctionne :

Code : Tout sélectionner

-- titre du fichier: script_device_coupure_EDF.lua
-- Ce script vérifie la présence du 3.3volt sur le GPIO25.
-- Un mail est envoyé une fois si la tension est coupé.
-- Un mail est envoyé une fois si la tension est rétabli.
 
commandArray = {}
print('Le Script EDF a démarré')

if (devicechanged['GPIO25 EDF'] == 'Closed') then
   commandArray['SendEmail']='Coupure EDF maison#il y une coupure EDF à la maison#toto.guillaume@gmail.com'
   print('Le mail coupure EDF a été envoyé ')
end

if (devicechanged['GPIO25 EDF'] == 'Open') then
   commandArray['SendEmail']='Rétablissement EDF maison #Le courant a été retabli à la maison#toto.guillaume@gmail.com'
   print('Le mail rétablissement EDF a été envoyé ')
end

return commandArray

Re: détecter les coupures de courant secteur

Publié : 15 mai 2016, 13:31
par vil1driver
Salut,

un device change.. tous les scripts nommés script_device_... se lancent.
c'est pour cela que la première instruction en général est le fameux.. if devicechanged... pour vérifier quel device à justement changé..
ton print() étant placé avant ce teste, c'est normal de le lire sans arrêt.

Code : Tout sélectionner

'Le Script EDF2 a démarré '

Re: détecter les coupures de courant secteur

Publié : 15 mai 2016, 13:46
par guigui79
merci pour ta réponse.
je suis d'accord avec toi.
mais je pensais qu'il y avait une solution pour lancer ce script seulement si il y avait un changement sur n'importe quel GPIO.
pour éviter qu'il tourne tout le temps.

et pour la deuxieme question, une idée sur pourquoi cette commande ne fonctionne pas ? erreur de syntax je pense.
if (devicechanged['GPIO25 EDF'] == 'Closed' and uservariables['EDF_coupure_mail_ok'] == '0') then

Re: détecter les coupures de courant secteur

Publié : 15 mai 2016, 14:18
par vil1driver
peut-être

Code : Tout sélectionner

tonumber(uservariables['EDF_coupure_mail_ok']) == 0

Re: détecter les coupures de courant secteur

Publié : 15 mai 2016, 17:50
par guigui79
ça ne fonctionne pas.
mais c'est pas grave.
mon script fonctionne sans donc c'est bon.
Merci pour ton aide.

Re: détecter les coupures de courant secteur

Publié : 15 mai 2016, 18:19
par vil1driver
C'est qu'elle ne contient définitivement pas la valeur zero.

Re: Onduleur avec Shutdown en cas de détection de coupure de courant secteur

Publié : 06 oct. 2016, 17:39
par ftn
Perso j'utilise ça comme onduleur :
Platine d'extension Raspberry Pi® Joy-it RB-Strompi2

http://www.conrad.fr/ce/fr/product/1396 ... mpi2-1-pcs

C'est une carte fille à mettre directement sur le Raspberry.
Il suffit juste de rajouter un connecteur pour prise 9V et une prise 9V.
Le n° de broche du port GPIO doit être changer dans le soft.
Bonne utilisation.

Re: détecter les coupures de courant secteur

Publié : 16 déc. 2016, 20:48
par spiwit
Bonsoir,

Perso j'utilise un onduleur Eaton Protection Station 800 relié en USB au raspberry Pi qui gère la domotique (il est en plus alimenté par l'onduleur tout comme la box Internet et le routeur pour maintenir la connexion).
Avec un script maison je gère les alertes en cas de coupure / retour secteur et la remontée d'infos dans domoticz :

Image

Ça fonctionne bien :)

Re: détecter les coupures de courant secteur

Publié : 16 déc. 2016, 21:05
par Jeff
C'est à l'air bien sympa, on veut bien le script :)

Re: détecter les coupures de courant secteur

Publié : 16 déc. 2016, 21:48
par spiwit
Voici mon exemple avec un onduleur Eaton Protection Station 800 (sinon ce sera probablement a adapter). C'est pas super propre :mrgreen: mais fonctionnel depuis près d'un an sur mon installation.

Donc l'onduleur est relié en USB au RPi, il est géré par nut
Il faut donc veiller a avoir un onduleur compatible nut et installer et paramétrer le logiciel.

J'utilise la directive suivante dans /etc/nut/upsmon.conf afin de lancer ce script dès qu'un événement onduleur est détecte (coupure, retour secteur, probleme batterie, perte de communication ...)

NOTIFYCMD /etc/nut/nut-notify.sh

Voici ce script :

Code : Tout sélectionner

#!/bin/sh

DATE=`date +%Y-%m-%d_%Hh%Mm%Ss`

if [ $@ = "onbatt" ]
then
OBJET="Défaut Secteur"
SMS="Défaut%20secteur"
MSG="L'onduleur a detecte une coupure de courant a $DATE"
fi
if [ $@ = "online" ]
then
OBJET="Retour Secteur"
SMS="Retour%20secteur"
MSG="L'onduleur a detecte le retour du courant a $DATE"
fi
if [ $@ = "lowbatt" ]
then
OBJET="Batterie faible"
MSG="L'onduleur a detecte que le niveau de batterie etait faible"
fi
if [ $@ = "arret" ]
then
OBJET="Arret force"
MSG="L'onduleur a declanche un arret force a $DATE"
fi
if [ $@ = "commok" ]
then
OBJET="Retour communication onduleur"
MSG="L'onduleur est a nouveau operationnel"
fi
if [ $@ = "commbad" ]
then
OBJET="communication onduleur perdue"
MSG="L'onduleur ne repond plus :( (commbad) depuis $DATE"
fi
if [ $@ = "shutdown" ]
then
OBJET="Arret systeme"
MSG="L'onduleur a declacnhe un arret du systeme"
fi
if [ $@ = "replbatt" ]
then
OBJET="Defaut batterie"
MSG="L'onduleur a detecte que la batterie etait a remplacer"
fi
if [ $@ = "nocomm" ]
then
OBJET="Default de communication"
MSG="L'onduleur ne repond plus :( (nocomm) depuis $DATE"
fi
if [ $@ = "noparent" ]
then
OBJET="noparent"
MSG="noparent"
fi


# Pour Domoticz

ONDUL_ETAT=`upsc eaton800 2>&1 | grep -v '^Init SSL' | grep 'ups.status:' | awk '{print $2}'`
if [ $ONDUL_ETAT = "OL" ]; then
col=1
elif [ $ONDUL_ETAT = "OBe" ]; then
col=2
elif [ $ONDUL_ETAT = "OBa" ]; then
col=3
elif [ $ONDUL_ETAT = "OB" ]; then
col=4
fi

if [ $ONDUL_ETAT = "OL" ]; then
text="Présent"
elif [ $ONDUL_ETAT = "OB" ]; then
text="Absent"
fi

# Envoi des alertes mail

echo "$MSG" | mail -s "[Domotique] Alerte $OBJET" -r domotique@domaine.fr user@domaine.fr
echo $DATE
echo $DATE - $@ >> /etc/nut/nut-alertes.log

# Envoi des alertes SMS

wget --no-check-certificate -O- 'https://smsapi.free-mobile.fr/sendmsg?user=XXXXXXXX&pass=XXXXXXXXXXXXXX&msg=[Domotique]%20'$DATE'%20Alerte%20Onduleur%20!%20'$SMS'' >> /dev/null
wget --no-check-certificate -O- 'https://smsapi.free-mobile.fr/sendmsg?user=XXXXXXXX&pass=XXXXXXXXXXXXXX&msg=[Domotique]%20'$DATE'%20Alerte%20Onduleur%20!%20'$SMS'' >> /dev/null

# Remonté d'info à Domoticz

curl "http://192.168.6.1:8080/json.htm?type=command&param=udevice&idx=95&nvalue=$col&svalue=$text"


Ensuite j'ai un autre script pour domoticz qui est lancé toutes les deux minutes par cron afin de remonter l'état de la batterie et de la tension de sortie.

Code : Tout sélectionner

#!/bin/sh
ONDUL_BATT_CHARGE=`upsc eaton800 2>&1 | grep -v '^Init SSL' | grep 'battery.charge:' | awk '{print $NF}'`
ONDUL_OUT_VOLT=`upsc eaton800 2>&1 | grep -v '^Init SSL' | grep 'output.voltage:' | awk '{print $NF}'`
ONDUL_ETAT=`upsc eaton800 2>&1 | grep -v '^Init SSL' | grep 'ups.status:' | awk '{print $2}'`
ONDUL_RT=`upsc eaton800 2>&1 | grep -v '^Init SSL' | grep 'battery.runtime:' | awk '{print $NF}'`

# Remonté à Domoticz 

curl "http://192.168.6.1:8080/json.htm?type=command&param=udevice&idx=34&nvalue=0&svalue=$ONDUL_BATT_CHARGE" > /dev/null 2>&1
curl "http://192.168.6.1:8080/json.htm?type=command&param=udevice&idx=36&nvalue=0&svalue=$ONDUL_OUT_VOLT" > /dev/null 2>&1
curl "http://192.168.6.1:8080/json.htm?type=command&param=udevice&idx=43&nvalue=0&svalue=$ONDUL_RT" > /dev/null 2>&1

Si vous avez des question n'hésitez pas ! :)