Page 1 sur 1

[LUA] Pré-alarme incendie

Publié : 16 août 2016, 11:17
par papoo
après avoir installé des sondes de température un peu partout, je me suis dis qu'un petit script pour relever les t° anormales et envoyer une notification pour chacune d'elles pourrait être utile.
le principe : ce script vérifie toutes les deux minutes si il n'y a pas une augmentation de température anormale dans une des pièces référencées dans le tableau les_températures. le nom de chaque sonde doit être encadrer de " et suivi d'une virgule. exemple :"nom sonde 1", "nom sonde2",
il compare chaque température au seuil fixé par la variable seuil_notification (en °). Si une ou plusieurs températures sont supérieures à ce seuil, envoie d'une notification pour chacune d'elle.
/!\ si le seuil est fixé trop bas, cela risque de générer beaucoup de notifications et d'éventuellement bloquer les services de type pushbullet.
version 1.1 = ajout fonctionnalité envoi par mail uniquement

Code : Tout sélectionner

--[[
name : script_time_prealarme incendie.lua 
auteur : papoo
version : 1.10
MAJ : 16/08/2016
version 1.1 : ajout fonctionnalité envoi par mail uniquement
création : 15/08/2016
Principe : ce script vérifie toutes les deux minutes si il n'y a pas une augmentation de température anormale dans une des pièces référencées dans le tableau les_températures. le nom de chaque sonde doit être encadrer de " et suivi d'une virgule.  exemple  :"nom sonde 1", "nom sonde2",
il compare chaque température au seuil fixé par la variable  seuil_notification (en °). Si une ou plusieurs températures sont supérieures à ce seuil, envoie d'une notification pour chacune d'elle.
/!\ si le seuil est fixé trop bas, cela risque de générer beaucoup de notifications et d'éventuellement bloquer les services de type pushbullet.
URL post : http://easydomoticz.com/forum/viewtopic.php?f=17&t=2319
]]--
--------------------------------------------
------------ Variables à éditer ------------
-------------------------------------------- 

local debugging = true  	-- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local seuil_notification=40 		-- seuil température au delà duquel les notifications d'alarme seront envoyées
local les_temperatures = {"Temp ch1", "Temp ch2", "Temp ch3", "Temp Entree", "T° salon","Couloir 1er étage", "Sonde Cave", "T° tableau  elec", "Temp Douche"}; 
local only_mail = true -- true si l'on ne souhaite être notifié que par mail, false si l'on souhaite toutes les notifications disponible.
local EmailTo = 'email@email.com'  -- adresse mail, séparées par ; si plusieurs

--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local indexArray=0
local message = {}
local alarmes = 0
commandArray = {}

--------------------------------------------
---------------- Fonctions -----------------
-------------------------------------------- 
function voir_les_logs (s, debugging)
    if (debugging) then 
		if s ~= nil then
        print ("<font color='#f3031d'>".. s .."</font>")
		else
		print ("<font color='#f3031d'>aucune valeur affichable</font>")
		end
    end
end	

now=os.date("*t")
--------------------------------------------
-------------- Fin Fonctions ---------------
--------------------------------------------  

