summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xweahome.py46
1 files changed, 27 insertions, 19 deletions
diff --git a/weahome.py b/weahome.py
index 8404305..acd1d2d 100755
--- a/weahome.py
+++ b/weahome.py
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
-import sys, math, datetime, struct, atexit
+import sys, math, datetime, logging, struct, atexit
from enum import Enum
from argparse import ArgumentParser
from functools import partial
@@ -33,13 +33,9 @@ MANUFACTURER_CHAR = '00002a29-0000-1000-8000-00805f9b34fb'
MAX_SENSORS = 16
-parser = ArgumentParser(description="Weather@home")
-parser.add_argument("--sync", "-s", action='store_true', help="Sync time")
-args = parser.parse_args()
-
DBusGMainLoop(set_as_default=True)
bus = dbus.SystemBus()
-mainloop = GObject.MainLoop()
+log = logging.getLogger(__name__)
def _get_bluez_objects():
obj_manager = bus.get_object(BLUEZ_SERVICE_NAME, '/')
@@ -294,7 +290,7 @@ class WeahomeDevice:
elif data_type == 2:
self._process_sensor_data_2(offset, data[1:])
else:
- print(" unknown sensor data type: ", data_type)
+ log.warn(" unknown sensor data type: %s", data_type)
if last_packet:
changed_sensors = [s for s in range(offset, offset+4) if self.sensors[s].online]
self.new_reading.notify(sender=self, sensors=changed_sensors)
@@ -318,7 +314,7 @@ class WeahomeDevice:
def _write_settings(self, settings):
data = settings.pack()
- print(" new settings=", data)
+ log.debug(" new settings=%s", data)
self._write_char(SETTINGS_CHAR, data)
def _char_changed_cb(self, uuid, iface, changed_props, invalidated_props):
@@ -342,14 +338,14 @@ class WeahomeDevice:
elif uuid == SETTINGS_CHAR:
self._process_settings_data(bytes(value))
else:
- print(" unknown notif:", uuid)
+ log.warn(" unknown notif: %s", uuid)
def _char_notify_start_cb(self, uuid):
- #print("Notification set for {0}".format(uuid))
+ log.debug("Notification set for {0}".format(uuid))
pass
def _char_notify_error_cb(self, uuid, error):
- print("Error while setting notification for {0}: {1}".format(uuid, error))
+ log.warn("Error while setting notification for {0}: {1}".format(uuid, error))
def _device_changed_cb(self, iface, changed_props, invalidated_props):
if iface != BLUEZ_DEVICE_IFACE:
@@ -506,6 +502,14 @@ def print_sensor(device, sensor):
if sensor.has_weather:
print(" weather = {0}".format(sensor.weather))
+def disconnect_all_devices():
+ print("Disconnecting devices")
+ for device in devices:
+ if device.connected:
+ device.disconnect()
+
+# Example client program:
+
def _connected_changed_cb(sender):
name = sender.name
connected = sender.connected
@@ -524,17 +528,21 @@ def _new_reading_cb(sender, sensors):
def _settings_changed_cb(sender):
settings = sender.settings
- print("{0} Settings: status={1} datetime={2} moon_phase={3} position={4},{5} sun={6},{7} moon={8},{9}".format(sender.name, settings.status, settings.datetime, settings.moon_phase, settings.latitude, settings.longitude, settings.sun_rise, settings.sun_set, settings.moon_rise, settings.moon_set))
-
-def disconnect_all_devices():
- print("Disconnecting devices")
- for device in devices:
- if device.connected:
- device.disconnect()
+ log.info("{0} Settings: status={1} datetime={2} moon_phase={3} position={4},{5} sun={6},{7} moon={8},{9}".format(sender.name, settings.status, settings.datetime, settings.moon_phase, settings.latitude, settings.longitude, settings.sun_rise, settings.sun_set, settings.moon_rise, settings.moon_set))
if __name__ == '__main__':
+ parser = ArgumentParser(description="Weather@home")
+ parser.add_argument("--sync", "-s", action='store_true', help="Sync time")
+ parser.add_argument("--verbose", "-v", action='store_true', help="Verbose log")
+ args = parser.parse_args()
+
+ mainloop = GObject.MainLoop()
+
+ if args.verbose:
+ logging.basicConfig(level=logging.DEBUG)
+
devices = scan_for_weahome_devices()
- print("Found {0} weather@home devices: {1}".format(len(devices), [dev.name for dev in devices]))
+ log.info("Found {0} weather@home devices: {1}".format(len(devices), [dev.name for dev in devices]))
atexit.register(disconnect_all_devices)