Ldfa Posté(e) le 30 décembre 2019 Partager Posté(e) le 30 décembre 2019 un petit cadeau de noël : un script lua pour être notifié lorsque un dispositif est resté allumé depuis un certain temps.Pour par exemple être prévenu lorsque la TV des enfants est allumée depuis plus de 2 heures, ou plus simplement lorsque la porte d’entrée ou la fenêtre de la chambre n’a pas été correctement refermée.possibilités de gestion des délais (en minutes) avant notification par groupes ou personnalisé par dispositifActuellement 4 groupes disponibles : porte, fenetres, lumiere, TV. si vous voyez d’autres groupes « incontournables » n’hésitez pas à les proposer iciPossibilités de personnaliser le type de notification pour chaque dispositifles dispositifs (devices) sont regroupés dans un tableau les_devicescomment remplir ce tableau ?chaque ligne se présente sous cette forme : les_devices[#les_devices+1] = {device="", type_device ="", delai = nil, subsystem = nil} les_devices[#les_devices+1] = {device="", type_device ="", delai = nil, subsystem = nil} device = le nom du dispositif à surveillertype_device = le nom du groupe auquel appartient le device à surveiller : porte, fenetres, lumiere, TV.delai = délai en minutes particulier à n’utiliser que sur le device concerné, inhibe le délai affecté au groupe. si aucun délai particulier, nil.si type_device = nil et delai = nil le délai defaut_delai sera appliqué.Pour activer un ou plusieurs mode de notifications particuliers renseigner subsystemles différentes valeurs de subsystem acceptées sont : gcm;http;kodi;lms;nma;prowl;pushalot;pushbullet;pushover;pushsaferpour plusieurs modes de notification séparez chaque mode par un point virgule. si subsystem = nil toutes les notifications seront activées --[[ script_time_notification_dispositifs_actifs.lua Principe : être notifié lorsqu'un device reste à "On" ou "open" plus de X minutes possibilités de gestion des temps avant notification par groupes ou personnalisés par device Possibilités de personnaliser le type de notification pour chaque device Date Création : 22/12/2017 Date MAJ : 24/12/2017 http://easydomoticz.com/forum/viewtopic.php?f=17&t=5540 http://pon.fr/notification-dispositifs-actifs-en-lua ]]-- -------------------------------------------- ------------ Variables à éditer ------------ -------------------------------------------- local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir local nom_script = 'Notification dispositifs actifs' local version = '1.10' local defaut_delai = "10" -- délai en minutes par défaut avant notification pour tout les devices non personnalisés local delai_portes = "5" -- délai en minutes par défaut avant notification pour les devices du groupe porte local delai_fenetres = "60" -- délai en minutes par défaut avant notification pour les devices du groupe fenêtre local delai_lumieres = "120" -- délai en minutes par défaut avant notification local delai_TV = "150" -- délai en minutes par défaut avant notification local les_devices = {}; -- comment remplir le tableau les_devices ? -- device = le nom du dispositif à surveiller -- type_device = le nom du groupe auquel appartient le device à surveiller : porte, fenetres, lumiere, TV. -- delai = délai particulier à n'utiliser que sur le device concerné, inhibe le délai affecté au groupe. si aucun délai particulier, nil. -- si type_device = nil et delai = nil le délai defaut_delai 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;pushalot;pushbullet;pushover;pushsafer -- pour plusieurs modes de notification séparez chaque mode par un point virgule. si subsystem = nil toutes les notifications seront activées -- les_devices[#les_devices+1] = {device="", type_device ="", delai = nil, subsystem = nil} les_devices[#les_devices+1] = {device="porte entree", type_device ="portes", delai = nil, subsystem = nil} -- 1er device délai en minutes les_devices[#les_devices+1] = {device="porte cave", type_device = "portes", delai = nil, subsystem = nil} -- 2eme device les_devices[#les_devices+1] = {device="fenetre douche", type_device = "fenetres", delai = nil, subsystem = nil} -- 3eme device les_devices[#les_devices+1] = {device="lumiere_rdc_2", type_device = "lumieres", delai = nil, subsystem = "pushbullet"} -- 4eme device les_devices[#les_devices+1] = {device="TV Sony", type_device = "TV", delai = nil, subsystem = nil} -- 5eme device les_devices[#les_devices+1] = {device="TV Salon", type_device = "TV", delai = "150", subsystem = nil} -- 6eme device les_devices[#les_devices+1] = {device="I7-3500", type_device = nil, delai = "360", subsystem = nil} -- 6eme device -------------------------------------------- ----------- Fin variables à éditer --------- -------------------------------------------- t1 = os.time() local open -------------------------------------------- -------------Fonctions---------------------- -------------------------------------------- function voir_les_logs (s, debugging) -- nécessite la variable local 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 -- usage : voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging) --============================================================================================== function ConvTime(timestamp) -- convertir un timestamp y, m, d, H, M, S = timestamp:match("(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)") return os.time{year=y, month=m, day=d, hour=H, min=M, sec=S} end --============================================================================================== function round(value, digits) -- arrondi local precision = 10^digits return (value >= 0) and (math.floor(value * precision + 0.5) / precision) or (math.ceil(value * precision - 0.5) / precision) end --============================================================================================== function return_delai(type_device, delai) if type_device == "portes" and delai == nil then return delai_portes elseif type_device == "fenetres" and delai == nil then return delai_fenetres elseif type_device == "lumieres" and delai == nil then return delai_lumieres elseif type_device == "TV" and delai == nil then return delai_TV elseif delai ~= nil then return delai else return defaut_delai end end -------------------------------------------- -------------- Fin Fonctions --------------- -------------------------------------------- commandArray = {} voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging) for k,v in pairs(les_devices) do -- On parcourt chaque device local Vtype = v.type_device local Vdelai = v.delai local Delai = tonumber(return_delai(Vtype, Vdelai)) t2 = ConvTime(otherdevices_lastupdate[v.device]) difference = (os.difftime (t1, t2)) if (otherdevices[v.device] == 'Open' or otherdevices[v.device] == 'On') then -- on n'affiche que les devices à ON ou open if Vtype ~= nil and Vtype ~= "" then voir_les_logs('=========== Etat du device '.. v.device ..' : '.. otherdevices[v.device] ..' delai : '.. Delai ..' type : '.. Vtype ..' ===========',debugging) else voir_les_logs('=========== Etat du device '.. v.device ..' : '.. otherdevices[v.device] ..' ===========',debugging) end voir_les_logs("=========== maintenant : ".. round(tonumber(t1)/60,0) .." - dernier changement d\'etat : ".. round(tonumber(t2)/60,0) .." - Difference : " .. round(tonumber(difference)/60,0) .."mn ===========",debugging) end if (otherdevices[v.device] == 'Open' or otherdevices[v.device] == 'On' and difference > ((tonumber(Delai)*60)-20) and difference < (tonumber(Delai)*60)+40) then -- si le delai est dépassée de moins d'une minute (pour une seule notification) voir_les_logs('=========== delai dépassé pour le device '.. v.device ..' : '.. otherdevices[v.device],debugging) if v.type_device == "lumieres" or v.type_device == "TV" then open = "allumée" else open = "ouverte" end if v.subsystem ~= nil then commandArray['SendNotification'] = 'Attention#'.. v.device ..' est restée '..open ..' depuis ' .. Delai ..' mn!#0###'.. v.subsystem ..'' else commandArray['SendNotification'] = 'Attention#'.. v.device ..' est restée '..open ..' depuis ' .. Delai ..' mn!' end end end -- end for voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging) return commandArray script_time_notification_dispositifs_actifs.lua Principe : être notifié lorsqu'un device reste à "On" ou "open" plus de X minutes possibilités de gestion des temps avant notification par groupes ou personnalisés par device Possibilités de personnaliser le type de notification pour chaque device Date Création : 22/12/2017 Date MAJ : 24/12/2017 http://easydomoticz.com/forum/viewtopic.php?f=17&t=5540 http://pon.fr/notification-dispositifs-actifs-en-lua -------------------------------------------- ------------ Variables à éditer ------------ -------------------------------------------- local debugging = true -- true pour voir les logs dans la console log Dz ou false pour ne pas les voir local nom_script = 'Notification dispositifs actifs' local version = '1.10' local defaut_delai = "10" -- délai en minutes par défaut avant notification pour tout les devices non personnalisés local delai_portes = "5" -- délai en minutes par défaut avant notification pour les devices du groupe porte local delai_fenetres = "60" -- délai en minutes par défaut avant notification pour les devices du groupe fenêtre local delai_lumieres = "120" -- délai en minutes par défaut avant notification local delai_TV = "150" -- délai en minutes par défaut avant notification local les_devices = {}; -- comment remplir le tableau les_devices ? -- device = le nom du dispositif à surveiller -- type_device = le nom du groupe auquel appartient le device à surveiller : porte, fenetres, lumiere, TV. -- delai = délai particulier à n'utiliser que sur le device concerné, inhibe le délai affecté au groupe. si aucun délai particulier, nil. -- si type_device = nil et delai = nil le délai defaut_delai 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;pushalot;pushbullet;pushover;pushsafer -- pour plusieurs modes de notification séparez chaque mode par un point virgule. si subsystem = nil toutes les notifications seront activées -- les_devices[#les_devices+1] = {device="", type_device ="", delai = nil, subsystem = nil} les_devices[#les_devices+1] = {device="porte entree", type_device ="portes", delai = nil, subsystem = nil} -- 1er device délai en minutes les_devices[#les_devices+1] = {device="porte cave", type_device = "portes", delai = nil, subsystem = nil} -- 2eme device les_devices[#les_devices+1] = {device="fenetre douche", type_device = "fenetres", delai = nil, subsystem = nil} -- 3eme device les_devices[#les_devices+1] = {device="lumiere_rdc_2", type_device = "lumieres", delai = nil, subsystem = "pushbullet"} -- 4eme device les_devices[#les_devices+1] = {device="TV Sony", type_device = "TV", delai = nil, subsystem = nil} -- 5eme device les_devices[#les_devices+1] = {device="TV Salon", type_device = "TV", delai = "150", subsystem = nil} -- 6eme device les_devices[#les_devices+1] = {device="I7-3500", type_device = nil, delai = "360", subsystem = nil} -- 6eme device -------------------------------------------- ----------- Fin variables à éditer --------- -------------------------------------------- t1 = os.time() local open -------------------------------------------- -------------Fonctions---------------------- -------------------------------------------- function voir_les_logs (s, debugging) -- nécessite la variable local debugging if (debugging) then if s ~= nil then print ("<font color='#f3031d'>".. s .."</font>") print ("<font color='#f3031d'>aucune valeur affichable</font>") end end -- usage : voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging) --============================================================================================== function ConvTime(timestamp) -- convertir un timestamp y, m, d, H, M, S = timestamp:match("(%d+)-(%d+)-(%d+) (%d+):(%d+):(%d+)") return os.time{year=y, month=m, day=d, hour=H, min=M, sec=S} --============================================================================================== function round(value, digits) -- arrondi local precision = 10^digits return (value >= 0) and (math.floor(value * precision + 0.5) / precision) or (math.ceil(value * precision - 0.5) / precision) --============================================================================================== function return_delai(type_device, delai) if type_device == "portes" and delai == nil then return delai_portes elseif type_device == "fenetres" and delai == nil then return delai_fenetres elseif type_device == "lumieres" and delai == nil then return delai_lumieres elseif type_device == "TV" and delai == nil then return delai_TV elseif delai ~= nil then return delai else return defaut_delai end -------------------------------------------- -------------- Fin Fonctions --------------- -------------------------------------------- commandArray = {} voir_les_logs("=========== ".. nom_script .." (v".. version ..") ===========",debugging) for k,v in pairs(les_devices) do -- On parcourt chaque device local Vtype = v.type_device local Vdelai = v.delai local Delai = tonumber(return_delai(Vtype, Vdelai)) t2 = ConvTime(otherdevices_lastupdate[v.device]) difference = (os.difftime (t1, t2)) if (otherdevices[v.device] == 'Open' or otherdevices[v.device] == 'On') then -- on n'affiche que les devices à ON ou open if Vtype ~= nil and Vtype ~= "" then voir_les_logs('=========== Etat du device '.. v.device ..' : '.. otherdevices[v.device] ..' delai : '.. Delai ..' type : '.. Vtype ..' ===========',debugging) else voir_les_logs('=========== Etat du device '.. v.device ..' : '.. otherdevices[v.device] ..' ===========',debugging) end voir_les_logs("=========== maintenant : ".. round(tonumber(t1)/60,0) .." - dernier changement d\'etat : ".. round(tonumber(t2)/60,0) .." - Difference : " .. round(tonumber(difference)/60,0) .."mn ===========",debugging) end if (otherdevices[v.device] == 'Open' or otherdevices[v.device] == 'On' and difference > ((tonumber(Delai)*60)-20) and difference < (tonumber(Delai)*60)+40) then -- si le delai est dépassée de moins d'une minute (pour une seule notification) voir_les_logs('=========== delai dépassé pour le device '.. v.device ..' : '.. otherdevices[v.device],debugging) if v.type_device == "lumieres" or v.type_device == "TV" then open = "allumée" else open = "ouverte" end if v.subsystem ~= nil then commandArray['SendNotification'] = 'Attention#'.. v.device ..' est restée '..open ..' depuis ' .. Delai ..' mn!#0###'.. v.subsystem ..'' else commandArray['SendNotification'] = 'Attention#'.. v.device ..' est restée '..open ..' depuis ' .. Delai ..' mn!' end end end -- end for voir_les_logs("========= Fin ".. nom_script .." (v".. version ..") =========",debugging) return commandArray Afficher l’article complet Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.