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 :
- active => true (pour prendre en compte le capteur) ou false (pour l'ignorer)
- device => Le nom du device tels qu'il est déclaré dans domoticz
- closeRule => le ou les seuils à prendre en compte
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 <code>local SubSystem</code> Les Systèmes de notification disponibles sont :
- domoticz.NSS_GOOGLE_CLOUD_MESSAGING
- 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
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
Code : Tout sélectionner
-- 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/
-- 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',
closeRule = function(device)
return device.color > 2 -- vert = 0, jaune = 1, orange = 2, rouge = 3
end
},
alerte_pluie = {
active = true,
device = 'Alerte Pluie',
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
}