Blame | Last modification | View Log | Download
-- local device id's, only used in this scriptlocal cDevAnyoneHome = 158local cDevThermostaat = 20 -- Thermostat devicelocal cVirtNefit = 143 -- virtual nefit program selectorlocal cVirtProgramma1 = 145 -- virtual Thermostat device for program 1local cVirtProgramma2 = 146 -- virtual Thermostat device for program 2local cVirtNefitTemp = 147local cVirtConstTemp = 144local cSetpointOff = 16.0 -- 10 degrees is heating off, keep house aboc]ve zerolocal cSetpointConst = 17.0-- domoticz user vaiablelocal 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 = -1local uVarWrite = falselocal 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-- endif (triggeredItem.isDevice and triggeredItem.id == cVirtNefit) thenuVarWrite = true -- Mark nefit program selection for savingend-- check if home is empty or someone is returningif (triggeredItem.isDevice and triggeredItem.id == cDevAnyoneHome) thendomoticz.log('Device ' .. triggeredItem.name .. ' has value: ' .. tostring(triggeredItem.active), domoticz.LOG_DEBUG)if (triggeredItem.active) then-- someone got home, restore thermostat program choiceiNefitLevel = domoticz.variables(uVarProgram).valuedomoticz.devices(cVirtNefit).switchSelector(iNefitLevel).silent()else-- nobody home, save our settingdomoticz.variables(uVarProgram).set(iNefitLevel)iNefitLevel = 0domoticz.devices(cVirtNefit).switchSelector(iNefitLevel).silent()enduVarWrite = false -- Do not save program selection--returnend-- One of the selection virtual devices changed, evaluate the choicesif (iNefitLevel == 0) thennewSetpoint = cSetpointOffelseif (iNefitLevel == 10) thennewSetpoint = cSetpointConstnewSetpoint = domoticz.devices(cVirtConstTemp).setPointelseif (iNefitLevel == 20) thennewSetpoint = domoticz.devices(cVirtProgramma1).setPointelseif (iNefitLevel == 30) thennewSetpoint = domoticz.devices(cVirtProgramma2).setPointendif (newSetpoint > -1) thendomoticz.log('New setpoint: ' .. tostring(newSetpoint) .. ', current setpoint thermostat: ' .. tostring(domoticz.devices(cVirtNefitTemp).temperature), domoticz.LOG_DEBUG)-- write new setpoint, and user indicationif (newSetpoint ~= domoticz.devices(cVirtNefitTemp).temperature) thendomoticz.devices(cVirtNefitTemp).updateTemperature(newSetpoint)domoticz.devices(cDevThermostaat).updateSetPoint(newSetpoint)-- update last set setpointdomoticz.variables(uVarLastSetpoint).set(newSetpoint)-- update user variable, saving program selectionif (uVarWrite) thendomoticz.variables(uVarProgram).set(domoticz.devices(cVirtNefit).level)enddomoticz.log(domoticz.devices(cDevThermostaat).name .. ' has now setpoint: ' .. tostring(newSetpoint), domoticz.LOG_DEBUG)else-- copy thermostat setting to setpoint indicatordomoticz.devices(cVirtNefitTemp).updateTemperature(domoticz.devices(cDevThermostaat).setPoint)endendend}