Nu blev jag ju tvungen att kolla på detta och nu är scenen löst så att man kan ställa in eftergångstiden i en local variabel i scenen. Jag har satt den till 15 minuter. Dock så har jag bestämt mig för att radera raden i den virtuella enheten där jag tänkte skriva ut sista avresetiden.iSnobben wrote:Tanken har varit att lägga till en viss eftergångstid på värmaren för som det fungerar just nu så stängs ju värmaren av exakt på avresetiden och riktigt så punktlig är jag tyvärr inte alltid. Tyvärr fungerade inte det utgråade när jag testade och jag har inte hunnit kolla på det igen. Borde kanske ha tagit bort den delen innan jag postade här men den påverkar ju inte negativt heller så...Borgstrand wrote:Hej iSnobben,
Bra uppdatering, lite nyfiken på hur du tänkte använda de delar som för tillfället är "utgråat" i din kod.
Tänker på raderna:
--local lastDeparture=departureTime + (15 * 60);
--fibaro:setGlobal("lastDepartureTime", lastDeparture);
lastDepartureTime är ju med som en Global variabel men ser inte att du använder den aktivt i din kod.
Code: Select all
--[[
%% autostart
%% properties
%% globals
--]]
-- Create the following Global Variables
-- heaterOverride
-- departureHour
-- departureMinute
-- diffStart
-- manualOverride
-- lastDepartureTime
-- heaterStatus
if (fibaro:countScenes() > 1) then fibaro:abort() end
while true do
local relayId = 195; -- change to your relay ID
local tempID = 219; -- change to your Temperature ID
-- local tempID = 3; -- Fibaro Yahoo Weather ID, change from "value" to "Temperature" on line 26
local turnOffDelay = 15 --time in minutes the heater will stay on after the set departure time.
local manualOverride = tonumber(fibaro:getGlobalValue("heaterOverride"));
local heaterStatus = tonumber(fibaro:getGlobalValue("heaterStatus"));
local outTemp = tonumber(fibaro:getValue(tempID, "value"));
local heaterState = tonumber(fibaro:getValue(relayId, "value"));
local startHour = tonumber(fibaro:getGlobalValue("departureHour"));
local startMinute = tonumber(fibaro:getGlobalValue("departureMinute"));
local diff = 0;
diff = math.floor(60 + 100*outTemp/(outTemp - 35))
if outTemp > 13 then
diff = 0;
end
fibaro:setGlobal("diffStart", diff)
local theDate = os.date("*t");
local currentTime=tonumber(os.time());
local departureTime=tonumber(os.time({year=theDate.year, month=theDate.month, day=theDate.day, hour=startHour, min=startMinute}));
local lastDeparture=departureTime + (turnOffDelay * 60);
fibaro:setGlobal("lastDepartureTime", lastDeparture);
local startTime=tonumber(departureTime-diff*60);
fibaro:debug("heaterState: " .. heaterState);
fibaro:debug("currentTime: " .. currentTime);
fibaro:debug("departureTime: " .. departureTime);
fibaro:debug("manualOverride: " .. manualOverride);
fibaro:debug("heaterStatus: " .. heaterStatus);
fibaro:debug("lastDeparture: " .. lastDeparture);
fibaro:debug("-------------------------------------");
-- Don't start the timer if it's too warm outside
-- (or if its already started)
if (outTemp < 10) and (heaterState == 0) and (heaterStatus == 1) then
if (currentTime >= startTime) and (currentTime < departureTime) then
fibaro:call(relayId, "turnOn");
end
end
if (heaterState == 1) and (currentTime >= lastDeparture) and (manualOverride == 0) then
fibaro:call(relayId, "turnOff");
end
if (heaterState == 1) and (heaterStatus == 0) then
fibaro:call(relayId, "turnOff");
end
fibaro:sleep(60*1000);
end