Skip to content

Commit 6446adf

Browse files
authored
Initialize main directory
When you run log.py you can customize the session, then run graph.py to pull up a chart
0 parents  commit 6446adf

File tree

7 files changed

+919
-0
lines changed

7 files changed

+919
-0
lines changed

Charts/control_chart.html

Lines changed: 14 additions & 0 deletions
Large diffs are not rendered by default.

Database.db

312 KB
Binary file not shown.

Sessions/session1.CSV

Lines changed: 502 additions & 0 deletions
Large diffs are not rendered by default.

Sessions/session2.CSV

Lines changed: 229 additions & 0 deletions
Large diffs are not rendered by default.

backend.py

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
from sqlalchemy import create_engine, Column, Integer, Float, String, func
2+
from sqlalchemy.orm import sessionmaker
3+
from sqlalchemy.ext.declarative import declarative_base
4+
5+
Base = declarative_base()
6+
7+
class DataRecords(Base):
8+
__tablename__ = 'DataRecords'
9+
RecordID = Column(Integer, primary_key=True)
10+
SessionID = Column(Integer)
11+
PartNumber = Column(String)
12+
Value = Column(Float)
13+
TimeStamp = Column(Float)
14+
15+
def start_engine():
16+
global session
17+
engine = create_engine('sqlite:///Database.db')
18+
19+
Base.metadata.create_all(engine)
20+
21+
Session = sessionmaker(bind=engine)
22+
session = Session()
23+
24+
25+
def add_record(sessionID, partno, value, dt):
26+
record = DataRecords(SessionID=sessionID, RecordID=most_recent_record(), PartNumber=partno, Value=value, TimeStamp=dt)
27+
session.add(record)
28+
session.commit()
29+
30+
def get_records():
31+
records = session.query(DataRecords).order_by(DataRecords.TimeStamp)
32+
for record in records:
33+
print(record.SessionID, record.RecordID, record.PartNumber, record.Value, record.TimeStamp)
34+
35+
def most_recent_record():
36+
max_record_id = session.query(func.max(DataRecords.RecordID)).scalar()
37+
if max_record_id == None:
38+
return 0
39+
else:
40+
return max_record_id + 1
41+
42+
def most_recent_session():
43+
max_session_id = session.query(func.max(DataRecords.SessionID)).scalar()
44+
if max_session_id == None:
45+
return 0
46+
else:
47+
return max_session_id + 1
48+
49+
def test_sensor():
50+
start_engine()
51+
52+
# Query all records where the PartNumber column contains "Engine Speed"
53+
results = session.query(DataRecords).filter(DataRecords.PartNumber.like('%Engine Speed%')).all()
54+
55+
# Iterate over the results and print the values
56+
for result in results:
57+
print(result.PartNumber, result.Value, result.TimeStamp)
58+
59+
stop_engine()
60+
61+
def stop_engine():
62+
session.close()
63+
64+
65+
# Delete all records from the DataRecords table
66+
def delete_records():
67+
start_engine()
68+
session.query(DataRecords).delete()
69+
session.commit()
70+
stop_engine()
71+
72+
def test_engine():
73+
import random
74+
start_engine()
75+
add_record("Engine Speed", random.randint(1,100), str(random.randint(1,10)))
76+
get_records()
77+
stop_engine()
78+
79+
#test_engine()
80+
#delete_records()
81+
#test_sensor()
82+

graph.py

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
import plotly.express as px
2+
import random
3+
from sqlalchemy import create_engine
4+
from sqlalchemy.orm import sessionmaker
5+
from sqlalchemy import func
6+
import pandas as pd
7+
from sqlalchemy import create_engine, Column, Integer, Float, String
8+
from sqlalchemy.orm import sessionmaker
9+
from sqlalchemy.ext.declarative import declarative_base
10+
import plotly.offline as pyo
11+
12+
Base = declarative_base()
13+
14+
15+
class DataRecords(Base):
16+
__tablename__ = "DataRecords"
17+
RecordID = Column(Integer, primary_key=True)
18+
SessionID = Column(Integer)
19+
PartNumber = Column(String)
20+
Value = Column(Float)
21+
TimeStamp = Column(Float)
22+
23+
24+
engine = create_engine("sqlite:///Database.db")
25+
Session = sessionmaker(bind=engine)
26+
session = Session()
27+
28+
df = session.query(DataRecords).order_by(DataRecords.TimeStamp).all()
29+
df = pd.DataFrame(
30+
[(record.PartNumber, record.Value, record.TimeStamp) for record in df],
31+
columns=["PartNumber", "Value", "TimeStamp"],
32+
)
33+
df = df.sort_values(by=["TimeStamp"])
34+
35+
fig = px.scatter(df, x="TimeStamp", y="Value")
36+
37+
# Set number of y-axis and x-axis tick marks
38+
fig.update_layout(yaxis_nticks=4, xaxis_nticks=10, hovermode="x")
39+
40+
# Group data by PartNumber
41+
for part_number, group_df in df.groupby(by="PartNumber"):
42+
fig.add_scatter(
43+
x=group_df["TimeStamp"],
44+
y=group_df["Value"],
45+
mode="lines+markers",
46+
name=part_number,
47+
line_shape="spline",
48+
)
49+
fig.update_traces(
50+
marker=dict(
51+
size=1, color=["red", "blue", "green", "purple", "orange", "yellow", "pink"]
52+
)
53+
)
54+
55+
pyo.offline.plot(fig, filename="control_chart.html")
56+
57+
# Show plot
58+
fig.show()
59+
60+
session.close()

log.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
import backend as db
2+
3+
def reader(path):
4+
directory = "C:/Users/Erik/Desktop/Audi/"
5+
with open(directory + path, "r") as f:
6+
content = f.read().split("\n")
7+
8+
# Every other header starting index 1 is time stamp
9+
headers = content[5].split(",")[2:][::2]
10+
11+
# Chop off leading and trailing comma
12+
data = content[7:-1]
13+
14+
# Tag the current session
15+
sessionID = db.most_recent_session()
16+
17+
# Loop through all data
18+
for record in data:
19+
line = record.split(",")[1:-1]
20+
times = line[::2]
21+
sensors = line[1::2]
22+
23+
for i, sensor in enumerate(sensors):
24+
print(f"Sensor Name: {headers[i]} Sensor Value: {sensor} Time: {times[i]}")
25+
26+
db.add_record(sessionID, headers[i], float(sensor), times[i])
27+
28+
try:
29+
db.start_engine()
30+
reader("session3.csv")
31+
finally:
32+
db.stop_engine()

0 commit comments

Comments
 (0)