LUA math.random funkar inte

Post Reply
mekis_9
Ny medlem
Posts: 7
Joined: 20 Apr 2016, 13:30
Location: Ulricehamn

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?
sonnyboy
Proffsmedlem
Posts: 573
Joined: 26 Sep 2013, 08:05
Location: Västerås

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.

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: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
mekis_9
Ny medlem
Posts: 7
Joined: 20 Apr 2016, 13:30
Location: Ulricehamn

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 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.

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: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
pos
Medlem
Posts: 84
Joined: 03 Feb 2017, 02:20

21 Nov 2017, 00:02

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)
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
Post Reply