projects
/
openhab-process.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
dd22f26
)
"Умная" генерация ID клиента для обеспечения одновременной работы нескольких экземпля...
author
Roman Bazalevskiy
<rvb@rvb.name>
Tue, 31 Oct 2017 06:05:43 +0000
(09:05 +0300)
committer
Roman Bazalevskiy
<rvb@rvb.name>
Tue, 31 Oct 2017 06:05:43 +0000
(09:05 +0300)
mqtt-bt/scan-beacons
patch
|
blob
|
history
diff --git
a/mqtt-bt/scan-beacons
b/mqtt-bt/scan-beacons
index 34de7dc8f93830f9bafd074226a3c6fb8d2fc1e3..f91e59cfb5c3855e6ea8dfe0b1f44c14a10e5f38 100644
(file)
--- a/
mqtt-bt/scan-beacons
+++ b/
mqtt-bt/scan-beacons
@@
-22,7
+22,11
@@
function getConfig(configname)
mqtt_passwd = cur.get(config,"mqtt","password")
if mqtt_host and not mqtt_id then
mqtt_passwd = cur.get(config,"mqtt","password")
if mqtt_host and not mqtt_id then
- mqtt_id="beaconmon"
+ socket = require("socket")
+ posix = require("posix")
+ hostname = socket.dns.gethostname()
+ pid = posix.getpid()
+ mqtt_id="beaconmon-"..hostname.."-"..pid
end
if mqtt_host and not mqtt_port then
end
if mqtt_host and not mqtt_port then
@@
-77,7
+81,7
@@
function open_dump()
f = assert(io.popen ("/usr/bin/hcidump --raw"))
run_command("/usr/bin/hciconfig hci0 down")
run_command("/usr/bin/hciconfig hci0 up")
f = assert(io.popen ("/usr/bin/hcidump --raw"))
run_command("/usr/bin/hciconfig hci0 down")
run_command("/usr/bin/hciconfig hci0 up")
- f_null = assert(io.popen ("/usr/bin/hcitool lescan --duplicates"))
+ f_null = assert(io.popen ("/usr/bin/hcitool lescan --duplicates
--passive
"))
return f
return f
@@
-102,8
+106,9
@@
function trim(s)
end
function mqtt_pub(path,value)
end
function mqtt_pub(path,value)
- printLog("Pub "..path.." "..value)
- return mqtt_client:publish(path,value)
+ res=mqtt_client:publish(path,value)
+ printLog("Pub "..path.." "..value.." returned "..res);
+ return res
end
function process_packet(packet)
end
function process_packet(packet)
@@
-136,12
+141,19
@@
function process_packet(packet)
type=""
mac=bytes[13]..':'..bytes[12]..':'..bytes[11]..':'..bytes[10]..':'..bytes[9]..':'..bytes[8]
flags=bytes[14]
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
local j = 15
local j = 15
+ tx=tonumber("0x"..bytes[len])-256
while j<len-2 do
paysublen=tonumber('0x'..bytes[j])
while j<len-2 do
paysublen=tonumber('0x'..bytes[j])
- if bytes[j+1]=="FF" and bytes[j+2]=="4C" and bytes[j+3]=="00" and bytes[j+4]=="02" and bytes[j+5]=="15" then
+ if bytes[j+1]=="09" then
+ -- Standard name beacon
+ type="name"
+ name=""
+ for i=j+2,j+paysublen do
+ name=name..string.char(tonumber('0x'..bytes[i]))
+ end
+ printLog("name="..name)
+ elseif bytes[j+1]=="FF" and bytes[j+2]=="4C" and bytes[j+3]=="00" and bytes[j+4]=="02" and bytes[j+5]=="15" then
-- Standard UUID iBeacon
type="ibeacon"
local uuid1=bytes[j+6]..bytes[j+7]..bytes[j+8]..bytes[j+9]
-- Standard UUID iBeacon
type="ibeacon"
local uuid1=bytes[j+6]..bytes[j+7]..bytes[j+8]..bytes[j+9]
@@
-152,16
+164,20
@@
function process_packet(packet)
uuid=string.lower(uuid1..'-'..uuid2..'-'..uuid3..'-'..uuid4..'-'..uuid5)
major=bytes[j+23]..bytes[j+22]
minor=bytes[j+25]..bytes[j+24]
uuid=string.lower(uuid1..'-'..uuid2..'-'..uuid3..'-'..uuid4..'-'..uuid5)
major=bytes[j+23]..bytes[j+22]
minor=bytes[j+25]..bytes[j+24]
+ power=tonumber("0x"..bytes[len-1])-256
end
j=j+1+paysublen
end
if type=="ibeacon" then
printLog(string.format("{type:'ibeacon',mac:'%s',uuid:'%s',major:'%s',minor:'%s',power:%d,tx:%d}",mac,uuid,major,minor,power,tx))
details=uuid..'/'..major..'/'..minor
end
j=j+1+paysublen
end
if type=="ibeacon" then
printLog(string.format("{type:'ibeacon',mac:'%s',uuid:'%s',major:'%s',minor:'%s',power:%d,tx:%d}",mac,uuid,major,minor,power,tx))
details=uuid..'/'..major..'/'..minor
+ elseif type=="name" then
+ printLog(string.format("{type:'ble',mac:'%s',name:'%s'}",mac,name))
+ details=name
else
type='unknown'
details=dump(bytes)
else
type='unknown'
details=dump(bytes)
-
--
printLog(details)
+ printLog(details)
end
if not (type=="unknown") then
mqtt_path=string.gsub(mqtt_topic,"{(.-)}",
end
if not (type=="unknown") then
mqtt_path=string.gsub(mqtt_topic,"{(.-)}",
@@
-192,6
+208,8
@@
function read_loop()
for line in inp:lines() do
for line in inp:lines() do
+ printLog('Received ' .. line);
+
lchr=line:sub(1,1)
line=trim(line)
lchr=line:sub(1,1)
line=trim(line)
@@
-221,12
+239,12
@@
end
getConfig(arg[1])
if mqtt_host then
getConfig(arg[1])
if mqtt_host then
- MQTT = require "
paho.mqtt
"
- mqtt_client = MQTT.
client.create(mqtt_host, mqtt_port
)
+ MQTT = require "
mosquitto
"
+ mqtt_client = MQTT.
new(mqtt_id
)
if mqtt_user then
if mqtt_user then
- mqtt_client:
auth
(mqtt_user, mqtt_passwd)
+ mqtt_client:
login_set
(mqtt_user, mqtt_passwd)
end
end
- mqtt_client:connect(mqtt_
id
)
+ mqtt_client:connect(mqtt_
host,mqtt_port
)
end
inp = open_dump()
end
inp = open_dump()