Beispiel #1
0
def register_device():
    form = DeviceRegistrationForm()
    if form.validate_on_submit():
        if form.photo.data == None:
            # photo_name = ''
            device = Device(deviceId=form.deviceId.data, 
            devicename=form.devicename.data, 
            name=form.name.data, dept_code=form.dept_code.data, 
            device_function=form.device_function.data, 
            device_bg=form.device_bg.data)  
        else:
            photo_name = photos.save(form.photo.data)
        # file_url = photos.url(photo_name)
            device = Device(deviceId=form.deviceId.data, 
            devicename=form.devicename.data, 
            name=form.name.data, dept_code=form.dept_code.data, 
            device_function=form.device_function.data, 
            device_bg=form.device_bg.data, photo=photo_name)        
        db.session.add(device)
        db.session.commit()
        flash('Congratulations, your Nameplate is in the system!\nThe URL of your nameplate: /device/'+str(form.deviceId.data))
        new_device_info = Device.query.filter_by(deviceId=form.deviceId.data).first_or_404()
        # bg_pic=background_dictionary[deviceId.device_bg]
        return render_template('new_device.html', deviceId=new_device_info) 
    return render_template('register_device.html', title='Add New Device', form=form)
Beispiel #2
0
 def test_duplicate_name(self):
     d1 = Device(name='d1')
     d2 = Device(name='d2')
     db.session.add(d1)
     db.session.add(d2)
     db.session.commit()
     self.assertTrue(d2.name == 'd2')
Beispiel #3
0
    def test_add_device(self):
        p = Project(name="project1", path="path/project1")
        db.session.add(p)
        db.session.commit()

        d1 = Device(adb_sn="sn_1",
                    constructor="constructeur1",
                    model="model1",
                    imei="imei1",
                    status="Not Configured")
        d2 = Device(adb_sn="sn_2",
                    constructor="constructeur2",
                    model="model2",
                    imei="imei2",
                    status="Not Configured")
        db.session.add(d1)
        db.session.add(d2)
        db.session.commit()

        p.add_device([d1, d2])
        db.session.commit()
        self.assertEqual(p.devices.count(), 2)

        p.delete_device(d2)
        db.session.commit()
        self.assertEqual(p.devices.count(), 1)
Beispiel #4
0
    def test_insert(self):
        # empty
        exists = Device.query.filter_by(id='dev_id_23').first()
        self.assertIsNone(exists)

        # new device
        device = Device(id='dev_id_23', device_class='PSI', device_type='PBR')
        self.DM.insert(device, Device)
        exists = Device.query.filter_by(id='dev_id_23').first()
        self.assertIsNotNone(exists)

        # not all required attributes
        device = Device(id='dev_id_wrong', device_class='PSI')
        self.assertRaises(OperationalError, self.DM.insert, device, Device)
Beispiel #5
0
def create_device():
	print(request.json)
	sn = request.json.get('sn')
	name = request.json.get('name')
	img = request.json.get('img')
	type = request.json.get('type')

	device = Device(sn=sn,name=name,img=img,type=type,)
	static_folder = current_app.config['STATIC_FOLDER']
	user_dir = os.path.join(static_folder, 'user_folder', f"{g.current_user.uid}")
	tmp_file_path = os.path.join(user_dir, img)
	if not os.path.exists(tmp_file_path):
		return jsonify({'success':False,'error_code':-1,'errmsg':f'文件{tmp_file_path}不存在'})

	db.session.add(device)
	try:
		db.session.commit()
		dst_dir = os.path.join(static_folder, 'deviceimg', f"{device.id}")
		dst_file_path = os.path.join(dst_dir, img)
		os.makedirs(dst_dir,exist_ok=True)
		shutil.move(tmp_file_path,dst_file_path)
		shutil.rmtree(user_dir)
	except Exception as e:
		db.session.rollback()
		logging.error(f'添加数据库发生错误,已经回退:{e}')
		return jsonify({'success': False, 'error_code': -123, 'errmsg': '数据库插入错误,请查看日志'})

	return jsonify({'success':True,
                    'error_code':0,
                    })
