I vårt kombinerade växthus/uterum har jag monterat en spjällmotor som skall öppna eller stänga takluckan beroende på rummets temperatur.
För att göra detta behöver jag jämföra den förra temperavläsningen kallad OldTemp med den nya kallad NewTemp.
Om NewTemp är högre än OldTemp skall takluckan öppnas lite mer eller stängas lite om NewTemp är lägre än OldTemp.
Det är mellanlagringen av OldTemp som jag går bet på.
Dessutom skall inte reläerna triggas om temperaturen är högre än 40 grader eller lägre än 20 grader.
Då förutsätts takluckan vara antingen helt öppen (>= 40) eller helt stängd (<= 20).
Nedanstående kod fungerar naturligtvis inte med "local OldTemp = NewTemp" som jag skrivit. Kommer bara inte på hur jag mellanlagrar OldTemp på rätt sätt. Har kollat i Bamsefars kurser men inte hittat (missat?) hur.
I kombination med spjällmotorn har jag också en 2-hastighetsfläkt som också styrs av temperaturen med ett Fibaro dubbelrelä. Men den koden var rena barnleken jämfört med spjällmotorkoden.
Så kan någon vänlig själ hjälpa mig på traven med lite tips?
----------------------------------------------------------------
Code: Select all
--[[
%% properties
57 value --Temperatursensor
%% globals
--]]
-- Temperaturstyrd spjällmotor.txt
if fibaro:countScenes() > 1 then fibaro:abort() end -- Förhindra dubbla scener
local Relay_Q1 = 76 -- EnhetsID för brytare Q1 (stäng spjäll)
local Relay_Q2 = 78 -- EnhetsID för brytare Q2 (Q1+Q2= öppna spjäll)
local Delay = 2 -- Kör spjällmotorn bara en liten stund
local MaxTemp = 40 -- Spjället helt öppet, trigga inte reläet över denna temperatur
local MinTemp = 20 -- Spjället helt stängt, trigga inte reläet under denna temperatur
local NewTemp = tonumber(fibaro:getValue(57, "value"))
local OldTemp = NewTemp
-- Om NewTemp är högre än OldTemp, öppna lite mer
if ( NewTemp > OldTemp ) then --Öppnar spjäll
fibaro:call(Relay_Q1, "turnOn")
fibaro:call(Relay_Q2, "turnOn")
fibaro:sleep(Delay*1000) --Spjällmotorn öppnar bara några sekunder
fibaro:call(Relay_Q1, "turnOff")
fibaro:call(Relay_Q2, "turnOff")
fibaro:debug("Spjället öppnade lite")
-- Om NewTemp är mindre än OldTem, stäng lite mer
elseif ( NewTemp < OldTemp ) then --Stänger spjäll
fibaro:call(Relay_Q1, "turnOn")
fibaro:call(Relay_Q2, "turnOff")
fibaro:sleep(Delay*1000) -- Spjällmotorn stänger bara några sekunder
fibaro:call(Relay_Q1, "turnOff")
fibaro:call(Relay_Q2, "turnOff")
fibaro:debug("Spjället stängde lite")
end
fibaro:debug("NewTemp = " .. NewTemp .." °C")
fibaro:debug("OldTemp = " .. OldTemp .." °C")
fibaro:sleep(60*1000) -- Vänta på en stabil temperatur