LUA math.random funkar inte

av mekis_9 » 20 nov 2017, 09:58

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?
mekis_9
Ny medlem
 
Inlägg: 7
Blev medlem: 20 apr 2016, 13:30
Ort: Ulricehamn

av sonnyboy » 20 nov 2017, 12:05

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.

Kod: Markera allt
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: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
Fibaro HomeCenter 2
Fw 4.151 Beta
BeyondMeasure 1.10
25 Enheter, 55 Scener tidigare, 8 nu med gea GEA
sonnyboy
Proffsmedlem
 
Inlägg: 562
Blev medlem: 26 sep 2013, 08:05
Ort: Västerås

av mekis_9 » 20 nov 2017, 12:43

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())



sonnyboy skrev: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.

Kod: Markera allt
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: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
mekis_9
Ny medlem
 
Inlägg: 7
Blev medlem: 20 apr 2016, 13:30
Ort: Ulricehamn

av pos » 21 nov 2017, 00:02

mekis_9 skrev: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....

Kod: Markera allt
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)


Vill du ha ett 4-ställigt random tal i din DATA-variabel kan du istället ropa på random(4) Sen kan du köra concat på flera random(1). Samtidigt kan du välja i funktionen och byta ut (0,9). Varianterna är många. Finns 10 sätt till...


/peo
pos
Medlem
 
Inlägg: 79
Blev medlem: 03 feb 2017, 02:20

Dustin

Återgå till Fibaro