Beispiel #6
0
def import_devices():
    # We don't have the 'original' ddb with emails so we create a single user who takes it all
    user = User(email="*****@*****.**")
    user.set_password("topsecret")
    db.session.add(user)

    with open(os.path.join(basepath, "ressources/ddb.txt")) as csvfile:
        csvreader = csv.DictReader(csvfile, delimiter=",", quotechar="'")
        for row in csvreader:
            device_type = {"F": DeviceType.FLARM, "I": DeviceType.ICAO, "O": DeviceType.OGN}[row["#DEVICE_TYPE"]]
            address = row["DEVICE_ID"]
            aircraft_type_name = row["AIRCRAFT_MODEL"]
            registration = row["REGISTRATION"]
            cn = row["CN"]
            show_track = row["TRACKED"] == "Y"
            show_identity = row["IDENTIFIED"] == "Y"
            aircraft_category = AircraftCategory.coerce(row["AIRCRAFT_TYPE"])

            aircraft_type = AircraftType.query.filter_by(name=aircraft_type_name).one_or_none()
            if not aircraft_type:
                aircraft_type = AircraftType(name=aircraft_type_name, category=aircraft_category)

            Device(device_type=device_type, aircraft_type=aircraft_type, address=address, registration=registration, cn=cn, show_track=show_track, show_identity=show_identity, user=user)

    db.session.commit()
Beispiel #7
0
def sync():
    '''Showing all logger'''
    url = "https://prinus.net/api/sensor"
    username = os.environ['PRINUS_USER']
    password = os.environ['PRINUS_PASS']
    response = requests.get(url, auth=(username, password))

    devices = Device.query.all()
    raw = response.json()
    sn_list = [key['sn'] for key in raw]

    for dev in devices:
        if dev.sn in sn_list:
            sn_list.remove(dev.sn)

    # update device and lokasi in pbase, and
    # send new device and lokasi to pweb
    for sn in sn_list:
        # update device
        device = Device(sn=f"{sn}")
        db.session.add(device)
        db.session.commit()

        # send post data
        try:
            post_url = f"{os.environ['PWEB_URL']}/api/device"
            post_data = {'sn': f"{sn}", 'id': device.id}
            res = requests.post(post_url, data=post_data)
            result = res.json()
            print(result)
        except Exception as e:
            print(e)

    return redirect(url_for('logger.index'))
def handle_mqtt_message(client, userdata, message):
    app.logger.info(message.topic + ' ' + message.payload.decode())

    match = hydro_json_re.match(message.topic)
    if match:
        name = match.group(1)
        data = json.loads(message.payload.decode())

        dev = Device.query.filter_by(name=name).first()
        if not dev:
            dev = Device(name=name)
            db.session.add(dev)
            db.session.commit()

        log = Log(
            device=dev.id,
            session=dev.cur_session,
            bat_v=data['bat_v'],
            temp_f=data['temp_f'],
            light_vis=data['light_vis'],
            light_ir=data['light_ir'],
            light_uv=data['light_uv'],
            accel_x=data['accel_x'],
            accel_y=data['accel_y'],
            accel_z=data['accel_z'],
            tilt=data['tilt'],
            wifi_conn_fail=data['wifi_conn_fail'],
            mqtt_conn_fail=data['mqtt_conn_fail'],
            last_run_time=data['last_run_time']
        )
        db.session.add(log)
        db.session.commit()
Beispiel #9
0
def device_register(request):
    success = False
    message = ''
    try:
        name = request.POST.get('name', None)
        device_type = request.POST.get('device_type', None)
        address = request.POST.get('address', None)
        install_date = request.POST.get('install_date', None)
        install_time = request.POST.get('install_time', None)
        latitude = request.POST.get('latitude', None)
        longitude = request.POST.get('longitude', None)
        project_id = request.POST.get('project_id', None)
        owner_id = request.POST.get('owner_id', None)

        device_type_obj = DeviceType.objects.get(id=int(device_type))
        project_id_obj = Project.objects.get(id=int(project_id))
        owner_id_obj = User.objects.get(id=int(owner_id))
        device = Device(name=name,
                        device_type=device_type_obj,
                        address=address,
                        install_date=install_date,
                        install_time=install_time,
                        latitude=latitude,
                        longitude=longitude,
                        project_id=project_id_obj,
                        owner_id=owner_id_obj)
        device.save()
        success = True
    except e:
        message = str(e)
        print(str(e))
    res = {'success': success, 'message': message}
    response = HttpResponse(json.dumps(res), content_type="application/json")
    return response
