#!/usr/bin/env lua function run_command(cmd) local file = assert(io.popen(cmd, 'r')) local output = file:read('*all') file:close() end function open_dump() f = assert(io.popen ("hcidump --raw")) run_command("kill `pgrep hcitool`") run_command("hciconfig hci0 down") run_command("hciconfig hci0 up") f_null = assert(io.popen ("hcitool lescan --duplicates")) return f end function dump(o) if type(o) == 'table' then local s = '{ ' for k,v in pairs(o) do if type(k) ~= 'number' then k = '"'..k..'"' end -- s = s .. '['..k..'] = ' .. dump(v) .. ',' s = s .. dump(v) .. ',' end return s .. '} ' else return tostring(o) end end function trim(s) return (s:gsub("^%s*(.-)%s*$", "%1")) end function process_packet(packet) bytes={} idx=1 if packet:len()>1 then while packet:len()>2 do bytes[idx]=trim(packet:sub(1,3)) idx=idx+1 packet=packet:sub(4) end len = idx-1 if bytes[1]=='04' and bytes[2]=='3E' then -- BLE Beacon? type="" mac=bytes[13]..':'..bytes[12]..':'..bytes[11]..':'..bytes[10]..':'..bytes[9]..':'..bytes[8] flags=bytes[14] power=tonumber("0x"..bytes[len-1])-256 tx=tonumber("0x"..bytes[len])-256 j = 15 while j" then line = trim(line:sub(2)) end if not (lchr == " ") then process_packet(packet) packet = "" end llen=line:len() if llen<59 then packet = packet .. " " .. line process_packet(packet) packet="" else packet = packet .. " " .. line end end end inp = open_dump() read_loop()