200 998 läst · 1 109 svar
201k läst
1,1k svar
Fibaro Home Center 2
Jag undrar om man kan deklarera flera enheter under samma variabel?
Exemplet ovan: local device = 4;
Kan man typ göra såhär: local device = 4, 5, 6; ?
Vill alltså kunna styra flera devices men gärna använda en variabel för att på ett enkelt sätt kunna lägga till fler devices i framtiden.
Exemplet ovan: local device = 4;
Kan man typ göra såhär: local device = 4, 5, 6; ?
Vill alltså kunna styra flera devices men gärna använda en variabel för att på ett enkelt sätt kunna lägga till fler devices i framtiden.
Tanken är rätt, men det är inte riktigt så enkelt. Du måste deklarera en vektor (om LUA har stöd för det) och sen stega dig igenom vektorn när du tänder/släcker.iSnobben skrev:
EDIT: Börja läs här:
http://www.lua.org/pil/11.1.html
http://www.lua.org/pil/2.5.html
Redigerat:
Jag hittar inte alla kodsnuttar jag behöver, men principen är denna:
lagra listan såhär: devices = {2, 5, 44, 67}
Sen när du ska släcka/tända så får du kolla hur lång listan är (hur många devices) och sen loopa igenom den. Förmodligen börjar listan med devices[0] eller devices[1] osv.
lagra listan såhär: devices = {2, 5, 44, 67}
Sen när du ska släcka/tända så får du kolla hur lång listan är (hur många devices) och sen loopa igenom den. Förmodligen börjar listan med devices[0] eller devices[1] osv.
Tack för dina svar, tyvärr är jag inte så vass på det här med programmering 😃 Med andra ord så förstod jag inte riktigt vad du menade.Nyfniken skrev:
En tanke som slog mig kan en virtuell enhet lösa det istället? Tänker mig en enhet med två knappar en som tänder och en som släcker de enheter jag vill kontrollera?
Har jag fattat rätt? Behöver jag förresten fortfarande deklarera
local device?
--[[
%% properties
%% autostart
%% globals
--]]
-- Deklarera variabler
local lightsOnWeekday = "06:30";
local lightsOnWeekend = "06:30";
local sunriseOffset = 60;
local lightsOn;
local lightsOut = "00:00";
local devices = {4, 5, 32, 33, 34}
local now = os.date("*t");
-- Räkna om tändtiden till antal minuter sedan midnatt
lightsOnWeekday = string.sub(lightsOnWeekday,1,2) * 60 + string.sub(lightsOnWeekday,4,5)
lightsOnWeekend = string.sub(lightsOnWeekend,1,2) * 60 + string.sub(lightsOnWeekend,4,5)
while true do
-- Hämta aktuell tid
now = os.date("*t");
-- Räkna om aktuell tid till antal minuter sedan midnatt
time = string.format("%02d", now.hour) * 60 + string.format("%02d", now.min);
-- Avgör om det är vardag eller helg och sätt tändtiden därefter
if ((now.wday == 6) or (now.wday == 1)) then
lightsOn = lightsOnWeekend;
else
lightsOn = lightsOnWeekday;
end
-- Hämta tid för soluppgången
lightsOut = fibaro:getValue(1, "sunriseHour");
-- Räkna om tiden för soluppgång tillantalet minuter sedan midnatt och lägg till offset
lightsOut = string.sub(lightsOut,1,2) * 60 + string.sub(lightsOut,4,5) + sunriseOffset
-- Tänd lampan om det är tänd-tid samt att tändtid inte är efter släck-tid
if ((lightsOn <= lightsOut) and (time == lightsOn)) then
for i,device in pairs(devices) do
fibaro:call(device, "turnOn");
end
-- Släck lampan släck-tid, oavsett hur lampan tändes
if (time == lightsOut) then
for i,device in pairs(devices) do
fibaro:call(device, "turnOff");
end
-- Sov 55 sekunder
fibaro:sleep(55*1000);
end
local device?
--[[
%% properties
%% autostart
%% globals
--]]
-- Deklarera variabler
local lightsOnWeekday = "06:30";
local lightsOnWeekend = "06:30";
local sunriseOffset = 60;
local lightsOn;
local lightsOut = "00:00";
local devices = {4, 5, 32, 33, 34}
local now = os.date("*t");
-- Räkna om tändtiden till antal minuter sedan midnatt
lightsOnWeekday = string.sub(lightsOnWeekday,1,2) * 60 + string.sub(lightsOnWeekday,4,5)
lightsOnWeekend = string.sub(lightsOnWeekend,1,2) * 60 + string.sub(lightsOnWeekend,4,5)
while true do
-- Hämta aktuell tid
now = os.date("*t");
-- Räkna om aktuell tid till antal minuter sedan midnatt
time = string.format("%02d", now.hour) * 60 + string.format("%02d", now.min);
-- Avgör om det är vardag eller helg och sätt tändtiden därefter
if ((now.wday == 6) or (now.wday == 1)) then
lightsOn = lightsOnWeekend;
else
lightsOn = lightsOnWeekday;
end
-- Hämta tid för soluppgången
lightsOut = fibaro:getValue(1, "sunriseHour");
-- Räkna om tiden för soluppgång tillantalet minuter sedan midnatt och lägg till offset
lightsOut = string.sub(lightsOut,1,2) * 60 + string.sub(lightsOut,4,5) + sunriseOffset
-- Tänd lampan om det är tänd-tid samt att tändtid inte är efter släck-tid
if ((lightsOn <= lightsOut) and (time == lightsOn)) then
for i,device in pairs(devices) do
fibaro:call(device, "turnOn");
end
-- Släck lampan släck-tid, oavsett hur lampan tändes
if (time == lightsOut) then
for i,device in pairs(devices) do
fibaro:call(device, "turnOff");
end
-- Sov 55 sekunder
fibaro:sleep(55*1000);
end
Redigerat:
Förmodligen är det väl jag som har gjort fel men det släcktes inte som det skulle nu ikväll. Bifogar även kvällscenen.
--[[
%% properties
%% autostart
%% globals
--]]
local device;
local devices = {4, 5, 32, 33, 34}
local lightsOutWeekday = "00:00";
local lightsOutWeekend = "01:00";
local sunsetOffset = -60;
local lightsOn;
local lightsOut;
local now = os.date("*t");
lightsOutWeekday = string.sub(lightsOutWeekday,1,2) * 60 + string.sub(lightsOutWeekday,4,5)
lightsOutWeekend = string.sub(lightsOutWeekend,1,2) * 60 + string.sub(lightsOutWeekend,4,5)
while true do
now = os.date("*t");
time = string.format("%02d", now.hour) * 60 + string.format("%02d", now.min);
lightsOn = fibaro:getValue(1, "sunsetHour");
lightsOn = string.sub(lightsOn,1,2) * 60 + string.sub(lightsOn,4,5);
lightsOn = lightsOn + sunsetOffset;
if (now.wday <= 5) then
lightsOut = lightsOutWeekday;
else
lightsOut = lightsOutWeekend;
end
if (((lightsOut < 720) or (lightsOn < lightsOut)) and (time == lightsOn)) then
for i,device in pairs(devices) do
fibaro:call(device, "turnOn");
while (time ~= lightsOut) do
now = os.date("*t");
time = string.format("%02d", now.hour) * 60 + string.format("%02d", now.min);
fibaro:sleep(55*1000);
end
for i,device in pairs(devices) do
fibaro:call(device, "turnOff");
end
fibaro:sleep(55*1000);
end
--[[
%% properties
%% autostart
%% globals
--]]
local device;
local devices = {4, 5, 32, 33, 34}
local lightsOutWeekday = "00:00";
local lightsOutWeekend = "01:00";
local sunsetOffset = -60;
local lightsOn;
local lightsOut;
local now = os.date("*t");
lightsOutWeekday = string.sub(lightsOutWeekday,1,2) * 60 + string.sub(lightsOutWeekday,4,5)
lightsOutWeekend = string.sub(lightsOutWeekend,1,2) * 60 + string.sub(lightsOutWeekend,4,5)
while true do
now = os.date("*t");
time = string.format("%02d", now.hour) * 60 + string.format("%02d", now.min);
lightsOn = fibaro:getValue(1, "sunsetHour");
lightsOn = string.sub(lightsOn,1,2) * 60 + string.sub(lightsOn,4,5);
lightsOn = lightsOn + sunsetOffset;
if (now.wday <= 5) then
lightsOut = lightsOutWeekday;
else
lightsOut = lightsOutWeekend;
end
if (((lightsOut < 720) or (lightsOn < lightsOut)) and (time == lightsOn)) then
for i,device in pairs(devices) do
fibaro:call(device, "turnOn");
while (time ~= lightsOut) do
now = os.date("*t");
time = string.format("%02d", now.hour) * 60 + string.format("%02d", now.min);
fibaro:sleep(55*1000);
end
for i,device in pairs(devices) do
fibaro:call(device, "turnOff");
end
fibaro:sleep(55*1000);
end
Nyfniken skrev:
Vill tillägga att det fungerande lysande i går kväll
Det ser ut som att det fattas ett "end" innan "while" här.iSnobben skrev:
Du ska inte deklarera device "separat". Det görs automagiskt i for-satsen (variablerna i och device) skapas alltså varje gång den stegar igenom arrayen.
Jag försökte formatera din While statement ovan för att se hur den loopar - men det verkar fattas kod på slutet eller så fattas det en END någonstans, eller snarare tre...iSnobben skrev:while true donow = os.date("*t");
time = string.format("%02d", now.hour) * 60 + string.format("%02d", now.min);
lightsOn = fibaro:getValue(1, "sunsetHour");
lightsOn = string.sub(lightsOn,1,2) * 60 + string.sub(lightsOn,4,5);
lightsOn = lightsOn + sunsetOffset;
if (now.wday <= 5) then
lightsOut = lightsOutWeekday;else
lightsOut = lightsOutWeekend;end
if (((lightsOut < 720) or (lightsOn < lightsOut)) and (time == lightsOn)) then
for i,device in pairs(devices) do
fibaro:call(device, "turnOn");
while (time ~= lightsOut) do
now = os.date("*t");
time = string.format("%02d", now.hour) * 60 + string.format("%02d", now.min);
fibaro:sleep(55*1000);end
for i,device in pairs(devices) do
fibaro:call(device, "turnOff");end
fibaro:sleep(55*1000);end
Edit: Verkar som om min formatering försvinner när jag postar...
Redigerat:
...iSnobben skrev:
if (((lightsOut < 720) or (lightsOn < lightsOut)) and (time == lightsOn)) then
for i,device in pairs(devices) do
fibaro:call(device, "turnOn");
end
while (time ~= lightsOut) do
...
Nu händer det saker på Fibaro forumet.
http://forum.fibaro.com/viewtopic.php?p=33792&sid=ef4bcef0be4817e2ef5470c436b9a29b#33792
http://forum.fibaro.com/viewtopic.php?p=33792&sid=ef4bcef0be4817e2ef5470c436b9a29b#33792