[DZVents] Alarme température et hygrométrie v3
Publié : 29 janv. 2019, 12:59
Dans la version 1 de ce script il était possible de comparer la valeur de sondes de température ambiante à un seuil d'alarme unique.
Ceci afin d'etre prévenu en cas d'augmentation anormale d'une température ambiante assimilable à une pré-alarme incendie.
La version 2 nous permettait entre autre :
- d'utiliser n'importe quelle sonde de température
- de définir un seuil personnalisé par sonde
- de définir des seuils par groupe (type) de sondes
- de définir un seuil par défaut pour les sondes sans groupe ni seuil personnalisé.
...
La version 3 nous apporte quelques changements supplémentaires :
toujours la gestion de la température, mais aussi l’hygrométrie.
Les seuils montant mais aussi descendant. Pour définir des alarmes température ou hygrométrie basse.
Le gros défaut des scripts précédent était l'envoi ininterrompu de notifications en cas de dépassement. C'est maintenant résolu. Vous pouvez fixer un délai en minutes entre deux notification pour une même alarme. ce délai est unique et valable pour l'ensemble des notifications.
Vous pouvez aussi être notifié uniquement par mail
le script complet
Ceci afin d'etre prévenu en cas d'augmentation anormale d'une température ambiante assimilable à une pré-alarme incendie.
La version 2 nous permettait entre autre :
- d'utiliser n'importe quelle sonde de température
- de définir un seuil personnalisé par sonde
- de définir des seuils par groupe (type) de sondes
- de définir un seuil par défaut pour les sondes sans groupe ni seuil personnalisé.
...
La version 3 nous apporte quelques changements supplémentaires :
toujours la gestion de la température, mais aussi l’hygrométrie.
Les seuils montant mais aussi descendant. Pour définir des alarmes température ou hygrométrie basse.
Le gros défaut des scripts précédent était l'envoi ininterrompu de notifications en cas de dépassement. C'est maintenant résolu. Vous pouvez fixer un délai en minutes entre deux notification pour une même alarme. ce délai est unique et valable pour l'ensemble des notifications.
Vous pouvez aussi être notifié uniquement par mail
le script complet
Code : Tout sélectionner
--[[
alarmeTemperatureHygrometrie.lua
auteur : papoo
MAJ : 26/01/2019
création : 15/08/2016
Principe : ce script vérifie toutes les minutes si il n'y a pas une augmentation (ou une diminution) de température (ou d'hygrométrie) anormale
sur les sondes de températures/hygrométrie référencées dans le tableau les_devices.
vous pouvez définir un seuil de température (en °C) ou d'humidité (en %hr) par sonde, par groupe ou par défaut, actuellement 5 groupes disponible : ambiance, frigo, congel, materiel et humidite
le seuil défini par sonde est prioritaire sur le seuil par groupe qui est prioritaire sur le seuil par défaut.
Vous pouvez définir le 'sens' de déclenchement augmentation de la valeur en dessus du seuil ou diminution de la valeur en dessous du seuil
comparaison de chaque valeur au seuil fixé et envoi d'une notification si dépassement du seuil.
Si plusieurs valeurs de sonde dépassent le(s) seuil(s), envoie d'une notification pour chacune d'elle.
définir le délai en minutes entre deux notifications d'une même alarme, par défaut delai configuré à 1440 minutes = 24 heures (modifiable)
url blog : https://pon.fr/dzvents-alarme-temperature-et-hygrometrie-v3
URL post : https://easydomoticz.com/forum/viewtopic.php?f=17&t=7947
URL github : https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/alarmeTemperatureHygrometrie.lua
--]]
--------------------------------------------
------------ Variables à éditer ------------
--------------------------------------------
local email = false -- true si l'on ne souhaite être notifié que par mail, false si l'on souhaite
local notification = true -- mettre à false si vous ne voulez pas de notification
local adresseMail = 'votre.adresse@mail.com' -- adresse mail, séparées par ; si plusieurs
local defaut_seuil = '45' -- seuil en °C par défaut avant notification pour tous les devices non personnalisés
local seuil_ambiance = '40' -- seuil en °C par défaut avant notification pour les devices du groupe ambiance
local seuil_frigo = '25' -- seuil en °C par défaut avant notification pour les devices du groupe refrigerateur
local seuil_congel = '-10' -- seuil en °C par défaut avant notification pour les devices du groupe congelateur
local seuil_materiel = '75' -- seuil en °C par défaut avant notification pour les devices du groupe materiel
local seuil_humidite = '70' -- seuil en % hr par défaut avant notification pour les devices du groupe humidite
local delai = '1440' -- nombre de minutes entre deux notifications d'une même alarme (1440 pour une seule notification par jour)
local sujet = "/!\\ Attention, alarme /!\\" -- sujet des notifications
local les_devices = {
-- comment remplir le tableau les_devices ?
-- ['nom'] = le nom du dispositif à surveiller
-- ['groupe'] = le nom du groupe auquel appartient le device à surveiller : ambiance, frigo, congel, humidite. Si aucun groupe particulier, nil.
-- ['seuil'] = seuil particulier à n'utiliser que sur le device concerné, inhibe le seuil affecté au groupe et le seuil par défaut . Si aucun seuil particulier, nil.
-- si ['groupe'] = nil et ['seuil'] = nil le seuil defaut_seuil sera appliqué.
-- Pour activer un ou plusieurs mode de notifications particuliers renseigner subsystem
-- les différentes valeurs de subsystem acceptées sont : gcm;http;kodi;lms;nma;prowl;pushbullet;pushover;pushsafer;telegram
-- pour plusieurs modes de notification séparez chaque mode par un point virgule. si ['systemeNotification'] = nil toutes les notifications seront activées.
-- { ['nom'] ="", ['groupe'] ="", ['type'] = "temperature, ['seuil'] = nil, ['sens'] = 'augmentation', ['systemeNotification'] = nil}
{ ['nom'] = 'Temperature Salon', ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = 35, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Salon', ['groupe'] = 'humidite', ['type'] = 'humidite', ['seuil'] = 70, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Salon', ['groupe'] = 'humidite', ['type'] = 'humidite', ['seuil'] = 25, ['sens'] = 'diminution' ,},
{ ['nom'] = 'Temperature Cave', ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Parents', ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Bureau', ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Cuisine', ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Douche', ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Douche', ['groupe'] = 'humidite', ['type'] = 'humidite', ['seuil'] = 70, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Garage', ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Cellier', ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Entree', ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
{ ['nom'] = 'Temperature Raspberry', ['groupe'] = 'materiel', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
{ ['nom'] = 'Synology Temp', ['groupe'] = 'materiel', ['type'] = 'temperature', ['seuil'] = 50, ['sens'] = 'augmentation',},
};
--------------------------------------------
----------- Fin variables à éditer ---------
--------------------------------------------
local nomScript = 'Alarme T° et HR'
local versionScript = '3.0'
return {
active = true,
on = { timer = {'every minute'}
},
logging = {
--------------------------------------------
------------- Niveau log à éditer ----------
--------------------------------------------
-- level = domoticz.LOG_DEBUG,
-- level = domoticz.LOG_INFO, -- Seulement un niveau peut être actif; commenter les autres
-- level = domoticz.LOG_ERROR, -- Only one level can be active; comment others
-- level = domoticz.LOG_MODULE_EXEC_INFO,
--------------------------------------------
----------- Fin niveau log à éditer --------
--------------------------------------------
marker = nomScript..' v'..versionScript
},
data = { envoiNotification = { history = true, maxMinutes = tonumber(delai)-1 }},
execute = function(domoticz)
--------------------------------------------
---------- Notifications à éditer ----------
--------------------------------------------
local tableNotification = {
-- tableau avec un ou plusieurs systèmes de notification.
-- décommentez le(s) système(s) de notification que vous souhaitez utiliser.
-- domoticz.NSS_GOOGLE_CLOUD_MESSAGING,
-- domoticz.NSS_PUSHOVER,
-- domoticz.NSS_HTTP,
-- domoticz.NSS_KODI,
-- domoticz.NSS_LOGITECH_MEDIASERVER,
-- domoticz.NSS_NMA,
-- domoticz.NSS_PROWL,
-- domoticz.NSS_PUSHALOT,
domoticz.NSS_PUSHBULLET,
-- domoticz.NSS_PUSHOVER,
-- domoticz.NSS_PUSHSAFER,
domoticz.NSS_TELEGRAM,
}
--------------------------------------------
-------- Fin Notifications à éditer --------
--------------------------------------------
for i, deviceToCheck in pairs(les_devices) do
local nom = deviceToCheck['nom']
local groupe = deviceToCheck['groupe']
local seuil = deviceToCheck['seuil']
if seuil == nil then
if groupe ~= nil then
if groupe == 'humidite' then
seuil = tonumber(seuil_humidite)
elseif groupe == 'frigo' then
seuil = tonumber(seuil_frigo)
elseif seuil == 'congel' then
seuil = tonumber(seuil_congel)
elseif groupe == 'ambiance' then
seuil = tonumber(seuil_ambiance)
elseif groupe == 'materiel' then
seuil = tonumber(seuil_materiel)
elseif groupe == nil then
seuil = tonumber(defaut_seuil)
end
end
end
local Type = deviceToCheck['type']
domoticz.log("groupe : "..tostring(groupe).." type : "..tostring(Type).." seuil : "..tostring(seuil), domoticz.LOG_DEBUG)
local valeur = ''
if Type == 'humidite' then
valeur = tonumber(domoticz.devices(nom).humidity)
else
valeur = tonumber(domoticz.devices(nom).temperature)
end
valeur = domoticz.utils.round(valeur,1)
local sens = deviceToCheck['sens']
if sens == 'diminution' then
declench = 'inférieur'
else
declench = 'supérieur'
end
local systemeNotification = deviceToCheck['systemeNotification']
if Type == 'humidite' then
message = "La sonde ".. tostring(nom) .." avec un seuil d\'alarme "..tostring(declench).." à "..tostring(seuil).." %, est à "..tostring(valeur).." %"
else
message = "La sonde ".. tostring(nom) .." avec un seuil d\'alarme "..tostring(declench).." à "..tostring(seuil)..", est à "..tostring(valeur).." °C"
end
nomtype = string.gsub (nom..Type, " ", "")
if (valeur >= seuil and sens == 'augmentation') or (valeur <= seuil and sens == 'diminution') then
domoticz.data.envoiNotification.forEach(function(item)
if item.data == nomtype then
timeNotif = tonumber(item.time.minutesAgo)
end
end)
domoticz.log("dernière notification de l\'alarme sonde "..tostring(nom).." : "..tostring(timeNotif).." minutes", domoticz.LOG_INFO)
if timeNotif == nil or (timeNotif ~= nil and timeNotif >= tonumber(delai)) then
if email then domoticz.email(sujet,message,adresseMail) end
if notification then domoticz.notify(sujet, message, domoticz.PRIORITY_NORMAL, domoticz.SOUND_INTERMISSION,"", tableNotification ) end
domoticz.data.envoiNotification.add(nomtype)
end
end
timeNotif = nil
end -- for
end
}