* 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
40 lines
1.1 KiB
Python
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
|