fix #16
This commit is contained in:
parent
4238d1af5c
commit
d3ec4ebaec
|
@ -25,15 +25,15 @@ import sys
|
||||||
import subprocess
|
import subprocess
|
||||||
from bluepy import btle
|
from bluepy import btle
|
||||||
from bluepy.btle import Scanner, BTLEDisconnectError, BTLEManagementError, DefaultDelegate
|
from bluepy.btle import Scanner, BTLEDisconnectError, BTLEManagementError, DefaultDelegate
|
||||||
import paho.mqtt.client as mqtt
|
import paho.mqtt.publish as publish
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
|
|
||||||
import Xiaomi_Scale_Body_Metrics
|
import Xiaomi_Scale_Body_Metrics
|
||||||
|
|
||||||
# Configuraiton...
|
# Configuraiton...
|
||||||
MISCALE_MAC = os.getenv('MISCALE_MAC', '')
|
MISCALE_MAC = os.getenv('MISCALE_MAC', '')
|
||||||
MQTT_USERNAME = os.getenv('MQTT_USERNAME', '')
|
MQTT_USERNAME = os.getenv('MQTT_USERNAME', 'username')
|
||||||
MQTT_PASSWORD = os.getenv('MQTT_PASSWORD', '')
|
MQTT_PASSWORD = os.getenv('MQTT_PASSWORD', None)
|
||||||
MQTT_HOST = os.getenv('MQTT_HOST', '127.0.0.1')
|
MQTT_HOST = os.getenv('MQTT_HOST', '127.0.0.1')
|
||||||
MQTT_PORT = int(os.getenv('MQTT_PORT', 1883))
|
MQTT_PORT = int(os.getenv('MQTT_PORT', 1883))
|
||||||
MQTT_TIMEOUT = int(os.getenv('MQTT_TIMEOUT', 60))
|
MQTT_TIMEOUT = int(os.getenv('MQTT_TIMEOUT', 60))
|
||||||
|
@ -68,12 +68,7 @@ class ScanProcessor():
|
||||||
return abs((d2 - d1).days)/365
|
return abs((d2 - d1).days)/365
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
global MQTT_CONNECTED
|
|
||||||
DefaultDelegate.__init__(self)
|
DefaultDelegate.__init__(self)
|
||||||
if not MQTT_CONNECTED:
|
|
||||||
self.mqtt_client = None
|
|
||||||
self._start_client()
|
|
||||||
|
|
||||||
|
|
||||||
def handleDiscovery(self, dev, isNewDev, isNewData):
|
def handleDiscovery(self, dev, isNewDev, isNewData):
|
||||||
global OLD_MEASURE
|
global OLD_MEASURE
|
||||||
|
@ -113,32 +108,10 @@ class ScanProcessor():
|
||||||
self._publish(round(measured, 2), unit, str(datetime.today().strftime('%Y-%m-%d-%H:%M:%S')), hasImpedance, miimpedance)
|
self._publish(round(measured, 2), unit, str(datetime.today().strftime('%Y-%m-%d-%H:%M:%S')), hasImpedance, miimpedance)
|
||||||
OLD_MEASURE = round(measured, 2) + int(miimpedance)
|
OLD_MEASURE = round(measured, 2) + int(miimpedance)
|
||||||
|
|
||||||
if not dev.scanData:
|
else:
|
||||||
print ('\t(no data)')
|
print ('\t(no data)')
|
||||||
|
|
||||||
def _start_client(self):
|
|
||||||
global MQTT_CONNECTED
|
|
||||||
self.mqtt_client = mqtt.Client()
|
|
||||||
self.mqtt_client.username_pw_set(MQTT_USERNAME, MQTT_PASSWORD)
|
|
||||||
|
|
||||||
def _on_connect(client, _, flags, return_code):
|
|
||||||
global MQTT_CONNECTED
|
|
||||||
MQTT_CONNECTED = True
|
|
||||||
loop_flag = 0
|
|
||||||
sys.stdout.write("MQTT connection: %s\n" % mqtt.connack_string(return_code))
|
|
||||||
|
|
||||||
self.mqtt_client.on_connect = _on_connect
|
|
||||||
self.mqtt_client.connect(MQTT_HOST, MQTT_PORT, MQTT_TIMEOUT)
|
|
||||||
self.mqtt_client.loop_start()
|
|
||||||
|
|
||||||
while not MQTT_CONNECTED: # wait for MQTT connecting Ack
|
|
||||||
time.sleep(.01)
|
|
||||||
|
|
||||||
def _publish(self, weight, unit, mitdatetime, hasImpedance, miimpedance):
|
def _publish(self, weight, unit, mitdatetime, hasImpedance, miimpedance):
|
||||||
global MQTT_CONNECTED
|
|
||||||
if not MQTT_CONNECTED:
|
|
||||||
sys.stderr.write('Not connected to MQTT server\n')
|
|
||||||
exit()
|
|
||||||
if int(weight) > USER1_GT:
|
if int(weight) > USER1_GT:
|
||||||
user = USER1_NAME
|
user = USER1_NAME
|
||||||
height = USER1_HEIGHT
|
height = USER1_HEIGHT
|
||||||
|
@ -176,16 +149,21 @@ class ScanProcessor():
|
||||||
message += ',"TimeStamp":"' + mitdatetime + '"'
|
message += ',"TimeStamp":"' + mitdatetime + '"'
|
||||||
message += '}'
|
message += '}'
|
||||||
try:
|
try:
|
||||||
self.mqtt_client.publish(MQTT_PREFIX + '/' + user + '/weight', message, qos=1, retain=True)
|
sys.stdout.write('Sent data to topic %s: %s' % (MQTT_PREFIX + '/' + user + '/weight', message + '\n'))
|
||||||
sys.stdout.write('Sent data to topic %s: %s' % (MQTT_PREFIX + '/' + user + '/weight', message + '\n'))
|
publish.single(
|
||||||
|
MQTT_PREFIX + '/' + user + '/weight',
|
||||||
|
message,
|
||||||
|
qos=1,
|
||||||
|
retain=True,
|
||||||
|
hostname=MQTT_HOST,
|
||||||
|
port=MQTT_PORT,
|
||||||
|
auth={'username':MQTT_USERNAME, 'password':MQTT_PASSWORD}
|
||||||
|
)
|
||||||
except:
|
except:
|
||||||
sys.stdout.write('Could not publish to MQTT, Disconnecting...\n')
|
sys.stdout.write('Could not publish to MQTT\n')
|
||||||
MQTT_CONNECTED = False
|
raise
|
||||||
self.mqtt_client.disconnect()
|
|
||||||
pass
|
|
||||||
|
|
||||||
def main():
|
def main():
|
||||||
|
|
||||||
sys.stdout.write(' \n')
|
sys.stdout.write(' \n')
|
||||||
sys.stdout.write('-------------------------------------\n')
|
sys.stdout.write('-------------------------------------\n')
|
||||||
sys.stdout.write('Starting Xiaomi mi Scale...\n')
|
sys.stdout.write('Starting Xiaomi mi Scale...\n')
|
||||||
|
@ -216,4 +194,4 @@ def main():
|
||||||
time.sleep(TIME_INTERVAL)
|
time.sleep(TIME_INTERVAL)
|
||||||
|
|
||||||
if __name__ == "__main__":
|
if __name__ == "__main__":
|
||||||
main()
|
main()
|
||||||
|
|
Loading…
Reference in a new issue