suite à des vapeurs de ma croix blanche je viens de repasser mon matériel Schneider Wiser sur une Zigate V2 et la toute dernière version de domoticz (ma V1 refusait tout appairage ...).
Pour tenter d'apporter quelques réponses à YvanM (sachant que mes radiateurs sont en fil pilote sauf 1 qui est branché sur une prise commandée) :
- oui je pense que le HACT laisse passer un peu de jus (le smartMeter me remonte une conso de 2/3W quand ils sont sur off, peut-être pour l'affichage du radiateur, peut-être sa propre conso).
Pour ma part j'utilise un script fait maison pour gérer mes radiateurs :
- en switchant de Confort à Off pour les fils pilote,
- en allumant/éteignant le switch.
Pour info j'ai créé un widget "Consigne" pour avoir différents modes globaux (AWAY, NO_FROST, OFF, AUTO).
Ca fonctionne très bien !
Mes "règles de nommage" :
- Temp Nom : la température du Thermostat
SetPoint Nom : la consigne du thermostat
FIP Nom : la consigne du radiateur (CONFORT, OFF)
J'ai essayé de débarrasser mon script des fonctions non essentielles avant de le poster, j'espère qu'il reste opérationnel
Code : Tout sélectionner
HEATER_COMFORT="10"
HEATER_COMFORT_1="20"
HEATER_COMFORT_2="30"
HEATER_ECO="40"
HEATER_FROST_PROTECT="50"
HEATER_OFF="60"
VACATION_MODE_SCENE="Mode Vacances"
ABSENCE_MODE_SCENE="Mode Absence"
NOFROST_TEMPERATURE="10"
AWAY_TEMPERATURE="16"
MODE_OFF=0
MODE_AUTO=10
MODE_AWAY=20
MODE_NOFROST=30
local char_to_hex = function(c)
return string.format("%%%02X", string.byte(c))
end
local function urlencode(url)
if url == nil then
return
end
url = url:gsub("\n", "\r\n")
url = url:gsub("([^%w ])", char_to_hex)
url = url:gsub(" ", "+")
return url
end
----------------------------------------
-- updatenum
----------------------------------------
local function updatenum(dev, value1)
local cmd = string.format("%d|0|%d", otherdevices_idx[dev], value1)
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end
----------------------------------------
-- updatestring
----------------------------------------
local function updatestring(dev, value1)
-- print('updatestring: ' .. dev .. ' ' .. value1)
local cmd = string.format("%d|0|%s", otherdevices_idx[dev], value1)
table.insert (commandArray, { ['UpdateDevice'] = cmd } )
end
----------------------------------------
-- ParseData
----------------------------------------
function ParseData(nameWidget, TValues)
i=1
for TValue in string.gmatch(otherdevices_svalues[nameWidget],"([^;]+)") do
TValues[i] = TValue
i=i+1
end
end
function setOnOffPowerSocket(nameSwitch,namePowerSocket)
SwitchCmd=otherdevices_svalues[nameSwitch]
PowerState=otherdevices_svalues[namePowerSocket]
if (SwitchCmd == '10' or SwitchCmd == '30') then PowerState = 'On'
elseif (SwitchCmd == '00' or SwitchCmd == '40') then PowerState = 'Off'
elseif (SwitchCmd == '20')
then
if (PowerState == 'On') then PowerState = 'Off'
else PowerState = 'On'
end
end
table.insert (commandArray, { [namePowerSocket] = PowerState } )
end
function setOnPowerSocket(nameSwitch,namePowerSocket)
SwitchCmd=otherdevices_svalues[nameSwitch]
print("SwitchCmd: " .. SwitchCmd);
if (SwitchCmd == '10') then
table.insert (commandArray, { [namePowerSocket] = 'On' } )
end
end
function setOffPowerSocket(nameSwitch,namePowerSocket)
SwitchCmd=otherdevices_svalues[nameSwitch]
print("SwitchCmd: " .. SwitchCmd);
if (SwitchCmd == '10') then
table.insert (commandArray, { [namePowerSocket] = 'Off' } )
end
end
----------------------------------------
-- setOnOffHeater
----------------------------------------
function setOnOrOffHeater(nameTempThermostat,nameSetpointThermostat,nameSwitchHeater, noElement)
Consigne = tonumber(otherdevices_svalues['Consigne chauffage'])
if (Consigne == MODE_OFF)
then
HeaterState='Off'
else
if (Consigne == MODE_NOFROST)
then
required_temperature=NOFROST_TEMPERATURE
elseif (Consigne == MODE_AWAY)
then
required_temperature=AWAY_TEMPERATURE
else
required_temperature=tonumber(otherdevices_svalues[nameSetpointThermostat])
end
if (noElement > 0) -- Widget multi value, need to get the good one
then
Temp = {}
ParseData(nameTempThermostat, Temp)
currentTemp=tonumber(Temp[noElement])
else
currentTemp = tonumber(otherdevices_svalues[nameTempThermostat])
end
if (currentTemp < required_temperature - 0.2)
then
HeaterState='On'
else
HeaterState='Off'
end
end
table.insert (commandArray, { [nameSwitchHeater] = HeaterState } )
end
----------------------------------------
-- setOnOffHeater
----------------------------------------
function setConfOrOffHeater(nameTempThermostat,nameSetpointThermostat,nameSwitchHeater, noElement)
Consigne = tonumber(otherdevices_svalues['Consigne chauffage'])
if (Consigne == MODE_OFF)
then
HeaterState=HEATER_OFF
else
if (Consigne == MODE_NOFROST)
then
required_temperature=NOFROST_TEMPERATURE
elseif (Consigne == MODE_AWAY)
then
required_temperature=AWAY_TEMPERATURE
else
required_temperature=tonumber(otherdevices_svalues[nameSetpointThermostat])
end
if (noElement > 0) -- Widget multi value, need to get the good one
then
Temp = {}
ParseData(nameTempThermostat, Temp)
currentTemp=tonumber(Temp[noElement])
else
currentTemp = tonumber(otherdevices_svalues[nameTempThermostat])
end
if (currentTemp < required_temperature - 0.2)
then
HeaterState=HEATER_COMFORT
else
HeaterState=HEATER_OFF
end
end
table.insert (commandArray, { [nameSwitchHeater] = 'Set Level ' .. HeaterState } )
end
function setTempHeater(ThermostatName,HeaterName)
tempCurrentValue=otherdevices_svalues[ThermostatName]
updatestring(HeaterName, tempCurrentValue)
end
----------------------------------------
-- Main
----------------------------------------
commandArray = {}
----------------------------------------
-- GESTION DU CHAUFFAGE
if (devicechanged['SetPoint Cuisine'] or devicechanged['Temp Cuisine'] or devicechanged['Consigne chauffage'] ) then
setConfOrOffHeater("Temp Cuisine","SetPoint Cuisine","FIP Radiateur Cuisine",0)
end
if (devicechanged['SetPoint Salon'] or devicechanged['Temp Salon'] or devicechanged['Consigne chauffage']) then
setConfOrOffHeater("Temp Salon","SetPoint Salon","FIP Radiateur Salon Porte",0)
setConfOrOffHeater("Temp Salon","SetPoint Salon","FIP Radiateur Salon Fenetre",0)
end
if (devicechanged['SetPoint Grande Chambre'] or devicechanged['Temp Grande Chambre'] or devicechanged['Consigne chauffage']) then
setConfOrOffHeater("Temp Grande Chambre","SetPoint Grande Chambre","FIP Radiateur Grande Chambre",0)
end
if (devicechanged['Temp Chambre rue'] or devicechanged['SetPoint chambre rue'] or devicechanged['Consigne chauffage']) then
setOnOrOffHeater('Temp Chambre rue','SetPoint chambre rue','Switch chambre rue', 0)
end
return commandArray