Subversion Repositories rld.domoticz

Rev

Blame | Last modification | View Log | Download

-- local device id's, only used in this script
local cDevAnyoneHome  = 158
local cDevThermostaat =  20 -- Thermostat device
local cVirtNefit      = 143 -- virtual nefit program selector
local cVirtProgramma1 = 145 -- virtual Thermostat device for program 1
local cVirtProgramma2 = 146 -- virtual Thermostat device for program 2
local cVirtNefitTemp  = 147
local cVirtConstTemp  = 144

local cSetpointOff    = 16.0  -- 10 degrees is heating off, keep house aboc]ve zero
local cSetpointConst  = 17.0

-- domoticz user vaiable
local uVarProgram      = "Nefit_Program"
local uVarLastSetpoint = "Nefit_Last_Setpoint"

return {
  on = {
    devices = { cDevAnyoneHome, cVirtNefit, 
                cVirtProgramma1, cVirtProgramma2, 
                cVirtConstTemp }
  },
    logging = {
      level = domoticz.LOG_ERROR,
    --level = domoticz.LOG_DEBUG + domoticz.LOG_INFO,
        marker = "Nefit-Programma"
    },

  execute = function(domoticz, triggeredItem)
      
      domoticz.log('Device ' .. triggeredItem.name .. ' was changed', domoticz.LOG_DEBUG)
        domoticz.log(domoticz.devices(cVirtNefit).name .. ' has value: ' .. tostring(domoticz.devices(cVirtNefit).level), domoticz.LOG_DEBUG)
        --domoticz.devices(cDevThermostaat).dump()

        local newSetpoint = -1
        local uVarWrite = false
        local iNefitLevel = domoticz.devices(cVirtNefit).level
        
        -- round nefit setpoint to value without decimals
        --if (triggeredItem.isDevice and triggeredItem.id == cDevThermostaat) then
          
            
        --     cDevThermostaat.updateSetPoint(tonumber(string.format("%.0f", domoticz.devices(cDevThermostaat).setPoint)))
        --     return  
        -- end
        
        if (triggeredItem.isDevice and triggeredItem.id == cVirtNefit) then
            
            uVarWrite = true -- Mark nefit program selection for saving
        end
        
        -- check if home is empty or someone is returning
        if (triggeredItem.isDevice and triggeredItem.id == cDevAnyoneHome) then
            
            domoticz.log('Device ' .. triggeredItem.name .. ' has value: ' .. tostring(triggeredItem.active), domoticz.LOG_DEBUG)
            
            if (triggeredItem.active) then
                
                -- someone got home, restore thermostat program choice
                iNefitLevel = domoticz.variables(uVarProgram).value
                domoticz.devices(cVirtNefit).switchSelector(iNefitLevel).silent()
            else
                
                -- nobody home, save our setting
                domoticz.variables(uVarProgram).set(iNefitLevel)
                iNefitLevel = 0
                domoticz.devices(cVirtNefit).switchSelector(iNefitLevel).silent()
            end
            
            uVarWrite = false -- Do not save program selection
            --return
        end
        
        -- One of the selection virtual devices changed, evaluate the choices
        if (iNefitLevel == 0) then
            
            newSetpoint = cSetpointOff
        elseif (iNefitLevel == 10) then   
        
            newSetpoint = cSetpointConst
            newSetpoint = domoticz.devices(cVirtConstTemp).setPoint
        elseif (iNefitLevel == 20) then   
        
            newSetpoint = domoticz.devices(cVirtProgramma1).setPoint
        elseif (iNefitLevel == 30) then   
        
            newSetpoint = domoticz.devices(cVirtProgramma2).setPoint
        end
        
        if (newSetpoint > -1) then

            domoticz.log('New setpoint: ' .. tostring(newSetpoint) .. ', current setpoint thermostat: ' .. tostring(domoticz.devices(cVirtNefitTemp).temperature), domoticz.LOG_DEBUG)
             
            -- write new setpoint, and user indication
            if (newSetpoint ~= domoticz.devices(cVirtNefitTemp).temperature) then
                
                domoticz.devices(cVirtNefitTemp).updateTemperature(newSetpoint)
                domoticz.devices(cDevThermostaat).updateSetPoint(newSetpoint)

                -- update last set setpoint
                domoticz.variables(uVarLastSetpoint).set(newSetpoint)
            
                -- update user variable, saving program selection
                if (uVarWrite) then
            
                    domoticz.variables(uVarProgram).set(domoticz.devices(cVirtNefit).level)
                end
                
                domoticz.log(domoticz.devices(cDevThermostaat).name .. ' has now setpoint: ' .. tostring(newSetpoint), domoticz.LOG_DEBUG)
            else
                
                -- copy thermostat setting to setpoint indicator
                domoticz.devices(cVirtNefitTemp).updateTemperature(domoticz.devices(cDevThermostaat).setPoint)
            end
        end
    end
}