[DZVents] Alarme température et hygrométrie v3

Vous avez crée 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.
Soyez précis quant aux prérequis, les manips à faire pour que votre bijou fonctionne (des chmod ?, un apt-get à faire ...)
Décrivez précisément son fonctionnement
Placez votre code entre [Quote] et {/Quote]
papoo
Messages : 1882
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

[DZVents] Alarme température et hygrométrie v3

Message par papoo » 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

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

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Dim33
Messages : 161
Enregistré le : 29 janv. 2017, 23:19

Re: [DZVents] Alarme température et hygrométrie v3

Message par Dim33 » 30 janv. 2019, 22:22

Bonjour Papoo,

Erreur sur mon systeme :

Code : Tout sélectionner

2019-01-30 22:20:00.524 Status: dzVents: Error (2.4.6): Alarme T° et HR v3.0: An error occured when calling event handler alarmeTemperatureHygrometrie
2019-01-30 22:20:00.524 Status: dzVents: Error (2.4.6): Alarme T° et HR v3.0: /home/dd/domoticz/dzVents/runtime/Domoticz.lua:159: attempt to perform arithmetic on local 'x' (a nil value)
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 4.9701

papoo
Messages : 1882
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: [DZVents] Alarme température et hygrométrie v3

Message par papoo » 30 janv. 2019, 23:06

c'est quoi ta ligne 159 dans ton script?

tu as bien supprimé tout mes devices pour ne mettre que les tiens?
tes devices enregistrés sont bien tous au minimum des sondes de température?

edit : mets une copie de ton script modifié en réponse, ce sera plus simple en fait
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Dim33
Messages : 161
Enregistré le : 29 janv. 2017, 23:19

Re: [DZVents] Alarme température et hygrométrie v3

Message par Dim33 » 31 janv. 2019, 00:05

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 seuil_salon       = '21'                                      -- seuil en °C par défaut avant notification pour les devices du groupe salon
local seuil_chambre     = '18'
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}

