Files
bt-mqtt-gateway/workers/blescanmulti.py
T
Elvio Sebastianelli 345b200113 New worker: ble devices scanner (#46)
* Worker for ble devices scanning

Added a worker that scan for ble devices and notify, by mqtt, presence of mac addresses and rssi.

Configuration section example:

....
workers:
    blescanmulti:
      args:
        devices:
          nut: xx:xx:xx:xx:xx:xx
          ionic: xx:xx:xx:xx:xx:xx
        topic_prefix: blescan
      update_interval: 60
...

* Update README.md 

blescanmulti worker added

* Update config.yaml.example

Added configuration section for blescanmulti worker

* Converted blescanmulti.py indentation to 2 spaces

* changed mqtt message syntax

* Update README.md

Added contributor repos url

* Update .gitignore

Removed .vscode/

* Delete settings.json

* Changes by pull request review 11/01/2019
 On branch master
	modified:   workers/blescanmulti.py
2019-01-11 22:02:49 +01:00

40 lines
1.1 KiB
Python

import time
from interruptingcow import timeout
from bluepy.btle import Scanner, DefaultDelegate
from mqtt import MqttMessage
from workers.base import BaseWorker
from logger import _LOGGER
REQUIREMENTS = ['bluepy']
class ScanDelegate(DefaultDelegate):
def __init__(self):
DefaultDelegate.__init__(self)
def handleDiscovery(self, dev, isNewDev, isNewData):
if isNewDev:
_LOGGER.debug("Discovered new device: %s" % dev.addr)
class BlescanmultiWorker(BaseWorker):
def searchmac(self, devices, mac):
for dev in devices:
if dev.addr == mac.lower():
return dev
return None
def status_update(self):
scanner = Scanner().withDelegate(ScanDelegate())
devices = scanner.scan(10.0)
ret = []
for name, mac in self.devices.items():
device = self.searchmac(devices, mac)
if device is None:
ret.append(MqttMessage(topic=self.format_topic('presence/'+name), payload="0"))
else:
ret.append(MqttMessage(topic=self.format_topic('presence/'+name+'/rssi'), payload=device.rssi))
ret.append(MqttMessage(topic=self.format_topic('presence/'+name), payload="1"))
return ret