Bonjour,
A priori, la forme du script semble peu commune. Pour que ça fonctionne, on peut s'appuyer sur l'exemple classique de type "Device", qu'on obtient par "Configuration" > "Plus d'options" > "Evenements", puis en cliquant sur le "+", et spécifiant "LUA" > "Device".
On doit récupérer ça :
Code : Tout sélectionner
--
-- Domoticz passes information to scripts through a number of global tables
--
-- device changed contains state and svalues for the device that changed.
-- devicechanged['yourdevicename'] = state
-- devicechanged['svalues'] = svalues string
--
-- otherdevices, otherdevices_lastupdate and otherdevices_svalues are arrays for all devices:
-- otherdevices['yourotherdevicename'] = "On"
-- otherdevices_lastupdate['yourotherdevicename'] = "2015-12-27 14:26:40"
-- otherdevices_svalues['yourotherthermometer'] = string of svalues
--
-- uservariables and uservariables_lastupdate are arrays for all user variables:
-- uservariables['yourvariablename'] = 'Test Value'
-- uservariables_lastupdate['yourvariablename'] = '2015-12-27 11:19:22'
--
-- other useful details are contained in the timeofday table
-- timeofday['Nighttime'] = true or false
-- timeofday['SunriseInMinutes'] = number
-- timeofday['Daytime'] = true or false
-- timeofday['SunsetInMinutes'] = number
-- globalvariables['Security'] = 'Disarmed', 'Armed Home' or 'Armed Away'
--
-- To see examples of commands see: http://www.domoticz.com/wiki/LUA_commands#General
-- To get a list of available values see: http://www.domoticz.com/wiki/LUA_commands#Function_to_dump_all_variables_supplied_to_the_script
--
-- Based on your logic, fill the commandArray with device commands. Device name is case sensitive.
--
commandArray = {}
-- loop through all the changed devices
for deviceName,deviceValue in pairs(devicechanged) do
print ("Device based event fired on '"..deviceName.."', value '"..tostring(deviceValue).."'");
-- if (deviceName=='myDevice') then
-- if deviceValue == "On" then
-- print("Device is On")
-- elseif deviceValue == "Off" then
-- commandArray['a device name'] = "On"
-- commandArray['another device name'] = "Off AFTER 10"
-- commandArray['Scene:MyScene'] = "Off"
-- commandArray['Group:My Group'] = "Off AFTER 30"
-- end
-- end
end
return commandArray
En s'inspirant de cet exemple, et de ton code, on peut écrire :
Code : Tout sélectionner
commandArray = {}
-- loop through all the changed devices
for deviceName,deviceValue in pairs(devicechanged) do
if (deviceName=='WC') then
if deviceValue == "On" then
print('porte WC ouverte. Activation de la VMC.')
commandArray['porte_wc'] = 'On FOR 8'
commandArray['vmc_pv'] = 'On FOR 8'
end
end
if (deviceName=='hr_cuisine' or deviceName=='hr_sdb' or deviceName=='porte_wc') then
local hr_sdb_humidity = otherdevices_humidity['hr_sdb'] or ''
local hr_cuisine_humidity = otherdevices_humidity['hr_cuisine'] or ''
local porte_wc = otherdevices['porte_wc'] or ''
if hr_sdb_humidity > 80 or hr_cuisine_humidity > 80 then
print('Humidité très élevée. Désactivation de la vmc_pv et activation de la vmc_gv.')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'On'
elseif hr_sdb_humidity > 63 or hr_cuisine_humidity > 63 then
print('Humidité élevée. Activation de la VMC_pv.')
commandArray['vmc_gv'] = 'Off'
commandArray['vmc_pv'] = 'On'
elseif hr_sdb_humidity < 60 and hr_cuisine_humidity < 60 and porte_wc =='Off' then
print('Conditions normales. Désactivation de la VMC_pv et de la vmc_gv')
commandArray['vmc_pv'] = 'Off'
commandArray['vmc_gv'] = 'Off'
end
end
end
return commandArray
Quels sont les changements ?
1) on ne fait les tests que lors d'un changement des éléments intéressants (la porte des WC, les 2 humidités et le timer sur la porte des WC), au lieu de tous les changements de tous les éléments,
2) l'ordre des commandes des vitesses est systématiquement "off" puis "on", pour éviter d'avoir 2 "on" en même temps (par exemple au passage sous les 80%, où pv et gv seraient actifs en même temps)
3) l'ordre de test des humidités et les elseif évitent des cliquetis permanents des relais pv et gv, notamment lorsque l'humidité est > 80, le code actuel passant systématiquement en PV (>63) puis en GV (>80).