{ ['Sonde_Salon'] = 'Temperature Salon',                            ['groupe'] = 'salon',   ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
{ ['Sonde_Chambre_Camille'] = 'Temperature Chambre Camille',        ['groupe'] = 'chambre', ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
{ ['Sonde_Chambre_Pauline'] = 'Temperature Chambre Pauline',        ['groupe'] = 'chambre', ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
{ ['Sonde_Chambre_Parents'] = 'Temperature Chambre Parents',        ['groupe'] = 'chambre', ['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 == 'salon' then
                        seuil = tonumber(seuil_salon)
                    elseif groupe == 'chambre' then
                        seuil = tonumber(seuil_chambre)  						
                    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   
}
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 4.9701

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


papoo
Messages : 1882
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: [DZVents] Alarme température et hygrométrie v3

Message par papoo » 31 janv. 2019, 12:52

tu as quelle version de domoticz /dzvents?
l'erreur ne viens pas de mon script mais du fichier domoticz.lua (la ligne 159)

Code : Tout sélectionner

/home/dd/domoticz/dzVents/runtime/Domoticz.lua:159
si tu a une version dzvents inférieure à la 2.4 c'est peut etre la fonction round qui n'est pas reconnue par ton système
pour tester commente (ajoute -- devant) la ligne

Code : Tout sélectionner

            valeur                      = domoticz.utils.round(valeur,1)
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Dim33
Messages : 161
Enregistré le : 29 janv. 2017, 23:19

Re: [DZVents] Alarme température et hygrométrie v3

Message par Dim33 » 31 janv. 2019, 23:39

Non, c'est pas ça. Idem malgré que la ligne soit commentée. D’après les logs, il semble que c'est la version 2.4.6.

Et dans le fichier domoticz.lua, à la la ligne 159, j'ai ça :

Code : Tout sélectionner

round = function(x, n)
				n = math.pow(10, n or 0)
				x = x * n
				if x >= 0 then
					x = math.floor(x + 0.5)
				else
					x = math.ceil(x - 0.5)
				end
				return x / n
			end,
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 4.9701

papoo
Messages : 1882
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: [DZVents] Alarme température et hygrométrie v3

Message par papoo » 01 févr. 2019, 07:18

C’est bien la fonction round à la ligne 159 de domoticz.lua
Essais en remplaçant dans le script par

Code : Tout sélectionner

            valeur                      = domoticz.utils.round(tonumber(valeur),1)
ou en la supprimant carrément
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

Dim33
Messages : 161
Enregistré le : 29 janv. 2017, 23:19

Re: [DZVents] Alarme température et hygrométrie v3

Message par Dim33 » 01 févr. 2019, 20:02

Modifié ou supprimé, c'est pareil.

T'arraches pas les cheveux, Papoo :lol:
NUC sous Ubuntu Server / RFXCom / Domoticz Version: 4.9701

papoo
Messages : 1882
Enregistré le : 10 janv. 2016, 11:29
Localisation : Limoges (87)
Contact :

Re: [DZVents] Alarme température et hygrométrie v3

Message par papoo » 02 févr. 2019, 07:58

@Dim33
tes 3 sondes sont des de quel type? température seulement? Temp/hygro? Temp/Hygro/baro?
te serait il possible de tester le script d'origine en personnalisant les seuils de tes 3 sondes plutot que de definir deux groupes supplémentaires? juste pour voir le comportement?
et si ça ne fonctionne toujours pas, en essayant qu'une seule sonde à la fois et en changeant de sonde à chaque fois?
domoticz beta/RaspBerry PI3 stretch
https://pon.fr github

denis_brasseur
Messages : 232
Enregistré le : 24 déc. 2018, 17:05
Localisation : (26)

Re: [DZVents] Alarme température et hygrométrie v3

Message par denis_brasseur » 02 févr. 2019, 08:37

Dim33 a écrit :
31 janv. 2019, 00:05

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 seuil_salon       = '21'                                      -- seuil en °C par défaut avant notification pour les devices du groupe salon
local seuil_chambre     = '18'
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}

{ ['Sonde_Salon'] = 'Temperature Salon',                            ['groupe'] = 'salon',   ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
{ ['Sonde_Chambre_Camille'] = 'Temperature Chambre Camille',        ['groupe'] = 'chambre', ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
{ ['Sonde_Chambre_Pauline'] = 'Temperature Chambre Pauline',        ['groupe'] = 'chambre', ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
{ ['Sonde_Chambre_Parents'] = 'Temperature Chambre Parents',        ['groupe'] = 'chambre', ['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 == 'salon' then
                        seuil = tonumber(seuil_salon)
                    elseif groupe == 'chambre' then
                        seuil = tonumber(seuil_chambre)  						
                    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   
}
Tu n'a pas respecté le code initial.

Tu a renommé ['nom']

Code : Tout sélectionner

{ ['Sonde_Salon'] = 'Temperature Salon',                            ['groupe'] = 'salon',   ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
{ ['Sonde_Chambre_Camille'] = 'Temperature Chambre Camille',        ['groupe'] = 'chambre', ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
{ ['Sonde_Chambre_Pauline'] = 'Temperature Chambre Pauline',        ['groupe'] = 'chambre', ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
{ ['Sonde_Chambre_Parents'] = 'Temperature Chambre Parents',        ['groupe'] = 'chambre', ['type'] = 'temperature',    ['seuil'] = nil,  ['sens'] = 'augmentation',},
du devrais avoir ceci (ne modifier que ce qui est entre cote, et ne pas toucher entre crochet :

Code : Tout sélectionner

{ ['nom'] = 'Temperature Parents',      ['groupe'] = 'ambiance', ['type'] = 'temperature', ['seuil'] = nil, ['sens'] = 'augmentation',},
Domoticz + Raspberry Pi3 + Disque Dur PiDrive + RFXtrx433
10 Getdio 54755 (gestion chauffage)
2 CHACON 34131 (détecteur fumées)
5 Bresser Capteur thermo/hygro RC 5CH
2 CHACON DiO 54781 (contacteur porte)
OWL Micro+ CM180
Module D2L LINKY

Disable adblock

This site is supported by ads and donations.
If you see this text you are blocking our ads.
Please consider a Donation to support the site.


Répondre