Beispiel #10
0
    def post(self):
        """
        Add sensor
        """
        data = request.json

        if len(Device.search().query(
                'term', **{
                    'mqtt_account.username': data['mqtt_account']['username']
                }).execute()) != 0:
            abort(400, error='MQTT username already exist.')

        sensor = Device(device_type='sensor',
                        pos_x=data['pos_x'],
                        pos_y=data['pos_y'],
                        radius=data['radius'])
        sensor.hash_key(data['key'])

        data['mqtt_account']['clients_topic'] = 'bluetooth/sensor/' + data[
            'mqtt_account']['username'] + '/from_clients'
        data['mqtt_account']['device_topic'] = 'bluetooth/sensor/' + data[
            'mqtt_account']['username'] + '/from_device'

        sensor.set_mqtt_account(data['mqtt_account'])
        sensor.meta.id = 'sensor_' + str(Device.search().count() + 1)
        sensor.save()

        return sensor.to_dict(include_id=True), 201
Beispiel #11
0
    def test_save_value(self):
        device = Device(id='dev_id_23', device_class='PSI', device_type='PBR')
        self.DM.insert(device, Device)
        self.DM._store_permanent()

        # empty
        exists = Value.query.filter_by(id='dev_id_23').first()
        self.assertIsNone(exists)

        # new value
        value = Value(id=1,
                      time=now(),
                      value=23,
                      dev_id='dev_id_23',
                      var_id='od',
                      attribute=1,
                      note=None)
        self.DM.save_value(value)
        result = Value.query.filter_by(var_id='od').first()
        self.assertEqual(result, value)

        # new value with non-existing variable
        value = Value(id=2,
                      time=now(),
                      value=32,
                      dev_id='dev_id_23',
                      var_id='new_var',
                      attribute=1,
                      note=None)
        self.DM.save_value(value)
        result = Value.query.filter_by(var_id='new_var').first()
        self.assertEqual(result, value)

        # check variables
        self.assertIn('new_var', set(self.DM.load_variables()))
Beispiel #12
0
def create_device(id):
    if g.current_user.id != id:
        abort(403)
    user = User.query.get_or_404(id)
    devices = Device.query.all()
    data = request.get_json() or {}
    if 'name' not in data or 'device_type' not in data:
        return bad_request('must include name and device_type fields')
    #TODO:Find a way to get specific users devices and check for reoccuring names
    for i in devices:
        if g.current_user == i.owner:
            if i.name == data['name']:
                return bad_request('Please choose a different name')

    #Sets owner for device
    device = Device(owner=User.query.get(id))
    device.date_reg = datetime.utcnow()
    #TODO: Set comments for certain device types
    device.comment = 'NA'

    device.from_dict(data, new_device=True)
    db.session.add(device)
    db.session.commit()
    response = jsonify(device.to_dict())
    response.status_code = 201
    response.headers['Location'] = url_for('api.get_device', id=user.id)
    return response
Beispiel #13
0
def add_device():
    form = AddDeviceForm()
    if form.validate_on_submit():
        address = form.address.data.upper()
        device = Device.query.filter_by(address=address).one_or_none()
        if device is None:
            device = Device(address=address, user=current_user)
            db.session.commit()
            return redirect(url_for("main.edit_device", device_id=device.id))

        else:
            if device.user == current_user:
                flash(_("You already own this device"), category="warning")
                return redirect(url_for("main.my_devices"))
            else:
                device_claim = DeviceClaim.query.\
                    filter_by(device_id=device.id).\
                    filter_by(claimer=current_user).one_or_none()
                if device_claim is None:
                    flash(_("This device is used by another user"),
                          category="danger")
                    return redirect(
                        url_for("main.claim_device", device_id=device.id))
                else:
                    flash(
                        _("This device is used by another user, but you already opened a claim"
                          ))
                    return redirect(url_for("main.my_devices"))

    return render_template("form_generator.html",
                           title=_("Add Device"),
                           form=form)
