Добавлены варианты протоколирования.
[openhab-process.git] / mqtt-bt / scan-beacons
index 4f2a01cd31ed4ddb90ee4919a6ec3538cd3fd8a1..fcd3c207ebe7242050927fb280d95c088b93e077 100644 (file)
@@ -55,15 +55,20 @@ 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
 
 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
@@ -97,9 +102,13 @@ function trim(s)
   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
 
@@ -112,17 +121,23 @@ function process_packet(packet)
   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
 
@@ -185,15 +200,21 @@ function read_loop()
             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