def alarms(dev_id): row = mb2db.get_device_by_id(cnxn_string, dev_id) if row: if request.method == "GET": alarms = mb2db.get_device_alarms_by_id(cnxn_string, dev_id) al_list = [] for al in alarms: al_list.append({ "id": al.alarmaId, "dev_id": al.dispositivoId, "index": al.indiceAlarma, "hour": al.hora, "minute": al.minuto, "enabled": al.activada, "repetition": al.repeticion }) return json.dumps(al_list) if row.mac in connected_devices.keys(): mb2 = connected_devices[row.mac] try: if request.method == "POST": hour = int(request.form["hour"]) minute = int(request.form["minute"]) enabled = int(request.form.get( "enabled")) if request.form.get("enabled") else 1 repetition_mask = int( request.form.get("repetition")) if request.form.get( "repetition") else 128 alarm_id = mb2.queueAlarm(hour, minute, enableAlarm=enabled, repetitionMask=repetition_mask) db_alarm = mb2db.set_alarm(cnxn_string, dev_id, mb2.alarms[alarm_id], alarm_id) al = mb2.alarms[alarm_id] return json.dumps({ "dev_id": dev_id, "id": db_alarm.alarmaId, "index": alarm_id, "hour": al.hour, "minute": al.minute, "enabled": al.enabled, "repetition": al.repetitionMask }) if request.method == "DELETE": mb2.cleanAlarms() mb2db.delete_all_alarms(cnxn_string, 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 abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") del connected_devices[row.mac] del mb2 abort(500) else: abort(403) else: abort(404)
def alarm(dev_id, alarm_index): row = mb2db.get_device_by_id(cnxn_string, dev_id) if row: alarms = mb2db.get_device_alarms_by_id(cnxn_string, dev_id) try: al = alarms[alarm_index] except IndexError as e: abort(404) if request.method == "GET": return json.dumps({ "dev_id": dev_id, "alarm_id": al.alarmaId, "alarm_index": al.indiceAlarma, "hour": al.hora, "minute": al.minuto, "enabled": al.activada, "repetition": al.repeticion }) if row.mac in connected_devices.keys(): try: mb2 = connected_devices[row.mac] if request.method == "PUT": hour = int(request.form.get("hour")) if request.form.get( "hour") else al.hora minute = int(request.form.get( "minute")) if request.form.get("minute") else al.minuto enabled = bool(int( request.form.get("enabled"))) if request.form.get( "enabled") else al.activada repetition_mask = int( request.form.get("repetition")) if request.form.get( "repetition") else al.repeticion if repetition_mask == 0: repetition_mask = 128 mb2.setAlarm(alarm_index, hour, minute, repetition_mask, enabled) al = mb2db.set_alarm(cnxn_string, dev_id, mb2.alarms[alarm_index], alarm_index) return json.dumps({ "dev_id": dev_id, "alarm_id": al.alarmaId, "alarm_index": al.indiceAlarma, "hour": al.hora, "minute": al.minuto, "enabled": al.activada, "repetition": al.repeticion }) if request.method == "DELETE": mb2.deleteAlarm(alarm_index) mb2db.delete_alarm(cnxn_string, 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 abort(500) except BTLEException.DISCONNECTED as d: print("Device disconnected, removing from connected devices") del connected_devices[row.mac] del mb2 abort(500) else: abort(403) else: abort(404)
def do_alarms(self, params): l = params.split() try: dev_id = int(l[0]) command = "list" if len(l) > 1: command = l[1] except ValueError: print "*** argument 1 should be number" return except IndexError: 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" return if dev_id >= len(self.mibands.keys()): print "*** device not in the device list" return if ((args.mode == "db" and mb2db.is_device_registered(mb2db.cnxn, 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(): mb2 = connected_devices[self.mibands.keys()[dev_id]] if args.mode == "db": alarms = mb2db.get_device_alarms( mb2db.cnxn, 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]] else: alarms = [] if command == 'list': if len(alarms) > 0: for idx, a in enumerate(mb2.alarms): print "[%s]" % idx + str(a) if command == 'clear': if len(alarms) > 0: mb2.cleanAlarms() if args.mode == "db": mb2db.delete_all_alarms(mb2db.cnxn, mb2.addr) else: self.devices_alarms[self.mibands.keys() [dev_id]] = [] elif command == 'queue': try: hour, minute = map(lambda x: int(x), l[2].split(":")) alarm_id = mb2.queueAlarm(hour, minute) if args.mode == "db": mb2db.set_alarm(mb2db.cnxn, mb2.addr, mb2.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 }] else: self.devices_alarms[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" except ValueError: print "*** queue takes an hour parameter in format HH:MM" elif command == 'delete': try: alarm_id = int(l[2]) mb2.deleteAlarm(alarm_id) if len(alarms) > 0: if args.mode == "db": mb2db.delete_alarm(mb2db.cnxn, mb2.addr, alarm_id) else: del self.devices_alarms[self.mibands.keys() [dev_id]][alarm_id] except IndexError: print "*** delete takes an alarm_id parameter" except ValueError: print "*** delete's alarm_id should be a number" elif command == 'toggle': try: alarm_id = int(l[2]) mb2.toggleAlarm(alarm_id) if args.mode == "db": mb2db.set_alarm(mb2db.cnxn, mb2.addr, mb2.alarms[alarm_id], alarm_id) else: self.devices_alarms[ self.mibands.keys()[dev_id]][alarm_id][ "enabled"] = mb2.alarms[alarm_id].enabled except IndexError: print "*** toggle takes an alarm_id parameter" except ValueError: 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)" return else: mb2.toggleAlarmDay(alarm_id, day_id - 1) if args.mode == "db": mb2db.set_alarm(mb2db.cnxn, mb2.addr, mb2.alarms[alarm_id], alarm_id) else: self.devices_alarms[ self.mibands.keys()[dev_id]][alarm_id][ "repetition"] = mb2.alarms[ alarm_id].repetitionMask except IndexError: 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" elif command == "set": try: alarm_id = int(l[2]) hour, minute = map(lambda x: int(x), l[3].split(":")) mb2.changeAlarmTime(alarm_id, hour, minute) if args.mode == "db": mb2db.set_alarm(mb2db.cnxn, mb2.addr, mb2.alarms[alarm_id], alarm_id) else: self.devices_alarms[self.mibands.keys()[dev_id]][ alarm_id]["hour"] = mb2.alarms[alarm_id].hour self.devices_alarms[ self.mibands.keys()[dev_id]][alarm_id][ "minute"] = mb2.alarms[alarm_id].minute except IndexError: 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" else: print( "MiBand2 should be connected before viewing/changing alarms" ) else: print( "MiBand2 should be registered before viewing/changing alarms")