add app_dash.py and some files

This commit is contained in:
Mathieu Moran
2023-11-18 00:23:00 -05:00
parent 37f7d99883
commit 7a90b3768a
12 changed files with 116 additions and 50 deletions
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+16 -8
View File
@@ -1,18 +1,15 @@
from flask import Flask, render_template, make_response, json from flask import Flask, render_template, make_response, json
import app_obd, app_car, app_account, time import app_obd, app_car, app_account, time, app_events
from app_events import socketio from app_events import socketio
app = Flask(__name__) app = Flask(__name__)
socketio.init_app(app) socketio.init_app(app)
app_obd.obd_connection()
account = app_account.Account()
obd = app_obd.OBD()
car = app_car.Car()
@app.route('/') @app.route('/')
def index(): def index():
print("hello "+account.name) print("hello")
return render_template('index.html', account = account) return render_template('index.html')
@app.route('/dtc') @app.route('/dtc')
def dtc(): def dtc():
@@ -24,4 +21,15 @@ def data():
data = app_obd.speed data = app_obd.speed
response = make_response(json.dumps(data)) response = make_response(json.dumps(data))
response.content_type = 'application/json' response.content_type = 'application/json'
return response return response
if __name__ == "__main__":
parser = argparse.ArgumentParser(
description="Run the Flask application with a custom port."
)
parser.add_argument(
"--port", type=int, default=5000, help="Port number (default is 5000)"
)
args = parser.parse_args()
app.run(debug=True, port=args.port)
+12 -21
View File
@@ -1,27 +1,18 @@
import app_car as Car import app_car as Car
import threading, app_events
from threading import Thread
account_car = Car() socketio = app_events.SocketIO()
account_car.model = "YARIS" account_name = "quoije"
account_pp_image = "static\img\image.png" account_pp_image = "static\img\image.png"
account_info = ["name","pp_image", "car_model"] account_car = Car
account_car.model = "YARIS"
account_lock = threading.Lock()
class Account: class Account:
def __init__(self): def __init__(self):
self.name = "quoije" self.name = account_name
self.pp_image = None self.pp_image = account_pp_image
self.car = account_car.model self.car = account_car
def info():
def account_info(): return [name, pp_image, car.model]
obd_speed_lock.acquire()
cmd = obd.commands.GET_DTC # select an OBD command (sensor)
response = connection.query(cmd) # send the command and parse the response
try:
if response.is_null():
error_txt = "No data received."
print(error_txt)
socketio.emit('obd_dtc', error_txt)
else:
print(response.value)
socketio.emit('obd_dtc', response.value)
finally:
obd_rpm_lock.release()
+38
View File
@@ -0,0 +1,38 @@
import os
import shutil
from tqdm import tqdm
def mount_device(device, mount_point):
os.system(f"sudo mount {device} {mount_point}")
def unmount_device(mount_point):
os.system(f"sudo umount {mount_point}")
def copy_files(source_folder, destination_folder):
if not os.path.exists(destination_folder):
os.makedirs(destination_folder)
for root, dirs, files in os.walk(source_folder):
for file in tqdm(files, desc="Copying files", unit="file"):
source_path = os.path.join(root, file)
destination_path = os.path.join(destination_folder, file)
# Check if the file already exists in the destination folder
if not os.path.exists(destination_path):
shutil.copy2(source_path, destination_folder)
if __name__ == "__main__":
source_device = "/dev/sda"
mount_point = "/mnt/dash"
destination_folder = "~/yaris-obd/dash/videos"
try:
# Mount the device
mount_device(source_device, mount_point)
# Copy files from source to destination
copy_files(os.path.join(mount_point, "DCIM"), os.path.expanduser(destination_folder))
finally:
# Unmount the device (even if an exception occurs)
unmount_device(mount_point)
+1 -2
View File
@@ -1,6 +1,6 @@
from flask_socketio import SocketIO from flask_socketio import SocketIO
from threading import Thread from threading import Thread
import app_obd, time, threading import app_obd, app_account, time, threading
socketio = SocketIO() socketio = SocketIO()
uptime_lock = threading.Lock() uptime_lock = threading.Lock()
@@ -9,7 +9,6 @@ uptime_lock = threading.Lock()
def connect_event(): def connect_event():
print('Client connected') print('Client connected')
print('Getting OBD status...') print('Getting OBD status...')
app_obd.obd_connection()
uptime() uptime()
def uptime(): def uptime():
+43 -17
View File
@@ -5,7 +5,7 @@ from threading import Thread
status = None status = None
speed = 0 speed = 0
rpm = None rpm = 0
class OBD: class OBD:
def __init__(self): def __init__(self):
@@ -15,7 +15,9 @@ class OBD:
obd_status = ["Disconnected", "Connected", "Connection...", "wtf"] obd_status = ["Disconnected", "Connected", "Connection...", "wtf"]
obd_speed_lock = threading.Lock() obd_speed_lock = threading.Lock()
obd_speed_rpm = threading.Lock() obd_rpm_lock = threading.Lock()
obd_dtc_lock = threading.Lock()
obd_state_lock = threading.Lock()
try: try:
print(obd_status[2]) print(obd_status[2])
@@ -31,21 +33,28 @@ def get_speedtime():
time_now = str(date.strftime("%H:%M:%S")) time_now = str(date.strftime("%H:%M:%S"))
return [str(time_now), speed] return [str(time_now), speed]
@socketio.on('obd') def obd_connection():
def obd_connection():
if connection.is_connected(): if connection.is_connected():
print(obd_status[1]) print(obd_status[1])
socketio.emit('obd_status', obd_status[1])
print("OBD connection established.") print("OBD connection established.")
obd_events(1)
else: else:
print("OBD connection failed.") print("OBD connection failed.")
print(obd_status[0]) print(obd_status[0])
obd_events(2)
socketio.emit('obd_status', obd_status[0]) @socketio.on('obd')
socketio.emit('obd_speed', "-") def obd_events(status):
socketio.emit('obm_error', "-") if status == 1:
socketio.emit('obd_rpm', "-") thread_speed = Thread(target=obd_state(1))
thread_speed.daemon = True
thread_speed.start()
elif status == 2:
thread_speed = Thread(target=obd_state(2))
thread_speed.daemon = True
thread_speed.start()
# debug speed for testing # debug speed for testing
thread_speed = Thread(target=obd_speed) thread_speed = Thread(target=obd_speed)
@@ -56,7 +65,23 @@ def obd_connection():
thread_rpm = Thread(target=obd_rpm) thread_rpm = Thread(target=obd_rpm)
thread_rpm.daemon = True thread_rpm.daemon = True
thread_rpm.start() thread_rpm.start()
else:
thread_speed = Thread(target=obd_state(0))
thread_speed.daemon = True
thread_speed.start()
def obd_state(status):
obd_state_lock.acquire()
loop = True
try:
while loop == True:
socketio.emit('obd_status', obd_status[status])
time.sleep(2)
finally:
obd_state_lock.release()
def obd_speed(): def obd_speed():
obd_speed_lock.acquire() obd_speed_lock.acquire()
cmd = obd.commands.SPEED # select an OBD command (sensor) cmd = obd.commands.SPEED # select an OBD command (sensor)
@@ -64,6 +89,7 @@ def obd_speed():
loop = True loop = True
try: try:
while loop == True: while loop == True:
socketio.emit('obd_status', obd_status[3])
global speed global speed
speed = speed + 1 speed = speed + 1
time.sleep(1) time.sleep(1)
@@ -78,26 +104,26 @@ def obd_speed():
obd_speed_lock.release() obd_speed_lock.release()
def obd_rpm(): def obd_rpm():
obd_speed_lock.acquire() obd_rpm_lock.acquire()
cmd = obd.commands.RPM # select an OBD command (sensor) cmd = obd.commands.RPM # select an OBD command (sensor)
response = connection.query(cmd) # send the command and parse the response response = connection.query(cmd) # send the command and parse the response
loop = True loop = True
try: try:
while loop == True: while loop == True:
global rpm global rpm
speed = speed + 1 rpm = rpm + 1
time.sleep(1) time.sleep(1)
if response.is_null(): if response.is_null():
print("No data received. #"+ str(get_speedtime())) print("No data received. #"+"RPM :"+str(rpm))
socketio.emit('obd_speed', get_speedtime()) socketio.emit('obd_rpm', rpm)
else: else:
print("RPM:", response.value) print("RPM:", response.value)
socketio.emit('obd_speed', response.value.to("kph")) socketio.emit('obd_rpm', response.value.to("kph"))
finally: finally:
obd_rpm_lock.release() obd_rpm_lock.release()
def obd_dtc(): def obd_dtc():
obd_speed_lock.acquire() obd_dtc_lock.acquire()
cmd = obd.commands.GET_DTC # select an OBD command (sensor) cmd = obd.commands.GET_DTC # select an OBD command (sensor)
response = connection.query(cmd) # send the command and parse the response response = connection.query(cmd) # send the command and parse the response
try: try:
@@ -109,7 +135,7 @@ def obd_dtc():
print(response.value) print(response.value)
socketio.emit('obd_dtc', response.value) socketio.emit('obd_dtc', response.value)
finally: finally:
obd_rpm_lock.release() obd_dtc_lock.release()
def kill_obd(obd_type): def kill_obd(obd_type):
if obd_type == "speed": if obd_type == "speed":
+5 -1
View File
@@ -32,6 +32,10 @@ chart = new Chart(ctx, {
} }
}); });
// account
// websockets // websockets
socket.on('connect', function(data) { socket.on('connect', function(data) {
@@ -41,7 +45,7 @@ socket.on('connect', function(data) {
socket.on('account_info', function(data) { socket.on('account_info', function(data) {
console.log(data); console.log(data);
// car model // car model
const car_model = document.getElementById('index-car-model'); const car_model = document.getElementById('index-car-model');
car_model.innerHTML = data; car_model.innerHTML = data;
}); });
+1 -1
View File
@@ -15,7 +15,7 @@
<nav class="navbar align-items-start sidebar sidebar-dark accordion bg-gradient-primary p-0 navbar-dark" style="color: var(--bs-accordion-btn-focus-border-color);background: rgb(0,0,0);filter: blur(0px);backdrop-filter: blur(0px) hue-rotate(0deg);"> <nav class="navbar align-items-start sidebar sidebar-dark accordion bg-gradient-primary p-0 navbar-dark" style="color: var(--bs-accordion-btn-focus-border-color);background: rgb(0,0,0);filter: blur(0px);backdrop-filter: blur(0px) hue-rotate(0deg);">
<div class="container-fluid d-flex flex-column p-0"><a class="navbar-brand d-flex justify-content-center align-items-center sidebar-brand m-0" href="#"> <div class="container-fluid d-flex flex-column p-0"><a class="navbar-brand d-flex justify-content-center align-items-center sidebar-brand m-0" href="#">
<div class="sidebar-brand-icon rotate-n-15"><i class="fas fa-car"></i></div> <div class="sidebar-brand-icon rotate-n-15"><i class="fas fa-car"></i></div>
<div class="sidebar-brand-text mx-3"><span>yaris&nbsp;</span></div> <div id="index-car-model" class="sidebar-brand-text mx-3"><span>CAR MODEL</span></div>
</a> </a>
<hr class="sidebar-divider my-0"> <hr class="sidebar-divider my-0">
<ul class="navbar-nav text-light" id="accordionSidebar"> <ul class="navbar-nav text-light" id="accordionSidebar">