Page 1 sur 2
Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 16 déc. 2015, 06:57
par ziaziung
Bonjour à toutes et à tous. J'ai un souci : il m'arrive parfois de «perdre» des capteurs ( des contacts, des détecteurs de mouvements, des sondes de température) pour diverses raisons ( piles HS, protocole plus reconnu....).
Je voudrai donc créer des alertes qui me préviennentlors ce que tel ou tel n'a pas envoyé d'information depuis plus de 4 h, par exemple.
Pouvez vous mettez à réaliser cela ?
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 16 déc. 2015, 07:55
par vil1driver
Salut,
Si c'est un périphérique qui envoie des infos régulièrement il suffit via un script lua de regarder depuis combien de temps on a pas reçu de valeur.
Et d'envoyer une notification si ça dépasse une certaine durée.
Tu peux t'inspirer du script_time_demo.lua du dossier lua
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 16 déc. 2015, 11:47
par jackslayter
j'ai ça :
d'abords créer une uservariable de type chaine
ensuite dans cette variable entrer (dans mon ex) les IDX des 3 sondes à vérifier et à la fin ajouter 0
créer un script bash
Code : Tout sélectionner
#/bin/sh
ido=$(curl "http://MONIP:MONPORT/json.htm?type=command¶m=getuservariable&idx=IDXDELAVARIABLE" | sed -e 's/[{},:]/''/g' | sed -e 's/"/''/g' )
id=$(echo $ido | sed -e 's/Value /\n/g' | sed -e 's/ idx/\n/g' | sed -e '1d' | sed -e '2d')
idsonde1=`echo $id | awk '{print $1}'`
idsonde2=`echo $id | awk '{print $2}'`
idsonde3=`echo $id | awk '{print $3}'`
exe=`echo $id | awk '{print $4}'`
prob=$(echo '1')
if [ $exe = 0 ] ; then
sonde1=$(curl "http://MONIP:MONPORT/json.htm?type=devices&rid="$idsonde1"" | sed -e 's/[{}]/''/g' | grep '"HaveTimeout" :' | sed 's/:/ /1' | sed 's/,/ /1' | awk -F" " '{ print $2 }')
sonde2=$(curl "http://MONIP:MONPORT/json.htm?type=devices&rid="$idsonde2"" | sed -e 's/[{}]/''/g' | grep '"HaveTimeout" :' | sed 's/:/ /1' | sed 's/,/ /1' | awk -F" " '{ print $2 }')
sonde3=$(curl "http://MONIP:MONPORT/json.htm?type=devices&rid="$idsonde3"" | sed -e 's/[{}]/''/g' | grep '"HaveTimeout" :' | sed 's/:/ /1' | sed 's/,/ /1' | awk -F" " '{ print $2 }')
if [ $sonde1= "true" ] ; then
echo "subject: probleme sonde" > /var/tmp/mail.txt
echo >> /var/tmp/mail.txt
curl --url "smtps://smtp.gmail.com :465" --ssl-reqd --mail-from "xxxxx1" --mail-rcpt "xxxxx" --upload-file /var/tmp/mail.txt --user "xxxxx1:motdepasse"
curl "http://192.168.10.28:8082/json.htm?type=command¶m=updateuservariable&idx=IDXDELAVARIABLE&vname=NOMDELAVARIABLE&vtype=2&vvalue="$idsonde1"%20"$idsonde2"%20"$idsonde3"%20"$prob""
elif [ $sonde2= "true" ] ; then
echo "subject: probleme sonde" > /var/tmp/mail.txt
echo >> /var/tmp/mail.txt
curl --url "smtps://smtp.gmail.com :465" --ssl-reqd --mail-from "xxxxx1" --mail-rcpt "xxxxx" --upload-file /var/tmp/mail.txt --user "xxxxx1:motdepasse"
curl "http://192.168.10.28:8082/json.htm?type=command¶m=updateuservariable&idx=IDXDELAVARIABLE&vname=NOMDELAVARIABLE&vtype=2&vvalue="$idsonde1"%20"$idsonde2"%20"$idsonde3"%20"$prob""
elif [ $sonde3= "true" ] ; then
echo "subject: probleme sonde" > /var/tmp/mail.txt
echo >> /var/tmp/mail.txt
curl --url "smtps://smtp.gmail.com :465" --ssl-reqd --mail-from "xxxxx1" --mail-rcpt "xxxxx" --upload-file /var/tmp/mail.txt --user "xxxxx1:motdepasse"
curl "http://192.168.10.28:8082/json.htm?type=command¶m=updateuservariable&idx=IDXDELAVARIABLE&vname=NOMDELAVARIABLE&vtype=2&vvalue="$idsonde1"%20"$idsonde2"%20"$idsonde3"%20"$prob""
fi
fi
si une sonde ne réponds pas un email est envoyé et la variable passe à 1 au lieu de 0 pour éviter de spammer, une fois le problème résolu repasser à 0
exécuter le script dans crontab
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 16 déc. 2015, 21:48
par ganq
Bonjour j'ai crée un dummy Relevé Temp et je teste régulièrement tous les capteurs qui commencent par "Temp "grace à un script time. Si les valeurs sont plus vieille qu'une heure, le dummy se met à ON, un mail est envoyé et une notification NMA. Tant que le dummy n'est pas remis à 0, les alertes sont désactivées.
Code : Tout sélectionner
-- Guillaume Anquetil - 20/06/2015
-- ce script vérifie les données des capteurs de température (qui commence par 'Temp ')et envoie mail et nma si le capteur n'est pas actualisé
-- Si un capteur ne fonctionne plus, on peut changer son nom pour éviter un mail toutes les heures
commandArray = {}
-- récupération de l'heure actuelle
heure_actuelle=os.time()
-- si debog différent de 0 ajoute des log et met un écart plus faible
debog=0
if (debog~=0) then
delai=100
print(otherdevices['Relevé Temp']
else
delai=3600
end
alerte=0
for i, v in pairs(otherdevices) do
if (i:sub(1,5)=='Temp ') then
if (debog~=0) then print (i,v) end
i2 = tostring(i)
s = otherdevices_lastupdate[i2]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
if (debog~=0) then print (t2) end
if (debog~=0) then print (heure_actuelle-t2) end
if (heure_actuelle-t2 > delai) and (otherdevices['Relevé Temp']=='Off')then
if (debog~=0) then print('alerte') end
--envoyer notification nma
cmd = ' /home/pi/domoticz/scripts/nma.sh Domoticz_'..i..'_erreur capteur température 0'
os.execute(cmd)
--envoyer mail
mail = 'Domoticz Alerte Age Sonde Temperature #Attention aux sondes suivantes : '..i..' # XXX@free.fr'
commandArray['SendEmail']=mail
alerte=1
end
end
end
if alerte==1 then
commandArray['Relevé Temp']='On'
end
return commandArray
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 19 déc. 2015, 13:08
par sebitop
le script de guillaume me semble vraiment ideal pour ton cas de figure
teste et dis nous !
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 20 déc. 2015, 13:45
par oula85
Script en partie trouvé ici parfait pour la surveillance des sondes de température avec notification individuelle
Code : Tout sélectionner
-- script_time_pile.lua
-- ce script détecte une perte de sonde et coupe le chauffage dans la zone,
--------------------------------
------ Variables à éditer ------
--------------------------------
local sonde = 'Temp Salon' -- Nom de la sonde de température
local sonde2 = 'Temp Cuisine' -- Nom de la sonde de température
local sonde3 = 'Temp Chambre 2' --Nom de la sonde de température
local sonde4 = 'Temp Chambre Capucine' --Nom de la sonde de température
local sonde6 = 'Secours' --Nom de la sonde de température
local sonde5 = 'CM180' --Nom de la sonde energie
--------------------------------
-- Fin des variables à éditer --
--------------------------------
time = os.date("*t")
function timedifference(d)
s = otherdevices_lastupdate[d]
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
-- on regarde de quand date la dernière relève de température
local lastSeen = timedifference(sonde)
local lastSeen2 = timedifference(sonde2)
local lastSeen3 = timedifference(sonde3)
local lastSeen4 = timedifference(sonde4)
local lastSeen5 = timedifference(sonde5)
local lastSeen6 = timedifference(sonde6)
commandArray = {}
-- lance une alarme par zone au dessus du seuil 600s si l'alarme est à OFF et la coupe en dessous si l'alarme est à On
if (lastSeen > 600 ) and (otherdevices['Pile Salon'] == 'Off') then
commandArray['Pile Salon']='On'
end
if (lastSeen2 > 600 ) and (otherdevices['Pile Cuisine'] == 'Off') then
commandArray['Pile Cuisine']='On'
end
if (lastSeen3 > 600 ) and (otherdevices['Pile Chambre 2'] == 'Off') then
commandArray['Pile Chambre 2']='On'
end
if (lastSeen4 > 600 ) and (otherdevices['Pile Chambre Capucine'] == 'Off') then
commandArray['Pile Chambre Capucine']='On'
end
if (lastSeen5 > 600 ) and (otherdevices['Pile CM180'] == 'Off') then
commandArray['Pile CM180']='On'
end
if (lastSeen6 > 600 ) and (otherdevices['Pile Secours'] == 'Off') then
commandArray['Pile Secours']='On'
end
if (lastSeen < 600 ) and (otherdevices['Pile Salon'] == 'On') then
commandArray['Pile Salon']='Off'
end
if (lastSeen2 < 600 ) and (otherdevices['Pile Cuisine'] == 'On') then
commandArray['Pile Cuisine']='Off'
end
if (lastSeen3 < 600 ) and (otherdevices['Pile Chambre 2'] == 'On') then
commandArray['Pile Chambre 2']='Off'
end
if (lastSeen4 < 600 ) and (otherdevices['Pile Chambre Capucine'] == 'On') then
commandArray['Pile Chambre Capucine']='Off'
end
if (lastSeen5 < 600 ) and (otherdevices['Pile CM180'] == 'On') then
commandArray['Pile CM180']='Off'
end
if (lastSeen6 < 600 ) and (otherdevices['Pile Secours'] == 'On') then
commandArray['Pile Secours']='Off'
end
return commandArray
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 18 janv. 2016, 15:20
par ziaziung
Merci pour votre aide.
@ganq :
Comment "remet t'on le dummy à zero"?
Doit on créer un switch de type "Relevé de temp" pour cela?
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 01 juil. 2018, 22:35
par guigui1976
Bonjour, je suis navré de sortir le post du fond du forum mais la solution de Guillaume me plait bien sauf que j'ai un message d'erreur du type:
2018-07-01 22:33:02.203 Error: EventSystem: in Vérification-temp-evenement_2: [string "-- Guillaume Anquetil - 20/06/2015 ..."]:15: ')' expected (to close '(' at line 14) near 'else'
Si vous avez une solution ou une piste, je suis preneur.
Mon équipement:
1 sonoff basic sous ESp EASY avec 6 DS18B20
Domoticz tourne sur un NAS Synology
Je vous remercie
Bonne soirée.
Guigui76
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 01 juil. 2018, 23:25
par vil1driver
Il manque une parenthèse à la fin de la ligne 14
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 03 juil. 2018, 07:25
par guigui1976
Bonjour, vil1driver je te remercie pour ton aide.
Bonne journée
Guigui1976