#!/usr/bin/lua
json = require("json")
+socket = require("socket")
function getConfig(configname)
- local uci=require("uci")
- local cur=uci.cursor()
+ local status,uci = pcall(require,"uci")
+
local config
- if configname then
- config=configname
- else
- config="beacon"
- end
- logging = cur.get(config,"logging","enabled")
+ if status then
+
+ if configname then
+ config=configname
+ else
+ config="beacon"
+ end
+
+ local cur=uci.cursor()
+
+ 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")
- 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")
+ else
+
+ local status,ini = pcall(require,"ini")
+ if not status then
+ os.exit(1)
+ end
+
+ if configname then
+ config=configname
+ else
+ config="/etc/beacon.ini"
+ end
- mqtt_user = cur.get(config,"mqtt","user")
- mqtt_passwd = cur.get(config,"mqtt","password")
+ local cur=ini.parse_file(config)
+
+ logging = cur["logging"]["enabled"]
+
+ mqtt_host = cur["mqtt"]["host"]
+ mqtt_port = cur["mqtt"]["port"]
+ mqtt_id = cur["mqtt"]["id"]
+ mqtt_topic = cur["mqtt"]["topic"]
+
+ mqtt_user = cur["mqtt"]["user"]
+ mqtt_passwd = cur["mqtt"]["password"]
+
+ end
+ hostname = socket.dns.gethostname()
if mqtt_host and not mqtt_id then
socket = require("socket")
posix = require("posix")
- hostname = socket.dns.gethostname()
pid = posix.getpid()
mqtt_id="beaconmon-"..hostname.."-"..pid
end
function printLog(str)
if logging=="yes" then
capture("logger -t beaconmon \""..str.."\"")
- print(str)
- elseif logging=="syslog" then
- capture("logger -t beaconmon \""..str.."\"")
- elseif logging=="stdout" then
+ else
print(str)
end
end
function open_dump()
- run_command("/bin/kill `/usr/bin/pgrep btmon`")
- run_command("/bin/kill `/usr/bin/pgrep hcitool`")
- 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"))
+ f = assert(io.popen ("/usr/bin/btmon"))
+ run_command("hciconfig hci0 down")
+ run_command("hciconfig hci0 up")
+ f_null = assert(io.popen ("hcitool lescan --duplicates"))
return f
end
function mqtt_pub(path,value)
- res=mqtt_client:publish(path,value)
+ res=mqtt_client:publish(path,value,0,false)
printLog("Pub "..path.." returned "..res);
return res
end
local type
local name
+ packet['origin'] = hostname
+
mac = packet['Address']
uuid = packet['UUID']
type = packet['Type']
name = packet['Name (complete)']
- print(dump(packet))
-
if type and starts_with(type,'iBeacon') then
details=uuid
elseif name then
if not pcall(mqtt_pub,mqtt_path,dump(packet)) then
printLog('Reconnecting MQTT...')
- mqtt_client:connect(mqtt_id)
+ mqtt_client:connect(mqtt_host,mqtt_port)
end
end