diff --git a/lib/abstract_miband.py b/lib/abstract_miband.py index b72a444..377674b 100644 --- a/lib/abstract_miband.py +++ b/lib/abstract_miband.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 import struct import json import re @@ -217,7 +217,7 @@ def monitorHeartRateSleep(self, enable): self.waitForNotifications(self.timeout) def setMonitorHeartRateInterval(self, interval): - print "Setting heart rate measurement interval to %s minutes" % interval + print("Setting heart rate measurement interval to %s minutes" % interval) self.char_hrm_ctrl.write(b'\x14' + struct.pack('B', interval), True) def req_battery(self): @@ -254,13 +254,13 @@ def setDisplayTimeFormat(self, format): # Changes time display to 12h or 24h format def setDisplayTimeHours(self, format): if format == 12: - print "Enabling 12 hours Format..." + print("Enabling 12 hours Format...") self.char_config.write(b'\x06\x02\x00\x00') elif format == 24: - print "Enabling 24 hours Format..." + print("Enabling 24 hours Format...") self.char_config.write(b'\x06\x02\x00\x01') else: - print "Only 12 and 24 formats supported" + print("Only 12 and 24 formats supported") def getLastSyncDate(self): return self.lastSyncDate @@ -282,9 +282,9 @@ def fetch_activity_data(self): # If finished, we're good, if not, abort if self.fetch_state == "FINISHED": - print "Finished Successfully!" + print("Finished Successfully!") else: - print "Finished but something went wrong, not storing data" + print("Finished but something went wrong, not storing data") # Return to FETCH state for the next time we fetch self.fetch_state = "FETCH" @@ -323,31 +323,31 @@ def send_alert(self, code): self.char_alert.write(code) def event_listen(self): - print ("Listening for any event") + print("Listening for any event") while True: self.waitForNotifications(self.timeout) # Some simple events we have identified def onEvent(self, data): if data == 1: - print "Fell Asleep" + print("Fell Asleep") elif data == 2: - print "Woke Up" + print("Woke Up") elif data == 4: - print "Button Pressed" + print("Button Pressed") # Alarms work as a queue, we can't read them, so they have to be stored locally # Watch out for inconsistencies when using multiple clients (Shell/API) def queueAlarm(self, hour, minute, repetitionMask=128, enableAlarm=True): if len(self.alarms) >= 5: - print "Can't store more than 5 alarms at a time." + print("Can't store more than 5 alarms at a time.") return -1 else: alarm = MiBandAlarm(hour, minute, enabled=enableAlarm, repetitionMask=repetitionMask) self.alarms.append(alarm) index = len(self.alarms)-1 - print "Writing Alarm {0} at position {1}".format(str(alarm), index) + print("Writing Alarm {0} at position {1}".format(str(alarm), index)) self.char_config.write(alarm.getMessage(index)) self.waitForNotifications(self.timeout) return index @@ -355,7 +355,7 @@ def queueAlarm(self, hour, minute, repetitionMask=128, enableAlarm=True): # Modify alarm def setAlarm(self, index, hour, minute, repetitionMask, enableAlarm): if index >= len(self.alarms): - print "Alarm doesn't exist." + print("Alarm doesn't exist.") return False else: if repetitionMask == 0: @@ -363,7 +363,7 @@ def setAlarm(self, index, hour, minute, repetitionMask, enableAlarm): alarm = MiBandAlarm(hour, minute, enabled=enableAlarm, repetitionMask=repetitionMask) self.alarms[index] = alarm - print "Writing Alarm {0} at position {1}".format(str(alarm), index) + print("Writing Alarm {0} at position {1}".format(str(alarm), index)) self.char_config.write(alarm.getMessage(index)) self.waitForNotifications(self.timeout) return True @@ -372,7 +372,7 @@ def setAlarm(self, index, hour, minute, repetitionMask, enableAlarm): def toggleAlarm(self, index): alarm = self.alarms[index] - print "{0} Alarm {1}".format("Enabling" if not alarm.enabled else "Disabling", str(alarm)) + print("{0} Alarm {1}".format("Enabling" if not alarm.enabled else "Disabling", str(alarm))) self.alarms[index].toggle() self.char_config.write(alarm.getMessage(index)) @@ -383,7 +383,7 @@ def toggleAlarmDay(self, index, day): alarm = self.alarms[index] self.alarms[index].toggleDay(day) - print "Changing Alarm to {0}".format(str(alarm)) + print("Changing Alarm to {0}".format(str(alarm))) self.char_config.write(alarm.getMessage(index)) self.waitForNotifications(self.timeout) @@ -393,7 +393,7 @@ def changeAlarmTime(self, index, hour, minute): self.alarms[index].hour = hour self.alarms[index].minute = minute - print "Changing Alarm to {0}".format(str(alarm)) + print("Changing Alarm to {0}".format(str(alarm))) self.char_config.write(alarm.getMessage(index)) self.waitForNotifications(self.timeout) @@ -404,7 +404,7 @@ def deleteAlarm(self, index): alarm = self.alarms[index] - print "Deleting alarm {0}".format(str(alarm)) + print("Deleting alarm {0}".format(str(alarm))) for i in range (index+1, len(self.alarms)): alarm = self.alarms[i] self.char_config.write(alarm.getMessage(i)) @@ -418,7 +418,7 @@ def deleteAlarm(self, index): del self.alarms[index] def cleanAlarms(self): - print "Clearing all alarms from device" + print("Clearing all alarms from device") for i in range(10): alarm = MiBandAlarm(0, 0, enabled=False) self.char_config.write(alarm.getMessage(i)) @@ -597,7 +597,7 @@ def setGoalNotification(self, enable): # ALEX MUCHO CUIDAO QUE LA LIAS def factoryReset(self, force=False): if not force: - print ("Factory resetting will wipe everything and change the device's MAC, use 'force' parameter if you know what you are doing") + print("Factory resetting will wipe everything and change the device's MAC, use 'force' parameter if you know what you are doing") else: print("Resetting Device...") self.char_config.write(b'\x06\x0b\x00\x01') diff --git a/lib/miband2.py b/lib/miband2.py index ae9030f..2f92dae 100755 --- a/lib/miband2.py +++ b/lib/miband2.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 import json import array from abstract_miband import AbstractMiBand @@ -33,7 +33,7 @@ def get_model_delegate(self): return MiBand2Delegate(self) def setDisplayItems(self, steps=False, distance=False, calories=False, heartrate=False, battery=False): - print ("Setting display items to [{0}{1}{2}{3}{4}]...".format( + print("Setting display items to [{0}{1}{2}{3}{4}]...".format( " STP" if steps else "", " DST" if distance else "", " CAL" if calories else "", " HRT" if heartrate else "", " BAT" if battery else "")) @@ -57,10 +57,10 @@ def setDisplayItems(self, steps=False, distance=False, calories=False, heartrate # Changes time display to time or datetime def setDisplayTimeFormat(self, format): if format == "date": - print "Enabling Date Format..." + print("Enabling Date Format...") self.char_config.write(b'\x06\x0a\x00\x03') elif format == "time": - print "Enabling Time Format..." + print("Enabling Time Format...") self.char_config.write(b'\x06\x0a\x00\x00') else: - print "Only 'date' and 'time' formats supported" + print("Only 'date' and 'time' formats supported") diff --git a/lib/miband2delegate.py b/lib/miband2delegate.py index f92830e..061596a 100644 --- a/lib/miband2delegate.py +++ b/lib/miband2delegate.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import binascii import struct from bluepy.btle import DefaultDelegate @@ -57,7 +59,7 @@ def handleNotification(self, hnd, data): elif hasattr(self.device, 'char_battery') and hnd == self.device.char_battery.getHandle(): if data[:3] == b'\x10\x17\x01': - print "Success reading Battery Level" + print("Success reading Battery Level") else: print("Unhandled Battery Response " + hex(hnd) + ": " + str(binascii.hexlify(data))) @@ -96,7 +98,7 @@ def handleNotification(self, hnd, data): self.sessionBytes = 0 if (self.fetchDate.minutesUntilNow() > 0): if (self.fetchCount >= 5): - print ("Fetched {0} rounds, not fetching any more now".format(self.fetchCount)) + print("Fetched {0} rounds, not fetching any more now".format(self.fetchCount)) self.fetchCount = 0 self.sessionBytes = 0 self.totalBytes = 0 @@ -124,15 +126,15 @@ def handleNotification(self, hnd, data): elif hasattr(self.device, 'char_config') and hnd == self.device.char_config.getHandle(): if data[:3] == b'\x10\x02\x04': - print "ERROR Configuring" + print("ERROR Configuring") if data[:3] == b'\x10\x62\x05': - print "ERROR Configuring, too many parameters" + print("ERROR Configuring, too many parameters") elif data[:3] == b'\x10\x02\x01': - print "SUCCESS Configuring Alarm Endpoint" + print("SUCCESS Configuring Alarm Endpoint") elif data[:3] == b'\x10\x0a\x01': - print "SUCCESS Configuring Display Endpoint" + print("SUCCESS Configuring Display Endpoint") elif data[0] == b'\x10' and data[-1] == b'\x01': - print "SUCCESS Configuring %s Endpoint" % str(binascii.hexlify(data[1:-1])) + print("SUCCESS Configuring %s Endpoint" % str(binascii.hexlify(data[1:-1]))) else: print("Unhandled Configuration Response " + hex(hnd) + ": " + str(binascii.hexlify(data))) diff --git a/lib/miband3.py b/lib/miband3.py index fad2601..8dfea16 100644 --- a/lib/miband3.py +++ b/lib/miband3.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python2 +#!/usr/bin/env python3 import json from abstract_miband import AbstractMiBand from miband3delegate import MiBand3Delegate @@ -32,9 +32,9 @@ def get_model_delegate(self): return MiBand3Delegate(self) def setDisplayItems(self, steps=False, distance=False, calories=False, heartrate=False, battery=False): - print "UNINMPLEMENTED FOR MB3" + print("UNINMPLEMENTED FOR MB3") pass def setDisplayTimeFormat(self, format): - print "CAN'T CHANGE TIME FORMAT ON MB3" + print("CAN'T CHANGE TIME FORMAT ON MB3") pass diff --git a/lib/miband3delegate.py b/lib/miband3delegate.py index 8c7ef9d..5c4d07d 100644 --- a/lib/miband3delegate.py +++ b/lib/miband3delegate.py @@ -1,3 +1,5 @@ +#!/usr/bin/env python3 + import binascii import struct from bluepy.btle import DefaultDelegate @@ -60,7 +62,7 @@ def handleNotification(self, hnd, data): elif hasattr(self.device, 'char_battery') and hnd == self.device.char_battery.getHandle(): if data[:3] == b'\x10\x17\x01': - print "Success reading Battery Level" + print("Success reading Battery Level") else: print("Unhandled Battery Response " + hex(hnd) + ": " + str(binascii.hexlify(data))) @@ -97,7 +99,7 @@ def handleNotification(self, hnd, data): self.sessionBytes = 0 if (self.fetchDate.minutesUntilNow() > 0): if (self.fetchCount >= 5): - print ("Fetched {0} rounds, not fetching any more now".format(self.fetchCount)) + print("Fetched {0} rounds, not fetching any more now".format(self.fetchCount)) self.fetchCount = 0 self.sessionBytes = 0 self.totalBytes = 0 @@ -125,15 +127,15 @@ def handleNotification(self, hnd, data): elif hasattr(self.device, 'char_config') and hnd == self.device.char_config.getHandle(): if data[:3] == b'\x10\x02\x04': - print "ERROR Configuring" + print("ERROR Configuring") if data[:3] == b'\x10\x62\x05': - print "ERROR Configuring, too many parameters" + print("ERROR Configuring, too many parameters") elif data[:3] == b'\x10\x02\x01': - print "SUCCESS Configuring Alarm Endpoint" + print("SUCCESS Configuring Alarm Endpoint") elif data[:3] == b'\x10\x0a\x01': - print "SUCCESS Configuring Display Endpoint" + print("SUCCESS Configuring Display Endpoint") elif data[0] == b'\x10' and data[-1] == b'\x01': - print "SUCCESS Configuring %s Endpoint" % str(binascii.hexlify(data[1:-1])) + print("SUCCESS Configuring %s Endpoint" % str(binascii.hexlify(data[1:-1]))) else: print("Unhandled Configuration Response " + hex(hnd) + ": " + str(binascii.hexlify(data))) diff --git a/mb_api.py b/mb_api.py index 7b513f0..3185aba 100755 --- a/mb_api.py +++ b/mb_api.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 from flask import Flask, g, request, flash, url_for, redirect, render_template, abort, jsonify import os @@ -19,8 +19,8 @@ import pyodbc import datetime import argparse -import Queue -import ConfigParser +from queue import Queue, Empty +import configparser from flask import Flask base_route = os.path.dirname(os.path.realpath(__file__)) sys.path.append(base_route + '/lib') @@ -29,7 +29,7 @@ from mibandalarm import MiBandAlarm import mibanddb as mbdb -class SetQueue(Queue.Queue): +class SetQueue(Queue): def _init(self, maxsize): self.queue = set() def _put(self, item): @@ -66,20 +66,20 @@ def _get(self): config_route = base_route + "/configuration" env_route = config_route + "/" + ENV_CONFIG -config_presets = ConfigParser.ConfigParser() -config_presets.readfp(open(config_route + '/mb_presets.conf')) +config = configparser.ConfigParser() +config.read_file(open(config_route + '/mb_presets.conf')) devices_keys = None try: - env = ConfigParser.ConfigParser() - env.readfp(open(env_route + '/server.conf')) + env = configparser.ConfigParser() + env.read_file(open(env_route + '/server.conf')) rssithreshold = int(env.get('SERVER', "range_threshold")) autofetch = int(env.get('SERVER', "autofetch")) autofetch_cooldown = int(env.get('SERVER', "autofetch_cooldown"))*60*60 # hours in seconds require_token = int(env.get('SERVER', "require_token")) except Exception as e: - print e - print "unrecognised config mode [%s]" % ENV_CONFIG + print(e) + print("unrecognised config mode [%s]" % ENV_CONFIG) sys.exit(-1) cnxn = {"server": env.get('DATABASE', "server"), "database": env.get('DATABASE', "database"), @@ -92,7 +92,7 @@ def _get(self): try: pyodbc.connect(cnxn_string, timeout=3) except pyodbc.OperationalError as e: - print str(e[1]) + print(str(e[1])) sys.exit(-1) @@ -114,7 +114,7 @@ def handleDiscovery(self, dev, isNewDev, isNewData): elif name == 'Mi Band 3': model[dev.addr.upper()] = "mb3" except: - print "ERROR" + print("ERROR") def random_key(length=16): return ''.join(random.choice(string.ascii_uppercase + string.digits + string.ascii_lowercase) for _ in range(length)) @@ -232,7 +232,7 @@ def ping_connected(sleeptime): try: connected_devices[d.upper()].char_battery.read() except Exception as e: - print e + print(e) if d in connected_devices.keys(): connected_devices[d.upper()].force_disconnect() del connected_devices[d.upper()] @@ -246,7 +246,7 @@ def worker(): q.task_done() def do_fetch_activity(item, silent_fetch): - print "Fetching MiBand [%s] activity!" % item + print("Fetching MiBand [%s] activity!" % item) disconnect_after = False if item not in connected_devices.keys(): try: @@ -262,7 +262,7 @@ def do_fetch_activity(item, silent_fetch): connected_devices[item] = mb except BTLEException as e: print("There was a problem connecting this MiBand, try again later") - print e + print(e) if item in connected_devices.keys(): connected_devices[item].force_disconnect() del connected_devices[item] @@ -277,15 +277,15 @@ def do_fetch_activity(item, silent_fetch): if not silent_fetch: connected_devices[item].send_alert(b'\x03') if len(connected_devices[item].getActivityDataBuffer()) > 0: - print "Saving Data to DB..." + print("Saving Data to DB...") mbdb.write_activity_data(cnxn_string, connected_devices[item]) - print "Finished fetching MiBand [%s] activity!" % item + print("Finished fetching MiBand [%s] activity!" % item) if disconnect_after: connected_devices[item].disconnect() del connected_devices[item] except BTLEException as e: print("There was a problem retrieving this MiBand's activity, try again later") - print e + print(e) if item in connected_devices.keys(): connected_devices[item].force_disconnect() del connected_devices[item] @@ -389,14 +389,14 @@ def devices(): return json.dumps({"dev_id": dev_id, "registered": True}) except BTLEException as e: print("There was a problem registering this MiBand, try again later") - print e + print(e) if addr in connected_devices.keys(): connected_devices[addr].force_disconnect() del connected_devices[addr] abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") - print e + print(e) if addr in connected_devices.keys(): connected_devices[addr].force_disconnect() del connected_devices[addr] @@ -443,7 +443,7 @@ def device(dev_id): except BTLEException as e: reputation[row.mac.upper()] = 50 print("There was a problem (dis)connecting to this MiBand, try again later") - print e + print(e) abort(500) except BTLEException.DISCONNECTED as d: reputation[row.mac.upper()] = 50 @@ -458,11 +458,11 @@ def device(dev_id): mb.force_disconnect() del connected_devices[row.mac] del mb - print ("MiBand disconnected!") + print("MiBand disconnected!") return json.dumps({"connected": False, "dev_id": row.dispositivoId}), 200 except BTLEException as e: print("There was a problem disconnecting this MiBand, try again later") - print e + print(e) abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") @@ -471,7 +471,7 @@ def device(dev_id): abort(500) elif action == "alert" and row.mac in connected_devices.keys(): try: - print ("Alerting MB2 " + row.mac) + print("Alerting MB2 " + row.mac) mb = connected_devices[row.mac] if request.args.get('notification') == "message": mb.send_alert(b'\x01') @@ -487,7 +487,7 @@ def device(dev_id): except BTLEException as e: print("There was a problem alerting this MiBand, try again later") del connected_devices[row.mac] - print e + print(e) abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") @@ -508,7 +508,7 @@ def device(dev_id): return json.dumps({"registered": False, "dev_id": row.dispositivoId}), 200 except BTLEException as e: print("There was a problem unregistering this MiBand, try again later") - print e + print(e) abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") @@ -552,7 +552,7 @@ def alarms(dev_id): return json.dumps({"alarms_deleted": True, "dev_id": row.dispositivoId}), 200 except BTLEException as e: print("There was a problem handling the alarms, try again later") - print e + print(e) abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") @@ -598,7 +598,7 @@ def alarm(dev_id, alarm_index): return json.dumps({"alarm_deleted": True, "dev_id": row.dispositivoId}), 200 except BTLEException as e: print("There was a problem handling the alarm, try again later") - print e + print(e) abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") @@ -664,7 +664,7 @@ def config(dev_id): return json.dumps({"rebooted": True, "dev_id": dev_id}), 200 except BTLEException as e: print("There was a problem configuring this MiBand, try again later") - print e + print(e) abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") @@ -686,7 +686,7 @@ def activity(dev_id): q.join() except BTLEException as e: print("There was a problem fetching activity of this MiBand, try again later") - print e + print(e) abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") @@ -759,7 +759,7 @@ def device_user(dev_id): abort(403) except BTLEException as e: print("There was a problem handling the user of this MiBand, try again later") - print e + print(e) abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") diff --git a/mb_scanner.py b/mb_scanner.py index abd7ea3..52f3743 100755 --- a/mb_scanner.py +++ b/mb_scanner.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import threading import time @@ -33,8 +33,8 @@ def handleDiscovery(self, dev, isNewDev, isNewData): if dev.addr not in self.tmp_devices.keys(): self.tmp_devices[dev.addr] = {"device": dev, "reputation": 50} except Exception as e: - print e - print "ERROR" + print(e) + print("ERROR") # Scanning process that checks for new devices and calculates reputation based on different parameters # Note that a far away device won't disappear from the scanner devices list but will keep it's data static @@ -109,17 +109,16 @@ def main(): while True: os.system('clear') mibands = copy.deepcopy(scd.tmp_devices) - print "Mi Band Scanner" - print "Near Mi Bands: \t{0}".format(len(mibands)) - print "------------------------------" + print("Mi Band Scanner") + print("Near Mi Bands: \t{0}".format(len(mibands))) + print("------------------------------") for idx, mb in enumerate(mibands.values()): - print "[{0}] {1} <{2}> ({3}dB) REP: {4}".format(idx, mb["device"].getValueText(9), - mb["device"].addr, mb["device"].rssi, mb["reputation"]) + print("[{0}] {1} <{2}> ({3}dB) REP: {4}".format(idx, mb["device"].getValueText(9), + mb["device"].addr, mb["device"].rssi, mb["reputation"])) time.sleep(2) scan_thread.do_start = False - if __name__ == '__main__': main() diff --git a/mb_shell.py b/mb_shell.py index f9af98a..8d8cd71 100755 --- a/mb_shell.py +++ b/mb_shell.py @@ -1,4 +1,4 @@ -#!/usr/bin/env python +#!/usr/bin/env python3 import cmd import pyodbc @@ -11,8 +11,8 @@ import copy import struct import datetime -import Queue -import ConfigParser +from queue import Queue, Empty +import configparser import argparse import os import string @@ -31,7 +31,7 @@ config_route = base_route + "/configuration" env_route = config_route + "/" + ENV_CONFIG -q = Queue.Queue() +q = Queue() max_connections = 2 # For automated download stablish a period in which we don't download data # activity_fetch_cooldown = 6 * 60 @@ -39,15 +39,15 @@ mibands = {} try: - env = ConfigParser.ConfigParser() - env.readfp(open(env_route + '/server.conf')) + env = configparser.ConfigParser() + env.read_file(open(env_route + '/server.conf')) except Exception as e: - print e - print "unrecognised config mode [%s]" % ENV_CONFIG + print(e) + print(("unrecognised config mode [%s]" % ENV_CONFIG)) sys.exit(-1) -config = ConfigParser.ConfigParser() -config.readfp(open(config_route + '/mb_presets.conf')) +config = configparser.ConfigParser() +config.read_file(open(config_route + '/mb_presets.conf')) cnxn = {"server": env.get('DATABASE', "server"), "database": env.get('DATABASE', "database"), "username": env.get('DATABASE', "username"), "password": env.get('DATABASE', "password")} @@ -72,8 +72,8 @@ def handleDiscovery(self, dev, isNewDev, isNewData): elif name == 'Mi Band 3': self.tmp_devices[dev.addr] = {"device": dev, "name": name, "model": "mb3", "strikes": 0} except Exception as e: - print e - print "ERROR" + print(e) + print("ERROR") def read_json(filename, default="{}"): @@ -111,8 +111,8 @@ def scan_miband2(scanner,strikes,thresh): while getattr(t, "do_scan", True): old_devices = copy.deepcopy(scanner.delegate.tmp_devices) scanner.process(1) - for d in old_devices.keys(): - if d in scanner.delegate.tmp_devices.keys() and (d not in connected_devices.keys()): + for d in list(old_devices.keys()): + if d in list(scanner.delegate.tmp_devices.keys()) and (d not in list(connected_devices.keys())): if ((old_devices[d]["device"].rssi >= scanner.delegate.tmp_devices[d]["device"].rssi) or scanner.delegate.tmp_devices[d]["device"].rssi < thresh): scanner.delegate.tmp_devices[d]["strikes"] += 1 @@ -126,11 +126,11 @@ def ping_connected(sleeptime): print("Pinging connected devices...") t = threading.currentThread() while getattr(t, "do_ping", True): - for d in connected_devices.keys(): + for d in list(connected_devices.keys()): try: connected_devices[d].char_battery.read() except Exception as e: - print e + print(e) connected_devices[d].force_disconnect() del connected_devices[d] time.sleep(sleeptime) @@ -152,10 +152,10 @@ def worker(cmd): q.task_done() def do_fetch_activity(item, cmd): - print "Fetching MiBand [%s] activity!" % item - if item not in connected_devices.keys(): + print(("Fetching MiBand [%s] activity!" % item)) + if item not in list(connected_devices.keys()): try: - if not item in cmd.devices_keys.keys(): + if not item in list(cmd.devices_keys.keys()): cmd.devices_keys[item] = random_key() model = self.models[item] if model.upper() == "MB2": @@ -165,13 +165,13 @@ def do_fetch_activity(item, cmd): connected_devices[item] = mb except BTLEException as e: print("There was a problem connecting this MiBand, try again later") - print e + print(e) try: if args.mode == "db": last_sync = mbdb.get_device_last_sync(cnxn_string, item) else: last_sync = None - if item in cmd.devices_last_sync.keys(): + if item in list(cmd.devices_last_sync.keys()): last_sync = cmd.devices_last_sync[item] if last_sync != None: connected_devices[item].setLastSyncDate(last_sync) @@ -179,15 +179,15 @@ def do_fetch_activity(item, cmd): connected_devices[item].fetch_activity_data() connected_devices[item].send_alert(b'\x03') if len(connected_devices[item].getActivityDataBuffer()) > 0: - print "Saving Data to DB..." + print("Saving Data to DB...") if args.mode == "db": mbdb.write_activity_data(cnxn_string, connected_devices[item]) else: connected_devices[item].store_activity_data_file(base_route + '/localdata/activity_log/') - print "Finished fetching MiBand [%s] activity!" % item + print(("Finished fetching MiBand [%s] activity!" % item)) except BTLEException as e: print("There was a problem retrieving this MiBand's activity, try again later") - print e + print(e) class MiBandCMD(cmd.Cmd): """Command Processor for intercating with many MiBands at a time""" @@ -219,16 +219,16 @@ def exit_safely(self): self.scan_thread.do_scan = False #self.ping_thread.do_ping = False self.scan_thread.join() - print ("Disconnecting from %s devices" % len(connected_devices.values())) - for con in connected_devices.values(): + print(("Disconnecting from %s devices" % len(list(connected_devices.values())))) + for con in list(connected_devices.values()): con.disconnect() return True def do_devices(self, line): tmp_mibands = copy.deepcopy(self.scd.tmp_devices) - self.mibands = {k: v["device"] for k, v in tmp_mibands.items()} - self.models = {k: v["model"] for k, v in tmp_mibands.items()} - tmp_strikes = {k: v["strikes"] for k, v in tmp_mibands.items()} + self.mibands = {k: v["device"] for k, v in list(tmp_mibands.items())} + self.models = {k: v["model"] for k, v in list(tmp_mibands.items())} + tmp_strikes = {k: v["strikes"] for k, v in list(tmp_mibands.items())} for idx,mb in enumerate(self.mibands.keys()): name = "Someone" uid = 0 @@ -246,8 +246,8 @@ def do_devices(self, line): if udata: name = udata["alias"] uid = udata["id"] - model = self.models[self.mibands.keys()[idx]].upper() - str = "[%s]%10s's %s (%s) %sdB S:%s " % (idx, name, model, uid, mb, self.mibands[self.mibands.keys()[idx]].rssi, "X"*tmp_strikes[self.mibands.keys()[idx]]) + model = self.models[list(self.mibands.keys())[idx]].upper() + str = "[%s]%10s's %s (%s) %sdB S:%s " % (idx, name, model, uid, mb, self.mibands[list(self.mibands.keys())[idx]].rssi, "X"*tmp_strikes[list(self.mibands.keys())[idx]]) if (args.mode == "db" and mbdb.is_device_registered(cnxn_string, mb)) or (args.mode == "json" and mb in self.registered_devices): str += "[R]" if mb in connected_devices: @@ -255,25 +255,25 @@ def do_devices(self, line): if args.mode == "db": mbdb.update_battery(cnxn_string, mb_dev.addr, mb_dev.battery_info['level']) str += "[C] [B:{0:03d}%]".format(mb.battery_info["level"]) - print str + print(str) def do_reboot(self, params): try: dev_id = int(params) except ValueError: - print "*** arguments should be numbers" + print("*** arguments should be numbers") return except IndexError: - print "*** alert takes at least one parameter" + print("*** alert takes at least one parameter") return - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return - if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id])) - or (args.mode == "json" and self.mibands.keys()[dev_id] in self.registered_devices)): - if self.mibands.keys()[dev_id] in connected_devices.keys(): + if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id])) + or (args.mode == "json" and list(self.mibands.keys())[dev_id] in self.registered_devices)): + if list(self.mibands.keys())[dev_id] in list(connected_devices.keys()): try: - mb = connected_devices[self.mibands.keys()[dev_id]] + mb = connected_devices[list(self.mibands.keys())[dev_id]] mb.reboot() except BTLEException: print("There was a problem rebooting this MiBand, try again later") @@ -285,29 +285,29 @@ def do_reboot(self, params): def do_alert(self, params): l = params.split() if len(l)!=2: - print "*** invalid number of arguments" + print("*** invalid number of arguments") return try: l = [int(i) for i in l] except ValueError: - print "*** arguments should be numbers" + print("*** arguments should be numbers") return except IndexError: - print "*** alert takes at least one parameter" + print("*** alert takes at least one parameter") return dev_id = int(l[0]) - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return alert_int = int(l[1]) - if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id])) - or args.mode == "json" and self.mibands.keys()[dev_id] in self.registered_devices): - if self.mibands.keys()[dev_id] in connected_devices.keys(): + if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id])) + or args.mode == "json" and list(self.mibands.keys())[dev_id] in self.registered_devices): + if list(self.mibands.keys())[dev_id] in list(connected_devices.keys()): try: - mb = connected_devices[self.mibands.keys()[dev_id]] + mb = connected_devices[list(self.mibands.keys())[dev_id]] data = struct.pack('B', alert_int) mb.send_alert(data) - print "Sending Notification: " + binascii.hexlify(data) + print(("Sending Notification: " + binascii.hexlify(data))) except BTLEException: print("There was a problem alerting this MiBand, try again later") else: @@ -323,32 +323,32 @@ def do_configure(self, params): if len(l) > 1: command = l[1] except ValueError: - print "*** argument 1 should be number" + print("*** argument 1 should be number") return except IndexError: - print "*** configure takes at least one parameter" + print("*** configure takes at least one parameter") return - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return if command == "": - print("Using default configuration preset [%s]" % CONFIG_MODE) + print(("Using default configuration preset [%s]" % CONFIG_MODE)) command = CONFIG_MODE if not config.has_section(command): - print "*** invalid configuration preset '%s'" % command + print(("*** invalid configuration preset '%s'" % command)) return self.configure_miband(dev_id, command) def configure_miband(self, dev_id, preset): - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return - if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id])) - or args.mode == "json" and self.mibands.keys()[dev_id] in self.registered_devices): - if self.mibands.keys()[dev_id] in connected_devices.keys(): + if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id])) + or args.mode == "json" and list(self.mibands.keys())[dev_id] in self.registered_devices): + if list(self.mibands.keys())[dev_id] in list(connected_devices.keys()): try: - mb = connected_devices[self.mibands.keys()[dev_id]] - print("Configuring MiBand to [%s] presets" % preset) + mb = connected_devices[list(self.mibands.keys())[dev_id]] + print(("Configuring MiBand to [%s] presets" % preset)) if config.has_option(preset, "MonitorHRSleep"): mb.monitorHeartRateSleep(config.getint(preset, "MonitorHRSleep")) if config.has_option(preset, "MonitorHRInterval"): @@ -384,7 +384,7 @@ def configure_miband(self, dev_id, preset): except BTLEException as e: print("There was a problem configuring this MiBand, try again later") - print e + print(e) else: print("That MiBand is not connected, please connect it before configuring.") else: @@ -419,21 +419,21 @@ def do_setuser(self, params): print("*** only left and right supported") return except ValueError: - print "*** argument should be number" + print("*** argument should be number") return except IndexError: - print "*** setuser takes at least one parameter" + print("*** setuser takes at least one parameter") return - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return if args.mode == "db": udata = mbdb.get_user_data(cnxn_string, user_id) if udata or args.mode == "json": - if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id])) - or args.mode == "json" and self.mibands.keys()[dev_id] in self.registered_devices): - if self.mibands.keys()[dev_id] in connected_devices.keys(): - mb = connected_devices[self.mibands.keys()[dev_id]] + if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id])) + or args.mode == "json" and list(self.mibands.keys())[dev_id] in self.registered_devices): + if list(self.mibands.keys())[dev_id] in list(connected_devices.keys()): + mb = connected_devices[list(self.mibands.keys())[dev_id]] if args.mode == "db": if mbdb.set_device_user(cnxn_string, mb.addr, user_id, position[0]): mb.setUserInfo(udata["alias"], udata["sex"], udata["height"], udata["weight"], udata["birth"]) @@ -445,7 +445,7 @@ def do_setuser(self, params): else: print("MiBand should be registered before setting user data") else: - print("*** user with id %s doesn't exist" % user_id) + print(("*** user with id %s doesn't exist" % user_id)) def do_reluser(self, params): if args.mode == "db": @@ -454,29 +454,29 @@ def do_reluser(self, params): dev_id = int(l[0]) user_id = int(l[1]) except ValueError: - print "*** argument should be number" + print("*** argument should be number") return except IndexError: - print "*** reluser takes at least one parameter" + print("*** reluser takes at least one parameter") return - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return udata = mbdb.get_user_data(cnxn_string, user_id) if udata: - if mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id]): - if self.mibands.keys()[dev_id] in connected_devices.keys(): - mb = connected_devices[self.mibands.keys()[dev_id]] + if mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id]): + if list(self.mibands.keys())[dev_id] in list(connected_devices.keys()): + mb = connected_devices[list(self.mibands.keys())[dev_id]] if mbdb.release_device_user(cnxn_string, mb.addr, user_id): - print "MiBand Released from user" + print("MiBand Released from user") else: - print "There was a problem releasing this MiBand" + print("There was a problem releasing this MiBand") else: print("MiBand should be connected before releasing user data") else: print("MiBand should be registered before releasing user data") else: - print("*** user with id %s doesn't exist" % user_id) + print(("*** user with id %s doesn't exist" % user_id)) else: # TODO: If storage, release properly print("This operation is only available for DB mode") @@ -485,38 +485,38 @@ def do_connect(self, params): try: l = int(params) except ValueError: - print "*** argument should be number" + print("*** argument should be number") return except IndexError: - print "*** connect takes at least one parameter" + print("*** connect takes at least one parameter") return dev_id = l - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return - if len(connected_devices.keys()) >= 5: + if len(list(connected_devices.keys())) >= 5: print("Can't connect to more than 5 devices at the same time, disconnect some") else: - if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id])) - or args.mode == "json" and self.mibands.keys()[dev_id] in self.registered_devices): - if self.mibands.keys()[dev_id] in connected_devices.keys(): + if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id])) + or args.mode == "json" and list(self.mibands.keys())[dev_id] in self.registered_devices): + if list(self.mibands.keys())[dev_id] in list(connected_devices.keys()): print("That MiBand is already connected") else: try: - addr = self.mibands.keys()[dev_id] + addr = list(self.mibands.keys())[dev_id] model = self.models[addr] - if not addr in self.devices_keys.keys(): + if not addr in list(self.devices_keys.keys()): self.devices_keys[addr] = random_key() if model.upper() == "MB2": mb = MiBand2(addr, self.devices_keys[addr], initialize=False) elif model.upper() == "MB3": mb = MiBand3(addr, self.devices_keys[addr], initialize=False) - connected_devices[self.mibands.keys()[dev_id]] = mb + connected_devices[list(self.mibands.keys())[dev_id]] = mb if args.mode == "db": alarms = mbdb.get_device_alarms(cnxn_string, mb.addr) mbdb.update_battery(cnxn_string, mb.addr, mb.battery_info['level']) else: - if mb.addr in self.devices_alarms.keys(): + if mb.addr in list(self.devices_alarms.keys()): alarms = self.devices_alarms[mb.addr] else: alarms = [] @@ -524,7 +524,7 @@ def do_connect(self, params): mb.alarms += [MiBandAlarm(a["hour"], a["minute"], enabled=a["enabled"], repetitionMask=a["repetition"])] except BTLEException as e: print("There was a problem connecting to this MiBand, try again later") - print e + print(e) else: print("You have to register the MiBand before connecting to it") @@ -532,25 +532,25 @@ def do_disconnect(self, params): try: l = int(params) except ValueError: - print "*** argument should be number" + print("*** argument should be number") return except IndexError: - print "*** disconnect takes at least one parameter" + print("*** disconnect takes at least one parameter") return dev_id = l - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return - if self.mibands.keys()[dev_id] in connected_devices.keys(): + if list(self.mibands.keys())[dev_id] in list(connected_devices.keys()): try: - mb = connected_devices[self.mibands.keys()[dev_id]] + mb = connected_devices[list(self.mibands.keys())[dev_id]] mb.disconnect() - del connected_devices[self.mibands.keys()[dev_id]] + del connected_devices[list(self.mibands.keys())[dev_id]] del mb - print ("MiBand disconnected!") + print("MiBand disconnected!") except BTLEException as e: print("There was a problem disconnecting this MiBand, try again later") - print e + print(e) else: print("That MiBand isn't connected!") @@ -558,24 +558,24 @@ def do_register(self, params): try: l = int(params) except ValueError: - print "*** argument should be number" + print("*** argument should be number") return except IndexError: - print "*** register takes at least one parameter" + print("*** register takes at least one parameter") return dev_id = l - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return - if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id])) - or args.mode == "json" and self.mibands.keys()[dev_id] in self.registered_devices): + if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id])) + or args.mode == "json" and list(self.mibands.keys())[dev_id] in self.registered_devices): print("That MiBand is already registered") else: mb = None try: - addr = self.mibands.keys()[dev_id] + addr = list(self.mibands.keys())[dev_id] model = self.models[addr] - if not addr in self.devices_keys.keys(): + if not addr in list(self.devices_keys.keys()): self.devices_keys[addr] = random_key() if model.upper() == "MB2": mb = MiBand2(addr, self.devices_keys[addr], initialize=False) @@ -593,34 +593,34 @@ def do_register(self, params): mb.disconnect() except BTLEException as e: print("There was a problem registering this MiBand, try again later") - print e + print(e) except KeyError as e: print("Device was kicked out") - print e + print(e) def do_unregister(self, params): try: l = int(params) except ValueError: - print "*** argument should be number" + print("*** argument should be number") return except IndexError: - print "*** unregister takes at least one parameter" + print("*** unregister takes at least one parameter") return dev_id = l - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return - if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id])) - or args.mode == "json" and self.mibands.keys()[dev_id] in self.registered_devices): - if not self.mibands.keys()[dev_id] in connected_devices.values(): + if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id])) + or args.mode == "json" and list(self.mibands.keys())[dev_id] in self.registered_devices): + if not list(self.mibands.keys())[dev_id] in list(connected_devices.values()): try: if args.mode == "db": - mbdb.unregister_device(cnxn_string, self.mibands.keys()[dev_id]) - mbdb.delete_all_alarms(cnxn_string, self.mibands.keys()[dev_id]) + mbdb.unregister_device(cnxn_string, list(self.mibands.keys())[dev_id]) + mbdb.delete_all_alarms(cnxn_string, list(self.mibands.keys())[dev_id]) else: - self.registered_devices.remove(self.mibands.keys()[dev_id]) - del self.devices_keys[self.mibands.keys()[dev_id]] + self.registered_devices.remove(list(self.mibands.keys())[dev_id]) + del self.devices_keys[list(self.mibands.keys())[dev_id]] print("MiBand unregistered!") except BTLEException: print("There was a problem unregistering this MiBand, try again later") @@ -634,19 +634,19 @@ def do_activity(self, params): try: l = int(params) except ValueError: - print "*** argument should be number" + print("*** argument should be number") return except IndexError: - print "*** activity takes at least one parameter" + print("*** activity takes at least one parameter") return dev_id = l - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return - if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id])) - or args.mode == "json" and self.mibands.keys()[dev_id] in self.registered_devices): - if self.mibands.keys()[dev_id] in connected_devices.keys(): - q.put(self.mibands.keys()[dev_id]) + if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id])) + or args.mode == "json" and list(self.mibands.keys())[dev_id] in self.registered_devices): + if list(self.mibands.keys())[dev_id] in list(connected_devices.keys()): + q.put(list(self.mibands.keys())[dev_id]) q.join() else: print("MiBand should be connected before fetching activity data") @@ -661,54 +661,54 @@ def do_alarms(self, params): if len(l) > 1: command = l[1] except ValueError: - print "*** argument 1 should be number" + print("*** argument 1 should be number") return except IndexError: - print "*** alarms takes at least one parameter" + print("*** alarms takes at least one parameter") return if command not in ['list', 'queue', 'set', 'toggle', 'toggleday', 'delete', 'clear']: - print "*** invalid alarm command, see help" + print("*** invalid alarm command, see help") return - if dev_id >= len(self.mibands.keys()): - print "*** device not in the device list" + if dev_id >= len(list(self.mibands.keys())): + print("*** device not in the device list") return - if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, self.mibands.keys()[dev_id])) - or args.mode == "json" and self.mibands.keys()[dev_id] in self.registered_devices): - if self.mibands.keys()[dev_id] in connected_devices.keys(): - mb = connected_devices[self.mibands.keys()[dev_id]] + if ((args.mode == "db" and mbdb.is_device_registered(cnxn_string, list(self.mibands.keys())[dev_id])) + or args.mode == "json" and list(self.mibands.keys())[dev_id] in self.registered_devices): + if list(self.mibands.keys())[dev_id] in list(connected_devices.keys()): + mb = connected_devices[list(self.mibands.keys())[dev_id]] if args.mode == "db": - alarms = mbdb.get_device_alarms(cnxn_string, self.mibands.keys()[dev_id]) + alarms = mbdb.get_device_alarms(cnxn_string, list(self.mibands.keys())[dev_id]) else: - if self.mibands.keys()[dev_id] in self.devices_alarms.keys(): - alarms = self.devices_alarms[self.mibands.keys()[dev_id]] + if list(self.mibands.keys())[dev_id] in list(self.devices_alarms.keys()): + alarms = self.devices_alarms[list(self.mibands.keys())[dev_id]] else: alarms = [] if command == 'list': if len(alarms) > 0: for idx,a in enumerate(mb.alarms): - print "[%s]" % idx + str(a) + print(("[%s]" % idx + str(a))) if command == 'clear': if len(alarms) > 0: mb.cleanAlarms() if args.mode == "db": mbdb.delete_all_alarms(cnxn_string, mb.addr) else: - self.devices_alarms[self.mibands.keys()[dev_id]] = [] + self.devices_alarms[list(self.mibands.keys())[dev_id]] = [] elif command == 'queue': try: - hour, minute = map(lambda x: int(x), l[2].split(":")) + hour, minute = [int(x) for x in l[2].split(":")] alarm_id = mb.queueAlarm(hour, minute) if args.mode == "db": mbdb.set_alarm(cnxn_string, mb.addr, mb.alarms[alarm_id], alarm_id) else: if len(alarms) > 0: - self.devices_alarms[self.mibands.keys()[dev_id]] += [{"enabled": True, "repetition": 128, "hour": hour, "minute": minute}] + self.devices_alarms[list(self.mibands.keys())[dev_id]] += [{"enabled": True, "repetition": 128, "hour": hour, "minute": minute}] else: - self.devices_alarms[self.mibands.keys()[dev_id]] = [{"enabled": True, "repetition": 128, "hour": hour, "minute": minute}] + self.devices_alarms[list(self.mibands.keys())[dev_id]] = [{"enabled": True, "repetition": 128, "hour": hour, "minute": minute}] except IndexError: - print "*** queue takes an hour parameter in format HH:MM" + print("*** queue takes an hour parameter in format HH:MM") except ValueError: - print "*** queue takes an hour parameter in format HH:MM" + print("*** queue takes an hour parameter in format HH:MM") elif command == 'delete': try: alarm_id = int(l[2]) @@ -717,11 +717,11 @@ def do_alarms(self, params): if args.mode == "db": mbdb.delete_alarm(cnxn_string, mb.addr, alarm_id) else: - del self.devices_alarms[self.mibands.keys()[dev_id]][alarm_id] + del self.devices_alarms[list(self.mibands.keys())[dev_id]][alarm_id] except IndexError: - print "*** delete takes an alarm_id parameter" + print("*** delete takes an alarm_id parameter") except ValueError: - print "*** delete's alarm_id should be a number" + print("*** delete's alarm_id should be a number") elif command == 'toggle': try: alarm_id = int(l[2]) @@ -729,43 +729,43 @@ def do_alarms(self, params): if args.mode == "db": mbdb.set_alarm(cnxn_string, mb.addr, mb.alarms[alarm_id], alarm_id) else: - self.devices_alarms[self.mibands.keys()[dev_id]][alarm_id]["enabled"] = mb.alarms[alarm_id].enabled + self.devices_alarms[list(self.mibands.keys())[dev_id]][alarm_id]["enabled"] = mb.alarms[alarm_id].enabled except IndexError: - print "*** toggle takes an alarm_id parameter" + print("*** toggle takes an alarm_id parameter") except ValueError: - print "*** toggle's alarm_id should be a number" + print("*** toggle's alarm_id should be a number") elif command == 'toggleday': try: alarm_id = int(l[2]) day_id = int(l[3]) - if day_id not in range(1,8): - print "*** day_id should be between 1 (Monday) and 7 (Sunday)" + if day_id not in list(range(1,8)): + print("*** day_id should be between 1 (Monday) and 7 (Sunday)") return else: mb.toggleAlarmDay(alarm_id, day_id-1) if args.mode == "db": mbdb.set_alarm(cnxn_string, mb.addr, mb.alarms[alarm_id], alarm_id) else: - self.devices_alarms[self.mibands.keys()[dev_id]][alarm_id]["repetition"] = mb.alarms[alarm_id].repetitionMask + self.devices_alarms[list(self.mibands.keys())[dev_id]][alarm_id]["repetition"] = mb.alarms[alarm_id].repetitionMask except IndexError: - print "*** toggleday takes an alarm_id parameter and a day_id parameter (1-7)" + print("*** toggleday takes an alarm_id parameter and a day_id parameter (1-7)") except ValueError: - print "*** toggleday's alarm_id and day_id should be both numbers" + print("*** toggleday's alarm_id and day_id should be both numbers") elif command == "set": try: alarm_id = int(l[2]) - hour, minute = map(lambda x: int(x), l[3].split(":")) + hour, minute = [int(x) for x in l[3].split(":")] mb.changeAlarmTime(alarm_id, hour, minute) if args.mode == "db": mbdb.set_alarm(cnxn_string, mb.addr, mb.alarms[alarm_id], alarm_id) else: - self.devices_alarms[self.mibands.keys()[dev_id]][alarm_id]["hour"] = mb.alarms[alarm_id].hour - self.devices_alarms[self.mibands.keys()[dev_id]][alarm_id]["minute"] = mb.alarms[alarm_id].minute + self.devices_alarms[list(self.mibands.keys())[dev_id]][alarm_id]["hour"] = mb.alarms[alarm_id].hour + self.devices_alarms[list(self.mibands.keys())[dev_id]][alarm_id]["minute"] = mb.alarms[alarm_id].minute except IndexError: - print "*** set takes an alarm_id parameter and an hour parameter in format HH:MM" + print("*** set takes an alarm_id parameter and an hour parameter in format HH:MM") except ValueError: - print "*** toggleday's alarm_id and hour (HH:MM) should be both numbers" + print("*** toggleday's alarm_id and hour (HH:MM) should be both numbers") else: print("MiBand should be connected before viewing/changing alarms") else: @@ -800,7 +800,7 @@ def do_EOF(self, line): try: pyodbc.connect(cnxn_string, timeout=3) except pyodbc.OperationalError as e: - print str(e[1]) + print((str(e[1]))) sys.exit(-1) elif args.mode == "json": mb2cmd.registered_devices = read_json(base_route + '/localdata/registered_devices.json', default="[]")