57 lines
1.6 KiB
Python
57 lines
1.6 KiB
Python
#!/usr/bin/env python
|
|
|
|
import os
|
|
import sys
|
|
import json
|
|
import numpy
|
|
import subprocess
|
|
from bluepy.btle import Scanner, DefaultDelegate
|
|
from pprint import pprint
|
|
|
|
devices = ( {'name': 'charol', 'addr': 'd3:01:00:00:6a:32', 'values': [] }, )
|
|
|
|
class ScanReport2SD(DefaultDelegate):
|
|
def handleDiscovery(self, dev, isNewDev, isNewData):
|
|
if dev.rssi < -128:
|
|
return
|
|
|
|
for d in devices:
|
|
# quick and dirty
|
|
try:
|
|
if d['addr'] == dev.addr:
|
|
d['values'].append(dev.rssi)
|
|
except:
|
|
continue
|
|
|
|
def report():
|
|
data = {}
|
|
for d in devices:
|
|
list = d['values']
|
|
name = d['name']+'_litter'
|
|
if list == []:
|
|
data[name] = 0
|
|
print("DEBUG {} {}".format(name, list))
|
|
else:
|
|
# percentile85 has given good results to filter out cat/signal movement
|
|
percentile = numpy.percentile(numpy.array(list), 85)
|
|
# we reset values
|
|
d['values'] = []
|
|
# -60 is the rssi thershold we consider in place
|
|
if percentile < -60:
|
|
data[name] = 1
|
|
if percentile >= -60:
|
|
data[name] = 2
|
|
subprocess.run(["loginctl", "lock-session"])
|
|
print("DEBUG {} {} {}".format(name, percentile, list))
|
|
pprint(data)
|
|
f = open('/tmp/CatSpy.json', 'w')
|
|
f.write(json.dumps(data))
|
|
f.close()
|
|
|
|
if __name__ == "__main__":
|
|
scanner = Scanner().withDelegate(ScanReport2SD())
|
|
print ("Scanning for devices...")
|
|
while True:
|
|
scanner.scan(20)
|
|
report()
|