X-Git-Url: https://git.rvb.name/openhab-process.git/blobdiff_plain/9e115a08e80fa89413335716477f8436523141dd..daa57f38fb9540a14593936b6886d47800abce9c:/mqtt-bt/scan-beacons?ds=sidebyside diff --git a/mqtt-bt/scan-beacons b/mqtt-bt/scan-beacons index 3c6a230..b73d674 100644 --- a/mqtt-bt/scan-beacons +++ b/mqtt-bt/scan-beacons @@ -49,7 +49,9 @@ end 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 @@ -72,11 +74,12 @@ end function open_dump() - f = assert(io.popen ("hcidump --raw")) - run_command("kill `pgrep hcitool`") - run_command("hciconfig hci0 down") - run_command("hciconfig hci0 up") - f_null = assert(io.popen ("hcitool lescan --duplicates")) + run_command("/bin/kill `/usr/bin/pgrep hcidump`") + run_command("/bin/kill `/usr/bin/pgrep hcitool`") + 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")) return f @@ -87,8 +90,8 @@ function dump(o) 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) .. ',' + s = s .. '['..k..'] = ' .. dump(v) .. ',' +-- s = s .. dump(v) .. ',' end return s .. '} ' else @@ -100,6 +103,11 @@ function trim(s) return (s:gsub("^%s*(.-)%s*$", "%1")) end +function mqtt_pub(path,value) + printLog("Pub "..path.." "..value) + return mqtt_client:publish(path,value) +end + function process_packet(packet) local bytes={} @@ -155,12 +163,9 @@ function process_packet(packet) else type='unknown' details=dump(bytes) - printLog(details) +-- printLog(details) end - if mqtt_client then - if not mqtt_client.connected then - mqtt_client:connect(mqtt_id) - end + if not (type=="unknown") then mqtt_path=string.gsub(mqtt_topic,"{(.-)}", function (name) if name=="type" then @@ -171,7 +176,12 @@ function process_packet(packet) return '{'..name..'}' end end) - mqtt_client:publish(mqtt_path,tx) + + if not pcall(mqtt_pub,mqtt_path,tx) then + printLog('Reconnecting MQTT...') + mqtt_client:connect(mqtt_id) + end + end end end @@ -218,7 +228,9 @@ if mqtt_host then if mqtt_user then mqtt_client:auth(mqtt_user, mqtt_passwd) end + mqtt_client:connect(mqtt_id) end inp = open_dump() + read_loop()