Comment créer une alerte de perte de capteurs ou de sonde ?

Forum dédié aux problématiques concernant les scripts pour DomoticZ.
Entourez votre code et les logs avec les balises nommées code grâce au bouton <\>.
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Comment créer une alerte de perte de capteurs ou de sonde ?

Message 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
Michel91
Messages : 106
Inscription : 21 avr. 2020, 15:31

Re: Comment créer une alerte de perte de capteurs ou de sonde ?

Message par Michel91 »

Le dummy doit être de quel type interrupteur température ?
ganq
Messages : 385
Inscription : 01 avr. 2015, 14:20

Re: Comment créer une alerte de perte de capteurs ou de sonde ?

Message par ganq »

de type interrupteur
Dernière modification par Keros le 07 juil. 2022, 18:39, modifié 1 fois.
Raison : Citation supprimée. Merci de ne pas citer le message précédent lors d'une réponse directe.
domoticien amateur option bidouille
ogulf
Messages : 445
Inscription : 15 juin 2017, 14:41

Re: Comment créer une alerte de perte de capteurs ou de sonde ?

Message 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&param=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&param=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
Domoticz Stable sur RPi3 + RFPlayer + ZWave+ + RFLink R48 :
- 11 x RF660P
- 1 x FGSD-002
- 10 x F007TH
- 5 x Emcoluxr EV1527 + 4 x NAS-DS01Z
- 4 x NAS-PD02Z
- 1 x Shelly 1PM
knasson
Messages : 245
Inscription : 26 mars 2021, 08:59

Re: Comment créer une alerte de perte de capteurs ou de sonde ?

Message par knasson »

message supprimé
Dernière modification par knasson le 06 déc. 2023, 19:50, modifié 1 fois.
Keros
Messages : 6638
Inscription : 23 juil. 2019, 20:57

Modération

Message par Keros »

Sujet déplacé dans la section Scripts.
Répondre