initial commit

idea from https://blog.serverdensity.com/how-to-monitor-cats/
This commit is contained in:
Tobias Brunner 2019-04-08 21:42:17 +02:00
commit 9d5bd32c81
1 changed files with 56 additions and 0 deletions

56
main.py Normal file
View File

@ -0,0 +1,56 @@
#!/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()