Utilisation des capteurs virtuels en LUA
Publié : 07 oct. 2015, 11:27
Je tente d'adapter un script de gestion de chauffage trouvé ici même, afin d'insérer des valeur de consigne modifiable depuis Domoticz, je m'explique :
J'utilise actuellement le script suivant qui fonctionne parfaitement
Et je souhaiterais simplement ajouter des variables, ceci afin de définir dynamiquement mes valeurs de consignes "consigne_j" et "consigne_n" sans avoir a éditer mon script pour les modifier.
J'ai déclaré pour ça 2 capteurs virtuels :


modifier mon script comme ceci :
et voila ce que j'obtiens dans les logs :
D'avance merci !!
J'utilise actuellement le script suivant qui fonctionne parfaitement
Code : Tout sélectionner
-- Ce script permet de maintenir la température de la salle de bain entre 17°C et 18°C quand l'interrupteur
-- virtuel 'Thermostat jour' est activé et entre 18.5°C et 19.5°C quand l'interrupteur
-- virtuel 'Thermostat jour' est éteint.
--------------------------------
------ Variables à éditer ------
--------------------------------
local consigne_j = 19 --Température de consigne jour
local consigne_n = 17.5 --Température de consigne nuit
local hysteresis = 0.5 --Valeur seuil pour éviter que le relai ne cesse de commuter dans les 2 sens
local sonde = 'Salle de bain' --Nom de la sonde de température
local thermostat_j = 'Thermostat jour' --Nom de l'interrupteur virtuel du thermostat pour le jour
--local thermostat_n = 'Thermostat nuit' --Nom de l'interrupteur virtuel du thermostat pour la nuit
local radiateur = 'Radiateur Salle de bain' --Nom du radiateur à allumer/éteindre
local pas = 0.5 --increment de la temperaure du thermostat
local remote = 'telecommande temp'
-- Capteur Temperature thermostat virtuel - nom et id
--local tempthermo = 'Temp Thermostat'
--local idx = 45
--------------------------------
-- Fin des variables à éditer --
--------------------------------
commandArray = {}
--if (devicechanged[remote]) then
-- nowtemp = tonumber(otherdevices_svalues[tempthermo])
-- if (devicechanged[remote]=='On') then
-- commandArray['UpdateDevice'] = idx .. '|0|' .. tostring(nowtemp+pas)
-- elseif (devicechanged[remote]=='Off') then
-- commandArray['UpdateDevice'] = idx .. '|0|' .. (tostring(nowtemp-pas))
-- end
--end
--La sonde Oregon 'Salon' emet toutes les 40 secondes. Ce sera approximativement la fréquence
-- d'exécution de ce script.
if (devicechanged[sonde]) then
-- nowtemp = tonumber(otherdevices_svalues[tempthermo])
local temperature = devicechanged[string.format('%s_Temperature', sonde)] --Temperature relevée dans la salle de bain
--Action si le "Thermostat" est actif en mode confort
if (otherdevices[thermostat_j]=='On') then
print('-- Gestion du thermostat confort pour la salle de bain --')
if (temperature < (consigne_j - hysteresis) ) then
print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_j + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
end
--Action si le "Thermostat" est actif en mode absent
if (otherdevices[thermostat_j]=='Off') then
print('-- Gestion du thermostat absent pour la salle de bain --')
if (temperature < (consigne_n - hysteresis) ) then
print('Allumage du chauffage dans la salle de bain')
commandArray[radiateur]='Off'
elseif (temperature > (consigne_n + hysteresis)) then
print('Extinction du chauffage dans la salle de bain')
commandArray[radiateur]='On'
end
end
end
return commandArrayJ'ai déclaré pour ça 2 capteurs virtuels :


modifier mon script comme ceci :
Code : Tout sélectionner
local consigne_j = tonumber(otherdevices_svalues['Thermostat_Confort']) --Température de consigne jour
local consigne_n = tonumber(otherdevices_svalues['Thermostat_Nuit']) --Température de consigne nuitN'y connaissant pas grand chose, je sollicite votre aide pour comprendre ce qui ne va pasError: EventSystem: .../domoticz/scripts/lua/script_device_thermostat-SdB_2.lua:57: attempt to perform arithmetic on local 'consigne_n' (a nil value)
D'avance merci !!