Beispiel #14
0
 def post(self):
     image = request.json.get('image')
     device_id = request.json.get('device_id')
     if image and device_id:
         try:
             query = ocr_image(device_id, image)
             if not query:
                 return {'success': False, 'error': 'no text found'}
             text = convert(query)
             if device_exist(device_id):
                 device = Device.query.filter_by(name=device_id).first()
                 device.update(text)
             else:
                 device = Device(name=device_id, text=text)
                 device.save()
             send_to_device(device_id, device.page())
             return {'success': True}
         except:
             return {
                 'success': False,
                 'error': 'an error has occurred'
             }, 500
     else:
         return {
             'success': False,
             'error': "'query' or 'device_id' not found"
         }, 400
    def test_user_device_relationship(self):
        user = User()
        device = Device()
        user.followed_devices.append(device)

        self.assertTrue(user in device.following_users)
        self.assertTrue(device in user.followed_devices)
Beispiel #16
0
 def build(self) -> Device:
     device = Device(Id=self._id,
                     Name=self._name,
                     CallClass=self._callClass,
                     Parameters=self._parameters)
     device.save()
     for function in self._functions:
         function.save()
         device.Functions.add(function)
     return device
Beispiel #17
0
 def test_coprimarykey(self):
     u1 = User(email='*****@*****.**', password='******')
     u2 = User(email='*****@*****.**', password='******')
     db.session.add(u1)
     db.session.add(u2)
     d1 = Device(name='d1')
     d1.users.append(u1)
     d1.users.append(u2)
     db.session.add(d1)
     db.session.commit()
     self.assertTrue(d1.users[1].email == '*****@*****.**')
    def get_device_claim(self):
        owner = User(email='klaus@localhost')
        claimer = User(email='kurt@localhost')
        device = Device(user=owner, address='DD1234')
        device_claim = DeviceClaim(device=device, owner=owner, claimer=claimer)
        db.session.add(device_claim)
        db.session.commit()

        self.assertTrue(device_claim.is_approved is None)
        self.assertEqual(device.user, owner)

        return device_claim
Beispiel #19
0
def add_device():
    """Add device to database
    """
    json_obj = json.loads(request.form.get('form_json'))
    if Device.query\
            .filter_by(designation=json_obj['designation']).first():
        flash('please use a different designation')
    else:
        dev = Device()
        if dev.db_check(json_obj):
            flash('Added device {0}'.format(json_obj['designation']))
    return redirect(url_for('main.get_device_list'))
Beispiel #20
0
def device_save_project():
    # 设备新增专题
    device_code = request.json.get('device_code')
    project_id = request.json.get('project_id')
    Project.query.get_or_404(project_id)
    device = Device.query.filter_by(device_code=device_code).first()
    if not device:
        device = Device(device_code=device_code, project_id=project_id)
    if device.project_id == 0:
        device.project_id = project_id
    device.save()
    return api_success(device.to_dict())
Beispiel #21
0
def add_device():
    form = AddDevice()
    if form.validate_on_submit():
        device = Device()
        device.name = form.name.data
        device.about = form.about.data
        device.location = form.location.data
        device.user_id = current_user.id
        db.session.add(device)
        db.session.commit()
        return redirect(url_for('main.devices'))
    return render_template('main/add_device.html', form=form)
Beispiel #22
0
def register_device():
    form = DeviceRegistrationForm()
    if form.validate_on_submit():
        device = Device(deviceId=form.deviceId.data, devicename=form.devicename.data, name=form.name.data, dept_code=form.dept_code.data, device_function=form.device_function.data,device_bg=form.device_bg.data)
        
        db.session.add(device)
        db.session.commit()
        flash('Congratulations, your device is in the system!\nThe URL your device is localhost:5000/device/'+str(form.deviceId.data))
        new_device_info = Device.query.filter_by(deviceId=form.deviceId.data).first_or_404()
        bg_pic=background_dictionary[deviceId.device_bg]
        return render_template('new_device.html', deviceId=new_device_info, bg_pic=bg_pic) 
    return render_template('register_device.html', title='Add New Device', form=form)
