示例#1
0
文件: mb2api.py 项目: xoan/PyBand2
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)
示例#2
0
文件: mb2api.py 项目: xoan/PyBand2
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)
示例#3
0
    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")