Hej
Kör HC2 med fw 4.140 och får inte funktionen math.random att lämna ifrån sig olika värden.
Vet inte om det är ett problem i just 4.140 då jag inte använt funktionen innan.
Jag testar med följande kod:
local i = 0
i = math.random(1000,2000);
fibaro:debug(i)
Där borde funktionen lämna ifrån sig ett slumpat värde mellan 1000-2000 men jag får alltid 1783.
Har jag fel syntax eller är det en bugg i 4.140.
Någon med annan fw som kan testa?
LUA math.random funkar inte
Det funkar som det ska , vi har haft denna fråga uppe förut och tror det var @Bamsefar eller @jompa68 som hittade detta då eller om det var han som hjälpte mig med detta?
Man måste blanda in en variabel till för att det ska fungera, i denna så är det tiden som ser till att det funkar.
Du kanske kan ta idéer från denna kod
Jag använder denna för att tända belysning slumpmässigt.
[DEBUG] 20:08:14: 1 DeviceID: 248
[DEBUG] 20:08:34: 2 DeviceID: 252
[DEBUG] 20:08:50: 3 DeviceID: 250
[DEBUG] 20:09:03: 4 DeviceID: 45
[DEBUG] 20:09:16: 5 DeviceID: 189
[DEBUG] 20:09:32: 6 DeviceID: 269
[DEBUG] 14:18:13: 1 DeviceID: 45
[DEBUG] 14:18:26: 2 DeviceID: 250
[DEBUG] 14:18:46: 3 DeviceID: 189
[DEBUG] 14:19:07: 4 DeviceID: 248
[DEBUG] 14:19:21: 5 DeviceID: 269
[DEBUG] 14:19:36: 6 DeviceID: 252
Man måste blanda in en variabel till för att det ska fungera, i denna så är det tiden som ser till att det funkar.
Du kanske kan ta idéer från denna kod
Jag använder denna för att tända belysning slumpmässigt.
Code: Select all
if (fibaro:countScenes() > 1) then fibaro:abort() end
local deviceIDs = { 248, 250, 252, 269, 45, 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)
end
[DEBUG] 20:08:34: 2 DeviceID: 252
[DEBUG] 20:08:50: 3 DeviceID: 250
[DEBUG] 20:09:03: 4 DeviceID: 45
[DEBUG] 20:09:16: 5 DeviceID: 189
[DEBUG] 20:09:32: 6 DeviceID: 269
[DEBUG] 14:18:13: 1 DeviceID: 45
[DEBUG] 14:18:26: 2 DeviceID: 250
[DEBUG] 14:18:46: 3 DeviceID: 189
[DEBUG] 14:19:07: 4 DeviceID: 248
[DEBUG] 14:19:21: 5 DeviceID: 269
[DEBUG] 14:19:36: 6 DeviceID: 252
Fibaro HomeCenter 2
Fw 4.600
BeyondMeasure 1.10
EventRunner
Fw 4.600
BeyondMeasure 1.10
EventRunner
Tack!
Nu är jag med på hur det hänger ihop.
Precis som i ditt exempel är tiden lämplig att använda, math.randomseed(os.time())
Nu är jag med på hur det hänger ihop.
Precis som i ditt exempel är tiden lämplig att använda, math.randomseed(os.time())
sonnyboy wrote:Det funkar som det ska , vi har haft denna fråga uppe förut och tror det var @Bamsefar eller @jompa68 som hittade detta då eller om det var han som hjälpte mig med detta?
Man måste blanda in en variabel till för att det ska fungera, i denna så är det tiden som ser till att det funkar.
Du kanske kan ta idéer från denna kod
Jag använder denna för att tända belysning slumpmässigt.
[DEBUG] 20:08:14: 1 DeviceID: 248Code: Select all
if (fibaro:countScenes() > 1) then fibaro:abort() end local deviceIDs = { 248, 250, 252, 269, 45, 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) end
[DEBUG] 20:08:34: 2 DeviceID: 252
[DEBUG] 20:08:50: 3 DeviceID: 250
[DEBUG] 20:09:03: 4 DeviceID: 45
[DEBUG] 20:09:16: 5 DeviceID: 189
[DEBUG] 20:09:32: 6 DeviceID: 269
[DEBUG] 14:18:13: 1 DeviceID: 45
[DEBUG] 14:18:26: 2 DeviceID: 250
[DEBUG] 14:18:46: 3 DeviceID: 189
[DEBUG] 14:19:07: 4 DeviceID: 248
[DEBUG] 14:19:21: 5 DeviceID: 269
[DEBUG] 14:19:36: 6 DeviceID: 252
mekis_9 wrote:Hej
Kör HC2 med fw 4.140 och får inte funktionen math.random att lämna ifrån sig olika värden.
Vet inte om det är ett problem i just 4.140 då jag inte använt funktionen innan.
Jag testar med följande kod:
local i = 0
i = math.random(1000,2000);
fibaro:debug(i)
Där borde funktionen lämna ifrån sig ett slumpat värde mellan 1000-2000 men jag får alltid 1783.
Har jag fel syntax eller är det en bugg i 4.140.
Någon med annan fw som kan testa?
Du kan göra så här....
Code: Select all
function random(nums)
local i,r;r="";
for i=1,nums do
r=r..tostring(math.random(0,9));
end;
return r;
end
DATA = random(3)
/peo