if now.min % 2 == 0 then
			voir_les_logs("--- --- --- script_time_prealarme incendie.lua --- --- ---",debugging)
			voir_les_logs("--- --- --- seuil de notification ".. seuil_notification .."°C",debugging)
    for i,d in ipairs(les_temperatures) do
		
		 local v=otherdevices[d]                        
				voir_les_logs("--- --- --- device value "..d.." = "..(v or "nil"),debugging)

					if string.match(v, ';')  then
					v=v:match('^(.-);')
					voir_les_logs("--- --- --- svalue "..d.." = "..(v or "nil"),debugging)
					end
					
			if v~= nil then
				if tonumber(v) > tonumber(seuil_notification) then
				alarmes = alarmes+1
				table.insert(message, 'température '..d..' : '..v..'°C, supérieure au seuil fixé à '..seuil_notification..'°C <br>')
					if only_mail ~= true then
					commandArray[indexArray] = {['SendNotification'] = 'Alerte préalarme incendie#température '..d..' : '..v..'°C, supérieure au seuil fixé à '..seuil_notification..'°C'}
					indexArray=indexArray+1
					end
				end
			end                                            
		end

	if alarmes >= 1 and only_mail == true then
		voir_les_logs("--- --- --- Nb d'alarmes : "..alarmes,debugging)
	    objet = 'Alerte préalarme incendie '..os.date("%H:%M")
		commandArray['SendEmail']= objet..'#'.. table.concat(message)  .. '#' .. EmailTo
		voir_les_logs("--- --- --- Objet:"..objet,debugging)
		voir_les_logs("--- --- --- Corps du message: "..table.concat(message),debugging)
		voir_les_logs("--- --- --- Destinataire: "..EmailTo,debugging)
	end
  voir_les_logs("--- --- --- Fin script_time_prealarme incendie.lua --- --- ---",debugging)
end -- if now

return commandArray

Re: LUA : pré-alarme incendie

Publié : 11 sept. 2016, 16:32
par atlantis007
bonjour
j ai un petit souci avec le script j ai le massage suivant

2016-09-11 16:30:00.210 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_prealarme incendie.lua: .../domoticz/scripts/lua/script_time_prealarme incendie.lua:52: bad argument #1 to 'ipairs' (table expected, got string)

tu a une solution merci :?:

Re: LUA : pré-alarme incendie

Publié : 11 sept. 2016, 17:07
par papoo
ta variable "les_temperatures" est vide ou mal renseignée. Tu dois mettre au moins une valeur, chaque valeur doit être encadrée de guillemets et elles doivent être séparées par une virgule.
mets nous une copie de ton tableau de variables afin que l'on puisse voir où cela peche

Re: LUA : pré-alarme incendie

Publié : 12 sept. 2016, 22:20
par atlantis007
bonsoir
voici une copie du tableau des variables


local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir
local seuil_notification=25 -- seuil température au delà duquel les notifications d'alarme seront envoyées
local les_temperatures = "Temperature salon", "Température SaM Z-Wave", "Température SaM WIRE", "Température buanderie WIRE" ;
local only_mail = true -- true si l'on ne souhaite être notifié que par mail, false si l'on souhaite toutes les notifications disponible.
local EmailTo = 'fernandpreto@gmail.com' -- adresse mail, séparées par ; si plusieurs

merci :?:

Re: LUA : pré-alarme incendie

Publié : 12 sept. 2016, 22:56
par papoo
ton tableau composant la variable les_temperatures
1) doit commencer par une parenthèse { que tu as supprimée
2) chaque device température doit etre entre "guillemets" ça c'est ok
3) chaque device température doit etre séparée d'une précedente par une virgule ça c'est ok
4) doit finir par une parenthèse } que tu as supprimée
5) il ne doit pas y avoir de point virgule
6) chaque device temperature devra etre orthographié exactement comme dans domoticz, avec les accents les espaces etc

ce qui donnerait :

Code : Tout sélectionner

local les_temperatures = {"Temperature salon", "Température SaM Z-Wave", "Température SaM WIRE", "Température buanderie WIRE"}
si "Temperature salon" est sans accent et les autres avec accents

Re: LUA : pré-alarme incendie

Publié : 13 sept. 2016, 16:18
par deennoo
Petite question, de temps à autre j'ai une sonde qui m'annonce 145 degrés (des soucis de dzcodages) et ce que ton script attend deux mesures trop élever pour envoyer la notification ?

Re: LUA : pré-alarme incendie

Publié : 13 sept. 2016, 17:40
par papoo
non il l'envoi dès la première. il faudrait créer une variable pour chaque T° afin de pouvoir comparer l'état précédent.