From e06b837b3b3ec837665eb7c0539636c7b000664a Mon Sep 17 00:00:00 2001 From: Roman Bazalevskiy Date: Sun, 19 Mar 2017 22:53:22 +0300 Subject: [PATCH] BLE Beacon scan - initial support fro iBeacons --- mqtt-bt/scan-beacons | 121 +++++++++++++++++++++++++++++++++++++++---- 1 file changed, 110 insertions(+), 11 deletions(-) diff --git a/mqtt-bt/scan-beacons b/mqtt-bt/scan-beacons index 747c295..98c3993 100644 --- a/mqtt-bt/scan-beacons +++ b/mqtt-bt/scan-beacons @@ -1,5 +1,67 @@ #!/usr/bin/env lua +function getConfig(configname) + + local uci=require("uci") + local cur=uci.cursor() + local config + if configname then + config=configname + else + config="beacon" + end + + logging = cur.get(config,"logging","enabled") + + mqtt_host = cur.get(config,"mqtt","host") + mqtt_port = cur.get(config,"mqtt","port") + mqtt_id = cur.get(config,"mqtt","id") + mqtt_topic = cur.get(config,"mqtt","topic") + + mqtt_user = cur.get(config,"mqtt","user") + mqtt_passwd = cur.get(config,"mqtt","password") + + if mqtt_host and not mqtt_id then + mqtt_id="beaconmon" + end + + if mqtt_host and not mqtt_port then + mqtt_port = 1883 + end + + if mqtt_host and not mqtt_topic then + mqtt_topic = 'beaconmon/{type}/{details}' + end + +end + +function capture(cmd, raw) + local f = assert(io.popen(cmd, 'r')) + local s = assert(f:read('*a')) + f:close() + if raw then return s end + s = string.gsub(s, '^%s+', '') + s = string.gsub(s, '%s+$', '') + s = string.gsub(s, '[\n\r]+', ' ') + return s +end + +function mqtt_encode(str) + if (str) then + str = string.gsub (str, "\n", "") + str = string.gsub (str, "/", "-") + end + return str +end + +function printLog(str) + if logging=="on" then + capture("logger -t beaconmon "..str) + else + print(str) + end +end + function run_command(cmd) local file = assert(io.popen(cmd, 'r')) @@ -40,8 +102,19 @@ end function process_packet(packet) - bytes={} - idx=1 + 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 if packet:len()>1 then @@ -59,17 +132,17 @@ function process_packet(packet) flags=bytes[14] power=tonumber("0x"..bytes[len-1])-256 tx=tonumber("0x"..bytes[len])-256 - j = 15 + local j = 15 while j