Post your best Lua script examples here

User avatar
By GeoNomad
#4676
Code: Select all-- choose the strongest open AP available and connect to it

-- tested with NodeMcu 0.9.2 build 20141212

ConnStatus = nil
function ConnStatus(n)

status = wifi.sta.status()
uart.write(0,' '..status)
local x = n+1
if (x < 50) and ( status < 5 ) then
   tmr.alarm(0,100,0,function() ConnStatus(x) end)
else
   if status == 5 then
   print('\nConnected as '..wifi.sta.getip())
   else
   print("\nConnection failed")
   end
end
end
   
best_ssid = nil
function best_ssid(ap_db)

local min = 100
for k,v in pairs(ap_db) do
    if tonumber(v) < min then
       min = tonumber(v)
       ssid = k
       end
    end
end

best = nil
function best(aplist)

ssid = nil
print("\nAvailable Open Access Points:\n")
for k,v in pairs(aplist) do print(k..' '..v) end

ap_db = nil
ap_db = {}
if nil ~= next(aplist) then
     
   for k,v in pairs(aplist) do
      if '0' == string.sub(v,1,1) then
         ap_db[k] = string.match(v, '-(%d+),')
         end
       end
     
   if nil ~= next(ap_db) then
      best_ssid(ap_db)
      end
   end
if nil ~= ssid then
   print("\nBest SSID: ".. ssid)
   wifi.sta.config(ssid,"")
   print("\nConnecting to "..ssid)
   ConnStatus(0)
else
   print("\nNo available open APs")
   end
end
   

wifi.setmode(wifi.STATION)
wifi.sta.getap(function(t) best(t)  end)



Being a total newb to this Lua thing, some feedback on my use of tables and substrings would be useful.

This would use less heap without the function definitions, but would be much less easily readable.