jag har en liten kod som jag lånat här i från som der ut så här
fibaro:sleep(math.random(5000,12000));
fibaro:call(7, "turnOn");
fibaro:sleep(math.random(5000,12000));
fibaro:call(57, "turnOn");
fibaro:sleep(math.random(5000,12000));
fibaro:call(61, "turnOn");
men denna kod tänder ju alltid i samma ordning. Kan man få det så att de både slumpar tiden och tändnings ordningen ?
slumpa tändning
Tja det blir ju lite att sätta sig in i då kanske:
Code: Select all
local DeviceList = { 7, 57, 61 }
function fn_TableLength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
local NumberOfDevices = fn_TableLength(DeviceList)
for loop,Device in pairs(DeviceList) do
IndexOne = math.random(1,NumberOfDevices)
IndexTwo = math.random(1,NumberOfDevices)
Temp = DeviceList[IndexOne]
DeviceList[IndexOne] = DeviceList[IndexTwo]
DeviceList[IndexTwo] = Temp
end
for loop,Device in pairs(DeviceList) do
fibaro:sleep(math.random(5000,12000))
fibaro:call(Device, "turnOn")
end
Kör Home Assistant efter totalt nederlag för HomeSeer
Tänk om Lua kunde vara lika enkelt som Ms Access, då skull jag ha ett system som funkade exakt som jag ville
ja till 99, 9%iaf
Detta skulle ju vara ett perfekt komplimet till varibeln sun som jag använder som är en virtuell enhet
Nu blir det att försöka sig på detta med befintliga enheter.
Hur funkar det med?
fibaro:call(79, "pressButton", "1") då är det ju inte "turnOn"
Är det ok om jag hijackar din tråd i fortsättningen?
Det gäller ju samma önskemål
ja till 99, 9%iaf
Detta skulle ju vara ett perfekt komplimet till varibeln sun som jag använder som är en virtuell enhet
Nu blir det att försöka sig på detta med befintliga enheter.
Hur funkar det med?
fibaro:call(79, "pressButton", "1") då är det ju inte "turnOn"
Är det ok om jag hijackar din tråd i fortsättningen?
Det gäller ju samma önskemål
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
sonnyboy: Så vad du menar är att du har vanliga "lampor":
Och sedan via VD så styr du NEXA:
Och det du vill åstadkomma är en "loop" som gör detta oberoende av om det är en VD eller ett DeviceID?
Code: Select all
fibaro:call(value, "turnOn")
Code: Select all
fibaro:call(79, "pressButton", "1")
Kör Home Assistant efter totalt nederlag för HomeSeer
Det är helt korret uppfattatBamsefar wrote:Och det du vill åstadkomma är en "loop" som gör detta oberoende av om det är en VD eller ett DeviceID?
Har inte bytt ut all Nexa än och det kanske är tur det med tanke på alla problem som figurerar runt Fibaros enheter.
Nexan funkar Fortfarande väldigt bra, har bara 5 enheter kvar men snart är det jul och då ökar antalet till runt 10.
Men jag styr dom helt via hc:n Som skickar en stäng till Beyond Measure som ser till att duon tänder och släcker.
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Eftersom du behöver blanda olika typer av devices, så måste man då testa på vilken typ av device det är man just nu "jobbar" med, och det gör man t.ex. med:
Så i teorin borde följande snurra fungera:
Men jag har inte testat koden ovan - men i teorin
Edit: Skrev nog fel där - rättat tror jag...
Code: Select all
fibaro:getType(Device)
Code: Select all
--[[
%% properties
%% globals
--]]
local DeviceList = { 7, 57, 61 }
function fn_TableLength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
local NumberOfDevices = fn_TableLength(DeviceList)
for loop,Device in pairs(DeviceList) do
IndexOne = math.random(1,NumberOfDevices)
IndexTwo = math.random(1,NumberOfDevices)
Temp = DeviceList[IndexOne]
DeviceList[IndexOne] = DeviceList[IndexTwo]
DeviceList[IndexTwo] = Temp
end
for loop,Device in pairs(DeviceList) do
fibaro:sleep(math.random(5000,12000))
if fibaro:getType(Device) == "virtual_device" then
fibaro:call(Device, "pressButton", "1")
else
fibaro:call(Device, "turnOn")
end
end
Edit: Skrev nog fel där - rättat tror jag...
Kör Home Assistant efter totalt nederlag för HomeSeer
Har kört koden ovan nu i några dagar, blir lite fundersam om det funkar som det ska, jag tycker att samma lampa tänds först hela tiden, det är alltd den enhet som står först i local "DeviceList = { }"
Jag kör koden där virituella enheter är med.
Jag kör koden där virituella enheter är med.
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Något skumt är det för mig, kör denna lua och får alltid samma output i debuggen,
Visst är det slumpat på några enheter men inte alla, börjar alltid med enhet 38
[DEBUG] 21:04:19: Index: 1 DeviceID: 38
[DEBUG] 21:04:24: Index: 2 DeviceID: 45
[DEBUG] 21:04:31: Index: 3 DeviceID: 34
[DEBUG] 21:04:37: Index: 4 DeviceID: 79
[DEBUG] 21:04:47: Index: 5 DeviceID: 80
[DEBUG] 21:04:54: Index: 6 DeviceID: 189
[DEBUG] 21:05:01: Index: 7 DeviceID: 33
[DEBUG] 21:05:07: Index: 8 DeviceID: 119
[DEBUG] 21:05:13: Index: 9 DeviceID: 4
[DEBUG] 21:08:54: Index: 1 DeviceID: 38
[DEBUG] 21:08:59: Index: 2 DeviceID: 45
[DEBUG] 21:09:06: Index: 3 DeviceID: 34
[DEBUG] 21:09:12: Index: 4 DeviceID: 79
[DEBUG] 21:09:23: Index: 5 DeviceID: 80
[DEBUG] 21:09:29: Index: 6 DeviceID: 189
[DEBUG] 21:09:37: Index: 7 DeviceID: 33
[DEBUG] 21:09:43: Index: 8 DeviceID: 119
[DEBUG] 21:09:48: Index: 9 DeviceID: 4
Visst är det slumpat på några enheter men inte alla, börjar alltid med enhet 38
Code: Select all
--[[
%% properties
%% globals
--]]
if (fibaro:countScenes() > 1) then fibaro:abort() end;
local DeviceList = { 38, 4, 33, 45, 34, 79, 80, 119, 189 }
function fn_TableLength(T)
local count = 0
for _ in pairs(T) do count = count + 1 end
return count
end
local NumberOfDevices = fn_TableLength(DeviceList)
for loop,Device in pairs(DeviceList) do
fibaro:debug("Index: "..loop.." DeviceID: "..Device)--denns
IndexOne = math.random(1,NumberOfDevices)
IndexTwo = math.random(1,NumberOfDevices)
Temp = DeviceList[IndexOne]
DeviceList[IndexOne] = DeviceList[IndexTwo]
DeviceList[IndexTwo] = Temp
end
for loop,Device in pairs(DeviceList) do
fibaro:sleep(math.random(5000,12000))
if fibaro:getType(Device) == "virtual_device" then
fibaro:call(Device, "pressButton", "1")
else
fibaro:call(Device, "turnOn")
end
end
[DEBUG] 21:04:24: Index: 2 DeviceID: 45
[DEBUG] 21:04:31: Index: 3 DeviceID: 34
[DEBUG] 21:04:37: Index: 4 DeviceID: 79
[DEBUG] 21:04:47: Index: 5 DeviceID: 80
[DEBUG] 21:04:54: Index: 6 DeviceID: 189
[DEBUG] 21:05:01: Index: 7 DeviceID: 33
[DEBUG] 21:05:07: Index: 8 DeviceID: 119
[DEBUG] 21:05:13: Index: 9 DeviceID: 4
[DEBUG] 21:08:54: Index: 1 DeviceID: 38
[DEBUG] 21:08:59: Index: 2 DeviceID: 45
[DEBUG] 21:09:06: Index: 3 DeviceID: 34
[DEBUG] 21:09:12: Index: 4 DeviceID: 79
[DEBUG] 21:09:23: Index: 5 DeviceID: 80
[DEBUG] 21:09:29: Index: 6 DeviceID: 189
[DEBUG] 21:09:37: Index: 7 DeviceID: 33
[DEBUG] 21:09:43: Index: 8 DeviceID: 119
[DEBUG] 21:09:48: Index: 9 DeviceID: 4
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Hmm undrar om du lider av samma som jag hittade någon gång - det blev att jag ändrade lite i min uppstart av min HC2 och slumpade(!) fram ett antal slumptal så att man fick bättre spridning...
Bootar du om mellan ovanstående körningar förresten?
Bootar du om mellan ovanstående körningar förresten?
Kör Home Assistant efter totalt nederlag för HomeSeer
Samma efter omstart tyvärr.
[DEBUG] 21:08:54: Index: 1 DeviceID: 38 [DEBUG] 16:48:23: Index: 1 DeviceID: 38
[DEBUG] 21:08:59: Index: 2 DeviceID: 45 [DEBUG] 16:48:28: Index: 2 DeviceID: 45
[DEBUG] 21:09:06: Index: 3 DeviceID: 34 [DEBUG] 16:48:35: Index: 3 DeviceID: 34
[DEBUG] 21:09:12: Index: 4 DeviceID: 79 [DEBUG] 16:48:41: Index: 4 DeviceID: 79
[DEBUG] 21:09:23: Index: 5 DeviceID: 80 [DEBUG] 16:48:52: Index: 5 DeviceID: 80
[DEBUG] 21:09:29: Index: 6 DeviceID: 189 [DEBUG] 16:48:58: Index: 6 DeviceID: 189
[DEBUG] 21:09:37: Index: 7 DeviceID: 33 [DEBUG] 16:49:06: Index: 7 DeviceID: 33
[DEBUG] 21:09:43: Index: 8 DeviceID: 119 [DEBUG] 16:49:12: Index: 8 DeviceID: 119
[DEBUG] 21:09:48: Index: 9 DeviceID: 4 [DEBUG] 16:49:17: Index: 9 DeviceID: 4
[DEBUG] 21:08:54: Index: 1 DeviceID: 38 [DEBUG] 16:48:23: Index: 1 DeviceID: 38
[DEBUG] 21:08:59: Index: 2 DeviceID: 45 [DEBUG] 16:48:28: Index: 2 DeviceID: 45
[DEBUG] 21:09:06: Index: 3 DeviceID: 34 [DEBUG] 16:48:35: Index: 3 DeviceID: 34
[DEBUG] 21:09:12: Index: 4 DeviceID: 79 [DEBUG] 16:48:41: Index: 4 DeviceID: 79
[DEBUG] 21:09:23: Index: 5 DeviceID: 80 [DEBUG] 16:48:52: Index: 5 DeviceID: 80
[DEBUG] 21:09:29: Index: 6 DeviceID: 189 [DEBUG] 16:48:58: Index: 6 DeviceID: 189
[DEBUG] 21:09:37: Index: 7 DeviceID: 33 [DEBUG] 16:49:06: Index: 7 DeviceID: 33
[DEBUG] 21:09:43: Index: 8 DeviceID: 119 [DEBUG] 16:49:12: Index: 8 DeviceID: 119
[DEBUG] 21:09:48: Index: 9 DeviceID: 4 [DEBUG] 16:49:17: Index: 9 DeviceID: 4
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Det fick bli en annan variant som funkar men utan mina VD får helt enkelt köpa nya enheter.
Om någon är intresserad så kommer luan nedan.
Edit: Fick in en VD nexa, inte snyggt kanske men det funkar.
Edit2: Snyggade till koden lite
Om någon är intresserad så kommer luan nedan.
Edit: Fick in en VD nexa, inte snyggt kanske men det funkar.
Edit2: Snyggade till koden lite
Code: Select all
--[[
%% properties
%% globals
--]]
-- REFERENCE
-- zwaveforum.se, forum.fibaro.com
-- Thanks to Bamsefar, Daniel.Knight for good LUA functions code.
if (fibaro:countScenes() > 1) then fibaro:abort() end
local deviceIDs = { 38, 4, 33, 45, 34, 189 }
math.randomseed(os.time())
function randomOrder(table)
local new = {}
for j,x in pairs(table) do new[j] = x end
local res = {}
while (#new > #res) do
local index = math.random(1,#new)
if (new[index] > -1) then
res[#res+1] = new[index]
new[index] = -1
end
end
return res
end
for Device,device in pairs(randomOrder(deviceIDs)) do
fibaro:call(device, "turnOn")
fibaro:debug( Device .. " DeviceID: "..device)
fibaro:sleep(math.random(5000,12000))
-- fibaro:call(119, "pressButton", "1")--Endast för VD
end
Last edited by sonnyboy on 11 May 2015, 21:35, edited 2 times in total.
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Såhär är det, efter lite tester:
math.random har samma slumptalsfrö VARJE gång en VD anropas - men det har INTE en scen.
Dvs om man använder math.random i en VD så ger den ALLTID samma värde, för VARJE anrop.
Men i en Scen fungerar det som det är tänkt...
Kul...
math.random har samma slumptalsfrö VARJE gång en VD anropas - men det har INTE en scen.
Dvs om man använder math.random i en VD så ger den ALLTID samma värde, för VARJE anrop.
Men i en Scen fungerar det som det är tänkt...
Kul...
Kör Home Assistant efter totalt nederlag för HomeSeer