Lors de cette période d’aussi forts que soudains orages laisser une fenêtre ouverte, surtout si c’est une fenêtre de toit, peut s’avérer catastrophique.
Pour tenter d’éviter ce problème je vous propose un script DZvents pour domoticz.
Son principe :
vous définissez des seuils pour chacune des sondes que vous souhaitez utiliser. Si vous ne disposez pas de sondes physiques pour remplir cette mission, vous pouvez utiliser les sondes virtuelles de Forecast.io par exemple.
Cinq devices sont utilisable et définissable dans le tableau local sensors : le vent (vitesse et rafale), la pluie, les prévisions de pluie, Alerte météo et alerte pluie.
Trois paramètres sont personnalisable :
Ensuite déclarez le(s) nom(s) des devices surveillant l’ouverture de vos fenêtres, pour ma part, des contacts xiaomi
Ce script utilise les données persistantes de DZvents, pour « mémoriser » si le script à déjà envoyé une notification pour le risque en cours, afin de ne pas vous envoyer une notification par minute. Merci à waaren pour cela.
pour une notification via un ou plusieurs sous système de notification, personnalisez la variable local SubSystem
Les Systèmes de notification disponibles sont :
Pour une notification sur plusieurs systèmes, séparez les systèmes par une virgule et entourez l’ensemble par des {}. Exemple :{domoticz.NSS_TELEGRAM, domoticz.NSS_HTTP}
Quatre niveaux de logging sont définissable : (Seulement un niveau peut être actif; commenter les autres)
domoticz.LOG_INFO
domoticz.LOG_ERROR
domoticz.LOG_DEBUG
domoticz.LOG_MODULE_EXEC_INFO
le script complet
-- v1.00 Auteur papoo -- https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/fenetres_ouvertes.lua -- https://pon.fr/dzvents-notification-fenetres-ouvertes-sur-risques-meteorologiques/ -- https://easydomoticz.com/forum/viewtopic.php?f=17&t=6649 -- Définir tous les capteurs et les seuils qui doivent être pris en compte pour la notification des fenêtres restées ouvertes local sensors = { vent = { active = true, device = 'Anémomètre', closeRule = function(device) return device.speed >= 50 or device.gust >= 100 -- vitesse et rafale end }, pluie = { active = true, device = 'Pluviometre', closeRule = function(device) return device.rainRate > 0 end }, probabilite_pluie = { active = true, device = 'Proba Pluie 1h', -- Ce doit être un capteur virtuel de type "pourcentage" closeRule = function(device) return device.percentage > 30 end }, alerte_meteo = { active = false, device = 'Vigilance Météo', -- Ce doit être un capteur virtuel de type "Alerte" closeRule = function(device) return device.color > 2 -- vert = 0, jaune = 1, orange = 2, rouge = 3 end }, alerte_pluie = { active = true, device = 'Alerte Pluie', -- Ce doit être un capteur virtuel de type "Alerte" closeRule = function(device) return device.color > 1 end } } local FENETRES = { 'fenetre douche', 'fenetre 1'} --local FENETRES = { 'fenetre*'} local SubSystem = nil --domoticz.NSS_TELEGRAM --domoticz.NSS_PUSHBULLET --[[ Systèmes de notification disponibles : NSS_GOOGLE_CLOUD_MESSAGING NSS_HTTP NSS_KODI NSS_LOGITECH_MEDIASERVER NSS_NMA NSS_PROWL NSS_PUSHALOT NSS_PUSHBULLET NSS_PUSHOVER NSS_PUSHSAFER Pour une notification sur plusieurs systèmes, séparez les systèmes par une virgule et entourez l'ensemble par des {}. Exemple :{domoticz.NSS_TELEGRAM, domoticz.NSS_HTTP} --]] local message = '.' return { active = true, on = { timer = {'every minute'} }, logging = { level = domoticz.LOG_INFO, -- Seulement un niveau peut être actif; commenter les autres -- level = domoticz.LOG_ERROR, -- level = domoticz.LOG_DEBUG, -- level = domoticz.LOG_MODULE_EXEC_INFO, marker = 'NOTIFICATION FENETRES OUVERTES ' }, data = { state = { initial = "" }}, -- thanks waaren for persistent data notification execute = function(domoticz, _) local conditionDeviceState = "Off" -- FUNCTIONS local function notification(fenetre, message) domoticz.log("État state avant notif : " .. domoticz.data.state,domoticz.LOG_DEBUG) domoticz.log("État condition avant notif : " .. conditionDeviceState,domoticz.LOG_DEBUG) if conditionDeviceState ~= domoticz.data.state then domoticz.log("Envoi de la notification ",domoticz.LOG_INFO) if SubSystem == nil then domoticz.notify(fenetre, message) else domoticz.notify(fenetre, message, '', '', '', SubSystem) end domoticz.log(message, domoticz.LOG_INFO) domoticz.data.notificationSent = domoticz.time.raw -- Store time of notification domoticz.data.state = "On" else domoticz.log("Aucune notification à envoyer pour le moment",domoticz.LOG_INFO) end end -- démarrage programme local fenetres = domoticz.devices().filter(FENETRES) fenetres.forEach(function(fenetre) domoticz.log('état '.. fenetre.name ..' : ' .. fenetre.state, domoticz.LOG_DEBUG) if fenetre.state == "On" or fenetre.state == "Open" then for sensorType, sensor in pairs(sensors) do if (sensor['active'] == true) then local device = domoticz.devices(sensor['device']) local closeRule = sensor['closeRule'] domoticz.log('Checking sensor: ' .. sensorType, domoticz.LOG_DEBUG) if (closeRule(device)) then domoticz.log(sensorType .. ' seuil dépassé', domoticz.LOG_INFO) domoticz.log('attention '.. fenetre.name ..' est resté ouverte', domoticz.LOG_INFO) conditionDeviceState = "On" notification('attention ',fenetre.name..' est resté ouverte ' .. sensorType .. ' seuil dépassé') -- Retour anticipé au script en cas de seuil dépassé return end else domoticz.log('Sonde non active ignorée : ' .. sensorType, domoticz.LOG_DEBUG) end end end end)-- forEach if domoticz.data.state ~= conditionDeviceState then -- il y a changement d'état? domoticz.data.state = conditionDeviceState else domoticz.log("Reset state non nécessaire",domoticz.LOG_DEBUG) end domoticz.log("État state: " .. domoticz.data.state,domoticz.LOG_DEBUG) domoticz.log("État condition: " .. conditionDeviceState,domoticz.LOG_DEBUG) end }
retrouver la dernière version de ce script sur [homepage]https://github.com/papo-o/domoticz_scripts/blob/master/dzVents/scripts/fenetres_ouvertes.lua[/homepage]