예제 #1
0
    def post(self):
        group_name = request.json.get('group_name')
        group_id = request.json.get('group_id')
        group_eui = request.json.get('group_eui')
        if not group_name:
            abort(422)

        def group_eui_productor():
            import random
            s = ''
            for i in range(4):
                s += chr(random.randint(0, 255))
            return s.encode('hex').upper()

        def on_add_group(data):
            pass

        # group_eui = group_eui_productor()

        # socketio_cli = MSocketIO(LORA_HOST, LORA_PORT, EventNameSpace, params={'app_eui': APP_EUI, 'token': TOKEN})
        #
        # event_space = socketio_cli.define(EventNameSpace, path=NAMESPACE)

        # event_space.emit('add_group', {'name': group_name, 'group_addr': group_eui, 'nwkskey': '2B7E151628AED2A6ABF7158809CF4F3C',
        #                                'appskey': '2B7E151628AED2A6ABF7158809CF4F3C'})
        # socketio_cli.wait(3)

        group = Group(group_name, group_id, group_eui)
        # todo 添加到LoRaWan服务器,带回group_id
        db.session.add(group)
        db.session.commit()
        return group
예제 #2
0
 def delete(self, id):
     group = Group.get(id)
     if group:
         try:
             group.remove()
             return jsonify({'success': u'删除成功'})
         except IntegrityError, e:
             response = jsonify({'error': u'删除失败'})
             response.status_code = 422
예제 #3
0
    def put(self, id):
        group_name = request.json.get('group_name')
        group = Group.get(id)
        if not group:
            abort(404)
        group.group_name = group_name
        # todo: 添加组到LoRa服务器
        # group_eui = None

        group.save()
        return group
예제 #4
0
 def get(self):
     groups = Group.get_groups()
     # if not routes:
     #     abort(404)
     return groups
예제 #5
0
    def put(self, group_id):

        # socketio_cli = MSocketIO(LORA_HOST, LORA_PORT, EventNameSpace, params={'app_eui': APP_EUI, 'token': TOKEN})
        #
        # event_space = socketio_cli.define(EventNameSpace, path=NAMESPACE)

        group = Group.get(group_id)
        members = loads(request.data)
        delete = []
        add = []
        failed_rm_euis = []
        failed_add_euis = []

        def on_rm_dev_from_group(data):
            if data['success'] == 0:
                dev_eui = data['dev_eui']
                failed_rm_euis.append(dev_eui)

        def on_add_dev_into_group(data):
            if data['success'] == 0:
                dev_eui = data['dev_eui']
                failed_add_euis.append(dev_eui)

        event_space.on('rm_dev_from_group', on_rm_dev_from_group)
        event_space.on('add_dev_into_group', on_add_dev_into_group)

        if group.group_id:
            original_members = group.buses
            for bus in original_members:
                if bus.id not in [mem['bus_id'] for mem in members]:
                    delete.append(bus.id)

            for m in members:
                if m['bus_id'] not in [ori.id for ori in original_members]:
                    add.append(m['bus_id'])

            # delete members
            delete_buses = []
            for d in delete:
                bus = Bus.get(d)
                if bus:
                    delete_buses.append(bus)
             # add members
            add_buses = []
            for a in add:
                bus = Bus.get(a)
                if bus:
                    add_buses.append(bus)

            for bus in delete_buses:
                event_space.emit('rm_dev_from_group', {'group_id': group.group_id, 'cmd': 'rm_dev_from_group',
                                                        'dev_eui': bus.eui})
            for bus in add_buses:
                event_space.emit('add_dev_into_group', {'group_id': group.group_id, 'cmd': 'add_dev_into_group',
                                                        'dev_eui': bus.eui})
            # 等待socketio的操作结果
            socketio_cli.wait(3)

            # 写入数据库
            for bus in delete_buses:
                if bus.eui not in failed_rm_euis:
                    bus.group_id = None
                    db.session.add(bus)
            for bus in add_buses:
                if bus.eui.upper() not in failed_add_euis:
                    bus.group_id = group.id
                    db.session.add(bus)
            db.session.commit()

            error_message = ''
            if failed_add_euis + failed_rm_euis:
                error_message = ', '.join(failed_add_euis + failed_rm_euis) + ' 操作失败'
            socketio_cli.disconnect()
            return {'error_message': error_message}, 201

        socketio_cli.disconnect()
        return {'error_message': '组不存在'}, 422