Page 2 sur 2
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 02 mai 2022, 10:21
par knasson
ganq a écrit : 16 déc. 2015, 21:48
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
Le script de Guillaume est presque parfait et merci a lui,
juste pour ceux qui comme moi veulent l'utiliser, a noter sur cette ligne de code "if (i:sub(1,5)=='Temp ') " que le nom du sensor de température doit être quelque chose comme "Temp " avec un espace(exemple: Temp chambre) ou bien changer le code en if (i:sub(1,4)=='Temp') si vous n'avez pas d'espace dans le nom du sensor.(par exemple: Temp_Chambre ou TempChambre)
la Deuxieme chose est que lorsqu'un sensor est "out" depuis longtemps (plusieurs jours ou plusieurs heures) le script se déclenche en permanence donc pour stopper ca effectivement il faut soit remettre le capteur en ligne, soit lui changer son nom et tout rentre dans l'ordre.
Pensez a changer l'adresse mail pour les notifications.
ce script m'est surtout utile pour surveiller les capteurs qui renvoient sur des devices virtuels et qui eux n'ont jamais le problème de déconnexion. Donc je pouvais me retrouver avec une température qui semblait a jour sur le device virtuel mais qui en realité n'etait pas a jour car le sensor était déconnecté (c'est le cas notamment des capteurs qui renvoient 2 datas temp et humidité, et dont je n'utilise que la température (en creant un capteur virtuel).
par contre il faut bien penser a mettre ces capteurs en 'utilisés' sinon ils ne seront pas surveillés par le script.
voila le retour pour moi...
cordialement
knasson
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 07 juil. 2022, 13:41
par Michel91
Le dummy doit être de quel type interrupteur température ?
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 07 juil. 2022, 17:58
par ganq
de type interrupteur
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 09 juil. 2022, 11:42
par ogulf
Je m'étais largement inspiré de scripts trouvés ici, et j'ai ajouté une relance du RFLink si
toutes les sondes surveillées n'ont pas été vues ==> cas peu probable sauf en cas de plantag du RFLink (c'est arrivé 2 fois en 5 ans que je fais de la domotique) : la partie intéressante se trouve dans le test 'si aucune sonde vue depuis...'
Ci après mon script, sans nouvelle variable (du coup, je reçois à intervalle régulier un mail pour perte de sonde, j'en ai conscience et l'accepte !)
Code : Tout sélectionner
-- Vérification dernières remontée d'un device
-- Script de type TIME
-- Chargement des modules (http://easydomoticz.com/forum/viewtopic.php?f=17&t=3940)
dofile('/home/domoticz/domoticz/scripts/lua/modules.lua')
debug = false -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local devices = {}
-- tableau à renseigner {'dispositif'}
devices[1] = {'DehorsTemp'}
devices[2] = {'SalonTemp'}
devices[3] = {'Ch1HautTemp'}
devices[4] = {'Ch2HautTemp'}
devices[5] = {'SdBHautTemp'}
devices[6] = {'CuisineTemp'}
devices[7] = {'ChBasTemp'}
devices[8] = {'SdBBasTemp'}
devices[9] = {'SalonBasTemp'}
-- devices[10] = {'PIR Cuisine Temp'}
-- devices[11] = {'PIR Salon Temp'}
-- devices[12] = {'PIR Ch1 Temp'}
-- devices[13] = {'PIR ChBas Temp'}
-- fin du tableau
commandArray = {}
local time = os.date("*t")
local nb=0
local msg='Perte sonde(s) :'
local titre=''
-- toutes les x minutes x=15..60 de préférence
local frequence=20
local min=99999999
-- Périodiquement !
if time.min%frequence == 0 then
for n,device in pairs(devices) do
log('sonde '..n..' : '..device[1]..' vue depuis : '..lastSeen(device[1]),debug)
if lastSeen(device[1]) > frequence*60 then
nb=nb+1
titre='Perte '..device[1]..' : '..lastSeen(device[1])..' secondes'
msg=msg..'<BR>- '..device[1]..' depuis '..lastSeen(device[1])..' secondes'
if min>lastSeen(device[1]) then
min=lastSeen(device[1])
end
end
end
-- Au moins une sonde pas vue depuis "frequence" minutes ?
if nb > 0 then
log(msg,debug)
if nb>1 then titre='Perte '..tostring(nb)..' sonde(s)' end
commandArray[#commandArray+1] = {['SendEmail']=titre..'#'..msg..'#xxxx@xxxx.fr'}
end
-- Aucune sonde vue depuis 1x"frequence" minutes ?
if nb == #devices and min > 1*frequence*60 then
msg='Aucune sonde vue depuis '..tostring(min/60)..' min : RFLink relancé !<BR><BR>'..msg
log(msg,debug)
commandArray[#commandArray+1] = {['SendEmail']='Relancer RFLink !#'..msg..'#xxxx@xxxx.fr'}
commandArray[#commandArray+1] = {['OpenURL']='http://myIP/json.htm?type=command¶m=updatehardware&htype=46&port=/dev/ttyUSBRFLink&extra=&name=RFLink&enabled=false&idx=12&datatimeout=0&Mode1=0&Mode2=0&Mode3=0&Mode4=0&Mode5=0&Mode6=0'}
commandArray[#commandArray+1] = {['OpenURL']='http://myIP/json.htm?type=command¶m=updatehardware&htype=46&port=/dev/ttyUSBRFLink&extra=&name=RFLink&enabled=true&idx=12&datatimeout=0&Mode1=0&Mode2=0&Mode3=0&Mode4=0&Mode5=0&Mode6=0 AFTER 5'}
end
end
return commandArray
Re: Comment créer une alerte de perte de capteurs ou de sonde ?
Publié : 05 déc. 2023, 16:44
par knasson
message supprimé
Modération
Publié : 05 déc. 2023, 18:14
par Keros
Sujet déplacé dans la section Scripts.