function mqtt_encode(str)
if (str) then
str = string.gsub (str, "\n", "")
+ str = string.gsub (str, ":", "-")
str = string.gsub (str, "/", "-")
+ str = string.gsub (str, " ", "_")
end
return str
end
function printLog(str)
if logging=="yes" then
- capture("logger -t beaconmon "..str)
- else
+ capture("logger -t beaconmon \""..str.."\"")
+ print(str)
+ elseif logging=="syslog" then
+ capture("logger -t beaconmon \""..str.."\"")
+ elseif logging=="stdout" then
print(str)
end
end
return (s:gsub("^%s*(.-)%s*$", "%1"))
end
+local function starts_with(str, start)
+ return str:sub(1, #start) == start
+end
+
function mqtt_pub(path,value)
res=mqtt_client:publish(path,value)
- printLog("Pub "..path.." "..value.." returned "..res);
+ printLog("Pub "..path.." returned "..res);
return res
end
local name
mac = packet['Address']
- uuid = packet['uuid']
+ uuid = packet['UUID']
type = packet['Type']
name = packet['Name (complete)']
- if type=='iBeacon' then
+ print(dump(packet))
+
+ if type and starts_with(type,'iBeacon') then
details=uuid
elseif name then
- type="name"
+ if not(type) then
+ type="name"
+ end
details=name
else
- type='unknown'
+ if not type then
+ type='unknown'
+ end
details=mac
end
value=split(value)[1]
end
packet[name]=value
+ elseif #t==1 and name then
+ if not(packet[name..'.list']) then
+ packet[name..'.list']={}
+ end
+ table.insert(packet[name..'.list'],(trim(t[1])))
end
end
if starts(str,'> HCI Event: LE Meta Event (0x3e)') then
inbound=true
+ name=nil
elseif starts(str,'RSSI:') then
inbound=false
process_packet(packet)
- packet={}
+ packet={}
end
end