Beispiel #23
0
def import_fakedata():
    a1 = AircraftType(name="ASK-13", category=AircraftCategory.SAILPLANE)
    a2 = AircraftType(name="ASH-25", category=AircraftCategory.SAILPLANE)
    a3 = AircraftType(name="Rhönlärche Ил-32", category=AircraftCategory.SAILPLANE)
    a4 = AircraftType(name="Aquila A210", category=AircraftCategory.PLANE)
    a5 = AircraftType(name="Concorde", category=AircraftCategory.PLANE)
    a6 = AircraftType(name="Eurofox", category=AircraftCategory.ULTRALIGHT)
    a7 = AircraftType(name="Gyrocopter", category=AircraftCategory.ULTRALIGHT)
    a8 = AircraftType(name="EC 120", category=AircraftCategory.HELICOPTER)
    a9 = AircraftType(name="EC 130", category=AircraftCategory.HELICOPTER)
    a10 = AircraftType(name="EC 135", category=AircraftCategory.HELICOPTER)
    a11 = AircraftType(name="DJI S800", category=AircraftCategory.DRONE)
    a12 = AircraftType(name="DJI S900", category=AircraftCategory.DRONE)
    a13 = AircraftType(name="DJI S1000", category=AircraftCategory.DRONE)
    a14 = AircraftType(name="Balloon", category=AircraftCategory.OTHER)
    a15 = AircraftType(name="Paraglider", category=AircraftCategory.OTHER)
    a16 = AircraftType(name="UFO", category=AircraftCategory.OTHER)

    db.session.add_all([a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15, a16])

    u1 = User(email="user1@localhost")
    u1.set_password("topsecret1")

    Device(address="DD1234", device_type=DeviceType.FLARM, aircraft_type=a1, registration="D-1234", cn="34", user=u1)
    Device(address="DD4711", device_type=DeviceType.FLARM, aircraft_type=a2, registration="D-4711", cn="11", user=u1)

    u2 = User(email="user2@localhost")
    u2.set_password("topsecret2")

    Device(address="ABCDEF", device_type=DeviceType.OGN, aircraft_type=a3, registration="D-OTTO", cn="TO", user=u2)

    Receiver(name="Koenigsdf", antenna=Antenna.CHINESE_9DB_JPOLE, preamplifier=Preamplifier.TERRA_AB010, rx_filter=RxFilter.CAVITY, sdr_dongle=SdrDongle.RTLSDR_COM, user=u1)
    Receiver(name="Wank", antenna=Antenna.CHINESE_9DB_JPOLE, preamplifier=Preamplifier.NONE, rx_filter=RxFilter.CBP840, sdr_dongle=SdrDongle.RTLSDR_COM, user=u1)
    Receiver(name="Arber", antenna=Antenna.WIMO_SPERRTOPF, preamplifier=Preamplifier.NONE, rx_filter=RxFilter.CAVITY, sdr_dongle=SdrDongle.RTLSDR_COM, user=u1)
    Receiver(name="Marmolada", antenna=Antenna.CHINESE_9DB_JPOLE, preamplifier=Preamplifier.SELF_BUILT_WITH_FILTER, rx_filter=RxFilter.NONE, sdr_dongle=SdrDongle.RTLSDR_COM, user=u1)

    db.session.add(u1)
    db.session.add(u2)
    db.session.commit()
Beispiel #24
0
def add_device():
    id = request.args.get('id')
    form = DeviceForm()
    if form.validate_on_submit():
        device = Device()
        device.name = form.name.data
        device.describe = form.describe.data
        device.location = form.location.data
        device.user_id = id
        db.session.add(device)
        db.session.commit()
        return redirect(url_for('main.all_devices', id=id))
    return render_template('main/add_device.html', form=form)
Beispiel #25
0
def add_shebei():
    form = SheBeiFrom()
    if form.validate_on_submit():
        device = Device()
        device.name = form.device_name.data
        device.describe = form.device_description.data
        device.location = form.device_address.data
        device.user_id = current_user.id

        db.session.add(device)
        db.session.commit()
        return redirect(url_for('auth.shebei'))
    return render_template('equipment/add-shebei.html', form=form)
