Je débute en dzVents. J'ai cru comprendre que chaque mise à jour de devices, variables, etc.. engendre le redémarrage du script. Et ça me pose un problème.
Mon cas concret :
- j'ai créé un capteur Arduino avec détecteur de mouvement (DP) et photo resistance (CP)
- dans le sketch Arduino, l'info du DP est instantanément mise à jour par interruption. La CP est mise à jour toutes les 30 secondes.
- le sketch Arduino est celui de mysensors adapté pour multi-capteurs.
- je règle la temporisation du DP dans le script dzVents dans Domoticz (90 secondes)
La valeur mesurée par la CP toutes les 30 secondes est un peu aléatoire (genre 100 - 120 - 50 - 95 - 110...) fiable quand on regarde un log sur 24 heures, mais instable. (faut pas trop en demander à un composant à quelques centimes d'euros...). Mais suffisant pour mon besoin (suivre l'évolution de la luminosité extérieure).
Je pensais régler la question de ces sautes de mesures par un lissage sur 5 à 10 valeurs. Je parviens à établir une moyenne avec le script ci-dessous.
Code : Tout sélectionner
return {
on = {
devices = {
'EXT_CP'
},
timer = {},
variables = {
'MOY_EXT_CP'
},
scenes = {},
groups = {},
security = {},
httpResponses = {},
customEvents = {},
system = {},
},
data = {
VAL_EXT_CP = {history = true, maxItems = 10}
},
logging = {
level = domoticz.LOG_DEBUG,
marker = "EXT-LUMINOSITE"
},
execute = function(domoticz, devices)
domoticz.data.VAL_EXT_CP.add(devices.lux)
MOYENNE = domoticz.data.VAL_EXT_CP.avg()
domoticz.variables('MOY_EXT_CP').set(MOYENNE)
end
}Je parviens à gérer la valeur instantanée de la CP mise à jour toutes les 30 secondes avec le code ci-dessous :
Code : Tout sélectionner
return {
on = {
devices = {
'RDC_CH1_ECL_GEN',
'RDC_CH1_DP'
},
timer = {},
variables = {},
scenes = {},
groups = {},
security = {},
httpResponses = {},
customEvents = {},
system = {},
},
data = {},
logging = {
level = domoticz.LOG_DEBUG,
marker = "RDC-CH1-Eclairage"
},
execute = function(domoticz, devices)
-- variables modifiables
local LUX_LIMIT = 50 -- niveau d'éclairement
local TEMPO = 90 -- temporisation détecteur de mouvement en secondes
local AJOUT_LUX = 150 -- estimation de l'apport de l'éclairage artificiel
-- variables programme
local LUX_ACTUAL = domoticz.devices('RDC_CH1_CP').lux -- Récupère la valeur de la CP
local DP = domoticz.devices('RDC_CH1_DP') -- définit l'abréviation DP
local LPE = domoticz.devices('RDC_CH1_ECL_GEN') -- définit l'abréviation LPE
-- programme
if domoticz.devices('RDC_CH1_ECL_GEN').lastUpdate.secondsAgo > 30 then
LAST_LUX = LUX_ACTUAL
else
LAST_LUX = LUX_ACTUAL - AJOUT_LUX
end
if LAST_LUX <= LUX_LIMIT then
if DP.state == 'On'and LPE.state == 'Off' then
-- on détecte un mouvement et la lampe est éteinte
LPE.switchOn().checkFirst()
elseif DP.state == 'On' and LPE.state == 'On' then
-- on détecte un nouveau mouvement et la lampe est allumée
LPE.switchOn().checkFirst()
end
end
if DP.state == 'Off' and LPE.state == 'On' then
-- plus de mouvement, et la lampe est allumée
LPE.switchOff().afterSec(TEMPO).checkFirst()
-- on éteint la lampe après la temporisation
end
end
}Donc ma question est :
comment utiliser la valeur moyenne de ma CP sans qu'elle reset mon script du DP ?
- via les global_data ?
- via un script séparé ?
- via une fonction ?
Merci d'avance de votre aide !