# # SPDX-License-Identifier: BSD-3-Clause # # Copyright (c) 2016-2021, Olivier Martin # import struct import sys import threading from dbus.mainloop.glib import DBusGMainLoop try: from gi.repository import GLib, GObject except ImportError: import gobject as GObject import sys import numpy from matplotlib.pylab import * from mpl_toolkits.axes_grid1 import host_subplot import matplotlib.animation as animation from gattlib import uuid last_measures = { 'temperature': { 'value': None, 'min': None, 'max': None }, 'pressure': { 'value': None, 'min': None, 'max': None }, 'humidity': { 'value': None, 'min': None, 'max': None }, } def temperature_notification(value, user_data): last_measures['temperature']['value'] = float("%d.%d" % (value[0], value[1])) print("Temperature: %f" % last_measures['temperature']['value']) def pressure_notification(value, user_data): (pressure_integer, pressure_decimal) = struct.unpack("= xmax - 1.00: temp_line.axes.set_xlim(x - xmax + 1.0, x + 1.0) hum_line.axes.set_xlim(x - xmax + 1.0, x + 1.0) return temp_line, hum_line def environment_service(args, gatt_device): NORDIC_THINGY_WEATHER_STATION_SERVICE = uuid.gattlib_uuid_str_to_int("EF680200-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_TEMPERATURE_CHAR = uuid.gattlib_uuid_str_to_int("EF680201-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_PRESSURE_CHAR = uuid.gattlib_uuid_str_to_int("EF680202-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_HUMIDITY_CHAR = uuid.gattlib_uuid_str_to_int("EF680203-9B35-4933-9B10-52FFA9740042") NORDIC_THINGY_AIR_QUALITY_CHAR = uuid.gattlib_uuid_str_to_int("EF680204-9B35-4933-9B10-52FFA9740042") temperature_characteristic = gatt_device.characteristics[NORDIC_THINGY_TEMPERATURE_CHAR] pressure_characteristic = gatt_device.characteristics[NORDIC_THINGY_PRESSURE_CHAR] humidity_characteristic = gatt_device.characteristics[NORDIC_THINGY_HUMIDITY_CHAR] air_quality_characteristic = gatt_device.characteristics[NORDIC_THINGY_AIR_QUALITY_CHAR] # Initialize graph threading.Thread(target=graph_init).start() try: DBusGMainLoop(set_as_default=True) mainloop = GLib.MainLoop() temperature_characteristic.register_notification(temperature_notification) temperature_characteristic.notification_start() pressure_characteristic.register_notification(pressure_notification) pressure_characteristic.notification_start() humidity_characteristic.register_notification(humidity_notification) humidity_characteristic.notification_start() mainloop.run() except KeyboardInterrupt: mainloop.quit() finally: humidity_characteristic.notification_stop() pressure_characteristic.notification_stop() temperature_characteristic.notification_stop() gatt_device.disconnect()