[LUA] Pré-alarme incendie

Vous avez créé un script LUA dont vous êtes fier, un .sh génial, un programme Python hors du commun, un Tuto, c'est ici que vous pouvez les partager.
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

[LUA] Pré-alarme incendie

Message 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
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
atlantis007
Messages : 65
Inscription : 11 janv. 2015, 22:31
Localisation : biarritz (64)

Re: LUA : pré-alarme incendie

Message 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 :?:
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : pré-alarme incendie

Message 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
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
atlantis007
Messages : 65
Inscription : 11 janv. 2015, 22:31
Localisation : biarritz (64)

Re: LUA : pré-alarme incendie

Message 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 :?:
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : pré-alarme incendie

Message 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
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
deennoo
Messages : 4036
Inscription : 25 janv. 2015, 02:00

Re: LUA : pré-alarme incendie

Message 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 ?
De quoi se faire Plaisir et essayer d'aider...
http://www.domo-attitude.fr
papoo
Messages : 2029
Inscription : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: LUA : pré-alarme incendie

Message 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.
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github
Répondre