Page 7 sur 7

Re: Matériel Schneider Electric Wiser Smart

Publié : 04 déc. 2023, 10:51
par hairv
Salut à tous,

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 

Re: Matériel Schneider Electric Wiser Smart

Publié : 31 déc. 2023, 17:40
par Keros
Si le sujet est terminé, merci de bien vouloir modifier le premier message de cette discussion pour indiquer [Résolu] dans le titre du sujet. Comment faire ? Voir le sujet [A lire avant de poster] Guide pour bien formuler une demande.