44 lines
1.3 KiB
Python
Executable File
44 lines
1.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
# -*- coding: UTF-8 -*-
|
|
# vim: expandtab sw=4 ts=4 sts=4:
|
|
#
|
|
# Bluetooth Scale Monitor
|
|
#
|
|
# Author: Joerg Lehmann, nbit Informatik GmbH
|
|
#
|
|
"""Bluetooth Scale Monitor"""
|
|
|
|
import json
|
|
import datetime
|
|
from bluepy.btle import Scanner, DefaultDelegate
|
|
|
|
LONG = 2147483648L
|
|
INT = 32768
|
|
|
|
class ScanDelegate(DefaultDelegate):
|
|
def __init__(self):
|
|
DefaultDelegate.__init__(self)
|
|
|
|
def ProcessReading(self, mac, value):
|
|
data = {}
|
|
data['datetime'] = datetime.datetime.now().strftime("%d.%m.%Y %H:%M")
|
|
data['w1'] = long(value[0:8],16) - LONG
|
|
data['w2'] = long(value[8:16],16) - LONG
|
|
data['temp'] = int(value[16:20],16) - INT
|
|
data['hum'] = int(value[20:24],16)
|
|
data['accu'] = int(value[24:28],16)
|
|
|
|
filename = "/home/beieli/bt-readings/%s.json" % (mac)
|
|
with open(filename,'w') as outfile:
|
|
json.dump(data, outfile, indent=4, sort_keys=True)
|
|
|
|
def handleDiscovery(self, dev, isNewDev, isNewData):
|
|
if isNewData:
|
|
for (adtype, desc, value) in dev.getScanData():
|
|
if desc == 'Manufacturer' and value.startswith('1234' ):
|
|
self.ProcessReading(dev.addr, value[4:])
|
|
|
|
scanner = Scanner().withDelegate(ScanDelegate())
|
|
while True:
|
|
scanner.scan(5)
|