From 9d5bd32c81ef5ef8147bc774cce824c7964c4846 Mon Sep 17 00:00:00 2001 From: Tobias Brunner Date: Mon, 8 Apr 2019 21:42:17 +0200 Subject: [PATCH] initial commit idea from https://blog.serverdensity.com/how-to-monitor-cats/ --- main.py | 56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 main.py diff --git a/main.py b/main.py new file mode 100644 index 0000000..7561a2e --- /dev/null +++ b/main.py @@ -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()