201 001 läst · 1 109 svar
201k läst
1,1k svar
Fibaro Home Center 2
so far so good, det hoppade igång nu vid 17:40Nyfniken skrev:Här är kvälls scriptet:
Jag inser att jag har skrivit scripten lite olika. Det har ju att göra med problematiken som uppstår då man vill ha släcktiden på kvällen efter midnatt. Tittar man på mitt morgon-script så ser man att lamporna släcks oavsett hur de har tänts.
I kvälls-scriptet så släcks bara lamporna om scriptet kommit in i tänd-loopen först. I praktiken spelar det bara roll om HC2 startas om efter tänd-tid, men före släck-tid och lamporna dessutom tänds manuellt innan släck-tid.
~= betyder "inte lika med"
Får jag föreslå en två delad lösning: En som sätter tiden för dagen i en global variabel, TOD (Time Of Day), och tilldela den "morgon", "dag", "kväll" och "natt" eller något liknande. Sedan en scen som triggar på den globala variabeln. Det kommer garanterat fungera...!
Näpp. Kollade igenom koden och hittade problemet:OpiMaza skrev:
I koden nedan uppdateras inte aktuell tid (time). Så testet blir aldrig sant.
Koden ovan ska bytas ut mot den här:
Hehe, det märks att man är ringrostig.
Kan ju lika gärna skrivas:
Min 3kW puck från Fibaro återtog sin normala konstruktion (se bilden i ett inlägg ovan) efter en forcerad omkomfiguration. Nu återstår bara att klura ut varför mina Everspring SP814 rörelse sensorer ibland inte uppfattas av HC2 - dvs HC2an missar rörelshändelser, vilket inte är speciellt bra....!
Idag blev min dotter sakta väkt av väckarklockan klockan 06:00. Jag hade missat att veckodagar numreras 0-6, söndag till lördag i stället för 1-7 måndag till söndag. Va någon anledning så har den övriga familjen väldigt låg toleranströskel för barnsjukdomar i automatiken.
Nedan kommer scripten.
Nedan kommer scripten.
--[[
%% properties
%% autostart
%% globals
--]]
local device = 8;
local startTime = "06:00";
local dimDurationMinutes = "20";
local startLevel = 0;
local endLevel = 100;
local now;
local time;
local level = startLevel;
local step = (endLevel - startLevel) / math.abs(endLevel - startLevel);
local stepTimeMs = math.floor(1000 * 60 * dimDurationMinutes / math.abs(endLevel - startLevel));
startTime = string.sub(startTime,1,2) * 60 + string.sub(startTime,4,5)
while true do
now = os.date("*t");
time = tonumber(string.format("%02d", now.hour) * 60 + string.format("%02d", now.min));
if ((startTime == time) and (now.wday >= 1) and (now.wday <= 5)) then
level = startLevel;
fibaro:call(device, "setValue", level);
fibaro:sleep(stepTimeMs);
repeat
level = level + step;
fibaro:call(device, "setValue", level);
fibaro:sleep(stepTimeMs);
until (level == endLevel)
fibaro:sleep(80*60*1000)
fibaro:call(device, "turnOff");
end
fibaro:sleep(55*1000);
end
%% properties
%% autostart
%% globals
--]]
local device = 8;
local startTime = "06:00";
local dimDurationMinutes = "20";
local startLevel = 0;
local endLevel = 100;
local now;
local time;
local level = startLevel;
local step = (endLevel - startLevel) / math.abs(endLevel - startLevel);
local stepTimeMs = math.floor(1000 * 60 * dimDurationMinutes / math.abs(endLevel - startLevel));
startTime = string.sub(startTime,1,2) * 60 + string.sub(startTime,4,5)
while true do
now = os.date("*t");
time = tonumber(string.format("%02d", now.hour) * 60 + string.format("%02d", now.min));
if ((startTime == time) and (now.wday >= 1) and (now.wday <= 5)) then
level = startLevel;
fibaro:call(device, "setValue", level);
fibaro:sleep(stepTimeMs);
repeat
level = level + step;
fibaro:call(device, "setValue", level);
fibaro:sleep(stepTimeMs);
until (level == endLevel)
fibaro:sleep(80*60*1000)
fibaro:call(device, "turnOff");
end
fibaro:sleep(55*1000);
end