Beispiel #26
0
def register():
    data = request.get_json()
    temp_device = db.session.query(Device).filter(
        Device.devicename == data['name'])
    if (temp_device.count() > 0):
        temp_device.first().ipaddress = data['ipaddr']
        temp_device.first().updatetime = datetime.datetime.utcnow()
        db.session.commit()
        return "Updated Device"
    d = Device(devicename=data['name'], ipaddress=data['ipaddr'])
    db.session.add(d)
    db.session.commit()
    return "Added New Device"
Beispiel #27
0
    def test_update(self):
        device = Device(id='dev_id_23', device_class='PSI', device_type='PBR')
        self.DM.insert(device, Device)
        dev_from_DB = Device.query.filter_by(id='dev_id_23').first()
        self.assertIsNone(dev_from_DB.address)

        # get rid of objects in the session
        db.session.remove()

        device.address = "home"
        self.DM.update(device)
        dev_from_DB = Device.query.filter_by(id='dev_id_23').first()
        self.assertEqual(dev_from_DB.address, "home")
Beispiel #28
0
    def post(self):
        # receive (from app): (query, device_id)
        # service:
        # check for strange chars in text
        # if not strange:
        # save text in Device object(device_id)
        # send request with page 1 to device
        # respond to app: success
        # else respond to app: fail
        query = request.json.get('query')
        device_id = request.json.get('device_id')
        if query and device_id:
            # todo: check strange text
            try:
                text = convert(query)  # convert to braille data

                # save to device
                if device_exist(device_id):
                    device = Device.query.filter_by(name=device_id).first()
                    device.update(text)
                else:
                    device = Device(name=device_id, text=text)
                    device.save()

                # todo: send request to device with device_id
                # request to device: device.page()

                send_to_device(device_id, device.page())
                # ***** failed *****
                # msg = json.dumps(device.page())
                # try:
                #     iothub_messaging = IoTHubMessaging(connection_string)
                #     iothub_messaging.open(open_complete_callback, 0)
                #     message = IoTHubMessage(bytearray(msg, 'utf8'))
                #     iothub_messaging.send_async(device_id, message, send_complete_callback, 1)

                # except IoTHubError as iothub_error:
                #     print("Unexpected error {0}" % iothub_error)

                return {'success': True}
            except:
                return {
                    'success': False,
                    'error': 'an error has occurred'
                }, 500
        else:
            return {
                'success': False,
                'error': "'query' or 'device_id' not found"
            }, 400
Beispiel #29
0
    def test_get_latest_data(self):
        # preparations
        device = Device(id='dev_id_23', device_class='PSI', device_type='PBR')
        self.DM.insert(device, Device)
        self.DM._store_permanent()
        # store some values
        values = [
            Value(id=1,
                  time=now(),
                  value=23.0,
                  dev_id='dev_id_23',
                  var_id='od',
                  attribute=1,
                  note=None),
            Value(id=2,
                  time=now(),
                  value=24.0,
                  dev_id='dev_id_23',
                  var_id='od',
                  attribute=1,
                  note=None),
            Value(id=3,
                  time=now(),
                  value=25.0,
                  dev_id='dev_id_23',
                  var_id='od',
                  attribute=1,
                  note=None),
            Value(id=4,
                  time=now(),
                  value=26.0,
                  dev_id='dev_id_23',
                  var_id='od',
                  attribute=1,
                  note=None),
            Value(id=5,
                  time=now(),
                  value=27.0,
                  dev_id='dev_id_23',
                  var_id='od',
                  attribute=1,
                  note=None)
        ]

        for value in values:
            self.DM.save_value(value)

        # get last value
        result = self.DM.get_latest_data(device.id, 'values')
        self.assertEqual(values[4], result)
Beispiel #30
0
def fetch_logger():
    res = requests.get(URL, auth=bws_sul1)

    if res.status_code == 200:
        logger = json.loads(res.text)
        local_logger = [d.sn for d in Device.query.all()]
        if len(local_logger) != len(logger):
            for l in logger:
                if l.get('sn') not in local_logger:
                    new_logger = Device(sn=l.get('sn'))
                    db.session.add(new_logger)
                    db.session.commit()
                    print('Tambah:', new_logger.sn)
    else:
        print(res.status_code)