You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
167 lines
7.1 KiB
167 lines
7.1 KiB
from flask import render_template, Blueprint, request, flash, redirect, url_for, jsonify
|
|
import minibase.theme as theme
|
|
from minibase.blueprints.sensor.models import nbiotDevice
|
|
import minibase.blueprints.sensor.utils as sensorUtils
|
|
from minibase.blueprints.sensor.forms import updateNbioDeviceUpdateForm, updateNbioDeviceAddForm
|
|
import minibase.blueprints.database.utils as dbUtils
|
|
import minibase.blueprints.company.utils as companyUtils
|
|
import minibase.blueprints.user.utils as userUtils
|
|
import minibase.blueprints.main.utils as mainUtils
|
|
from minibase.app import db
|
|
import json
|
|
import os
|
|
|
|
# TODO:
|
|
|
|
sensor = Blueprint('sensor', __name__, template_folder='templates')
|
|
|
|
DATA_FILE = 'data.json'
|
|
|
|
@sensor.route('/callback', methods=['POST'])
|
|
def callback():
|
|
data = request.json
|
|
|
|
if not data:
|
|
return ({"error": "Invalid data"}), 400
|
|
|
|
# Access each element from the data
|
|
customer_id = data[0].get("customerId")
|
|
rcv_time = data[0].get("rcvTime")
|
|
src_imsi = data[0].get("srcImsi")
|
|
src_ip = data[0].get("srcIP")
|
|
src_port = data[0].get("srcPort")
|
|
payload = data[0].get("payload")
|
|
|
|
# Print the elements to the console (for debugging)
|
|
#print(f"Customer ID: {customer_id}")
|
|
#print(f"Receive Time: {rcv_time}")
|
|
#print(f"Source IMSI: {src_imsi}")
|
|
#print(f"Source IP: {src_ip}")
|
|
#print(f"Source Port: {src_port}")
|
|
#print(f"Payload: {payload}")
|
|
|
|
response_data = {
|
|
"customerId": customer_id,
|
|
"rcvTime": rcv_time,
|
|
"srcImsi": src_imsi,
|
|
"srcIP": src_ip,
|
|
"srcPort": src_port,
|
|
"payload": payload
|
|
}
|
|
sensorUtils.decode_payload(payload)
|
|
|
|
return jsonify(response_data), 200
|
|
#return 'data recieved', 200
|
|
|
|
|
|
@sensor.route('/data', methods=['GET'])
|
|
def get_data():
|
|
if os.path.exists(DATA_FILE):
|
|
with open(DATA_FILE, 'r') as f:
|
|
stored_data = json.load(f)
|
|
else:
|
|
stored_data = []
|
|
|
|
return jsonify(stored_data)
|
|
|
|
|
|
@sensor.route('/list', methods=['GET','POST'])
|
|
def list():
|
|
page=request.args.get('page', 1, type=int)
|
|
table=dbUtils.table_printable_paginate(nbiotDevice, page, 20, 'edit/', 'id')
|
|
return(render_template('view.html', theme=theme, table=table, title="Devices List"))
|
|
|
|
|
|
@sensor.route("/edit/<int:deviceId>", methods=['GET', 'POST'])
|
|
def edit(deviceId):
|
|
if deviceId:
|
|
device = nbiotDevice.query.get_or_404(deviceId)
|
|
form = updateNbioDeviceUpdateForm(current_device_id=device.id)
|
|
form.user_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_user_id)]
|
|
form.owner_id.choices = [(row.id, row.username) for row in userUtils.queryUserNamesWithDefault(device.device_owner_id)]
|
|
form.manufacturer_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(device.company_manufacturer_id)]
|
|
form.company_id.choices = [(row.id, row.name) for row in companyUtils.queryNamesWithDefault(device.company_owner_id)]
|
|
form.status_id.choices = [(row.id, row.name) for row in sensorUtils.queryStatusNamesWithDefault(device.status_id)]
|
|
form.type_id.choices = [(row.id, row.name) for row in sensorUtils.queryTypeNamesWithDefault(device.type_id)]
|
|
form.area_id.choices = [(row.id, row.name) for row in sensorUtils.queryAreaNamesWithDefault(device.area_id)]
|
|
if form.validate_on_submit():
|
|
if form.picture.data:
|
|
picture_file = mainUtils.save_picture(form.picture.data)
|
|
device.image_file = picture_file
|
|
device.name=form.name.data
|
|
device.serial_no = form.serial_no.data
|
|
device.device_id=form.device_id.data
|
|
device.imsi=form.imsi.data
|
|
device.iccid=form.iccid.data
|
|
device.ip=form.ip.data
|
|
device.port=form.port.data
|
|
device.registration_date=form.registration_date.data
|
|
device.activation_date=form.activation_date.data
|
|
device.deactivation_date=form.deactivation_date.data
|
|
device.device_owner_id=form.owner_id.data
|
|
device.device_user_id=form.user_id.data
|
|
device.status_id=form.status_id.data
|
|
device.type_id=form.type_id.data
|
|
device.area_id=form.area_id.data
|
|
device.company_manufacturer_id = form.manufacturer_id.data
|
|
device.company_owner_id = form.company_id.data
|
|
db.session.commit()
|
|
flash('Device has been successfully updated', 'success')
|
|
return redirect(url_for('sensor.edit', deviceId=deviceId))
|
|
elif request.method == 'GET':
|
|
form.name.data = device.name
|
|
form.serial_no.data = device.serial_no
|
|
form.device_id.data = device.device_id
|
|
form.imsi.data = device.imsi
|
|
form.iccid.data = device.iccid
|
|
form.ip.data = device.ip
|
|
form.port.data = device.port
|
|
form.registration_date.data = device.registration_date
|
|
form.activation_date.data = device.activation_date
|
|
form.deactivation_date.data = device.deactivation_date
|
|
form.user_id.data = device.device_user.username
|
|
form.owner_id.data = device.device_owner.username
|
|
form.manufacturer_id.data = device.company_manufacturer.name
|
|
form.company_id.data = device.company_owner.name
|
|
form.status_id.data = device.status.name
|
|
form.type_id.data = device.type.name
|
|
form.area_id.data = device.area.name
|
|
image_file = url_for('static', filename='pics/' + sensorUtils.queryImageById(deviceId))
|
|
return render_template('sensor/account.html',
|
|
theme=theme,
|
|
image_file=image_file,
|
|
form=form)
|
|
else:
|
|
flash('You need to select a Device id', 'alarm')
|
|
return redirect(url_for('sensor.list'))
|
|
|
|
|
|
@sensor.route('/add', methods=['GET', 'POST'])
|
|
def add():
|
|
form = updateNbioDeviceAddForm()
|
|
form.user_id.choices = [(row.id, row.username) for row in userUtils.queryUserChoices(1)]
|
|
form.status_id.choices = [(row.id, row.name) for row in sensorUtils.queryStatusChoices(1)]
|
|
form.type_id.choices = [(row.id, row.name) for row in sensorUtils.queryTypeChoices(1)]
|
|
form.area_id.choices = [(row.id, row.name) for row in sensorUtils.queryAreaChoices(1)]
|
|
if form.validate_on_submit():
|
|
dev = nbiotDevice(
|
|
name=form.name.data,
|
|
device_id=form.device_id.data,
|
|
imsi=form.imsi.data,
|
|
iccid=form.iccid.data,
|
|
ip=form.ip.data,
|
|
port=form.port.data,
|
|
registration_date=form.registration_date.data,
|
|
activation_date=form.activation_date.data,
|
|
deactivation_date=form.deactivation_date.data,
|
|
user_id=form.user_id.data,
|
|
status_id=form.status_id.data,
|
|
type_id=form.type_id.data,
|
|
area_id=form.area_id.data)
|
|
dbUtils.dbAddAndCommit(dev)
|
|
flash('Device has been successfully added', 'success')
|
|
|
|
return render_template('sensor/account.html',
|
|
theme=theme,
|
|
form=form)
|