From b0a27fd834d3d715bef0947357fe908c3cad5ad7 Mon Sep 17 00:00:00 2001 From: Roman Bazalevskiy Date: Tue, 7 Aug 2018 10:55:42 +0300 Subject: [PATCH] =?utf8?q?=D0=9F=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=20?= =?utf8?q?=D0=BE=D1=82=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5=D0=BD=D0=B5=D0=BD?= =?utf8?q?=D0=B8=D1=8F=20hcidump=20=D0=BA=20=D0=BF=D1=80=D0=B8=D0=BC=D0=B5?= =?utf8?q?=D0=BD=D0=B5=D0=BD=D0=B8=D1=8E=20btmon,=20=D1=87=D1=82=D0=BE=20?= =?utf8?q?=D0=BF=D0=BE=D0=B7=D0=B2=D0=BE=D0=BB=D0=B8=D0=BB=D0=BE=20=D0=B8?= =?utf8?q?=D1=81=D0=BF=D0=BE=D0=BB=D1=8C=D0=B7=D0=BE=D0=B2=D0=B0=D1=82?= =?utf8?q?=D1=8C=20=D1=88=D1=82=D0=B0=D1=82=D0=BD=D1=8B=D0=B5=20=D0=BC?= =?utf8?q?=D0=B5=D1=85=D0=B0=D0=BD=D0=B8=D0=B7=D0=BC=D1=8B=20=D1=80=D0=B0?= =?utf8?q?=D1=81=D1=88=D0=B8=D1=84=D1=80=D0=BE=D0=B2=D0=BA=D0=B8=20BLE-?= =?utf8?q?=D1=81=D0=BE=D0=BE=D0=B1=D1=89=D0=B5=D0=BD=D0=B8=D0=B9=20=D0=B2?= =?utf8?q?=D0=BC=D0=B5=D1=81=D1=82=D0=BE=20=D1=81=D0=B0=D0=BC=D0=BE=D0=BF?= =?utf8?q?=D0=B0=D0=BB=D1=8C=D0=BD=D1=8B=D1=85.?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- mqtt-bt/scan-beacons | 197 ++++++++++++++++++------------------------- 1 file changed, 83 insertions(+), 114 deletions(-) diff --git a/mqtt-bt/scan-beacons b/mqtt-bt/scan-beacons index f91e59c..4f2a01c 100644 --- a/mqtt-bt/scan-beacons +++ b/mqtt-bt/scan-beacons @@ -1,5 +1,7 @@ #!/usr/bin/lua +json = require("json") + function getConfig(configname) local uci=require("uci") @@ -59,7 +61,7 @@ function mqtt_encode(str) end function printLog(str) - if logging=="on" then + if logging=="yes" then capture("logger -t beaconmon "..str) else print(str) @@ -76,9 +78,9 @@ end function open_dump() - run_command("/bin/kill `/usr/bin/pgrep hcidump`") + run_command("/bin/kill `/usr/bin/pgrep btmon`") run_command("/bin/kill `/usr/bin/pgrep hcitool`") - f = assert(io.popen ("/usr/bin/hcidump --raw")) + f = assert(io.popen ("/usr/bin/stdbuf -o0 /usr/bin/btmon")) run_command("/usr/bin/hciconfig hci0 down") run_command("/usr/bin/hciconfig hci0 up") f_null = assert(io.popen ("/usr/bin/hcitool lescan --duplicates --passive")) @@ -88,17 +90,7 @@ function open_dump() 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 + return json.encode(o) end function trim(s) @@ -113,129 +105,106 @@ end function process_packet(packet) - local bytes={} - local idx=1 - local len local mac - local flags - local power - local tx - local type - local paysublen local uuid - local major - local minor local details + local type + local name + + mac = packet['Address'] + uuid = packet['uuid'] + type = packet['Type'] + name = packet['Name (complete)'] + + if type=='iBeacon' then + details=uuid + elseif name then + type="name" + details=name + else + type='unknown' + details=mac + end - 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] - local j = 15 - tx=tonumber("0x"..bytes[len])-256 - while j" then - line = trim(line:sub(2)) - end + if str then - if not (lchr == " ") then - process_packet(packet) - packet = "" - end + str=trim(str) - llen=line:len() + if inbound then + t = split(str,':') + if #t>=2 then + name=t[1] + value=trim(table.concat(t,':',2)) + if name=="Address" then + value=split(value)[1] + end + packet[name]=value + end + end - if llen<59 then - packet = packet .. " " .. line - process_packet(packet) - packet="" - else - packet = packet .. " " .. line - end + if starts(str,'> HCI Event: LE Meta Event (0x3e)') then + inbound=true + elseif starts(str,'RSSI:') then + inbound=false + process_packet(packet) + packet={} + end + + end end end +io.stdout:setvbuf('no') +io.stdin:setvbuf('no') + getConfig(arg[1]) if mqtt_host then -- 2.34.1