X-Git-Url: https://git.rvb.name/openhab-process.git/blobdiff_plain/9e115a08e80fa89413335716477f8436523141dd..daa57f38fb9540a14593936b6886d47800abce9c:/mqtt-bt/scan-beacons

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()