Skip to content

Commit

Permalink
Merge pull request #60 from jphacks/feature/graph_with_parameter
Browse files Browse the repository at this point in the history
Feature/graph with parameter
  • Loading branch information
motty-mio2 authored Nov 17, 2023
2 parents ff8f940 + 226cab4 commit c8bfa24
Show file tree
Hide file tree
Showing 2 changed files with 101 additions and 56 deletions.
150 changes: 96 additions & 54 deletions src/graph.py
Original file line number Diff line number Diff line change
@@ -1,73 +1,115 @@
from datetime import timedelta, timezone
from uuid import UUID

import plotly.graph_objects as go
import streamlit as st

from kb_2315.backend.crud import crud_sensor, crud_session
from kb_2315.backend.crud import crud_sensor, crud_session, crud_shoe
from kb_2315.backend.models import Sensor


st.set_page_config(layout="wide")

# Parameter
try:
current_shoe_id: int | None = int(st.experimental_get_query_params().get("shoe_id", None)[0]) # type:ignore
if current_shoe_id == 0:
current_shoe_id = None
except Exception:
current_shoe_id = None

try:
current_session_id: str | None = st.experimental_get_query_params().get("session_id", None)[0] # type:ignore
except Exception:
current_session_id = None


# Sidebar

st.sidebar.title("Analyze")

st.sidebar.subheader("Select a Session")
sessions: list[UUID] = [i.session_id for i in crud_session.search_session_by()]
# # Shoe

st.session_state.session_id = st.sidebar.selectbox("Session", sessions)
shoes: dict[int, str] = {0: " All"} | {i.id: f"{i.id} {i.name}" for i in crud_shoe.search_shoe_by()}

current_shoe_index: int | None = list(shoes.keys()).index(current_shoe_id) if current_shoe_id is not None else None

# Main Page

sensors: list[Sensor] = crud_sensor.search_sensor_by(session_id=st.session_state.session_id)


JST = timezone(timedelta(hours=+9), "JST")
timeseries: list[str] = [s.time.astimezone(JST).strftime("%H時%M分%S秒") for s in sensors]

external_temperatures: list[float] = [s.external_temperature for s in sensors]
external_humidities: list[float] = [s.external_humidity for s in sensors]
internal_temperatures: list[float] = [s.internal_temperature for s in sensors]
internal_humidities: list[float] = [s.internal_humidity for s in sensors]


st.subheader("温度")
figT = go.Figure(
data=[
go.Scatter(
x=timeseries,
y=external_temperatures,
name="外気温度",
mode="lines+markers",
),
go.Scatter(
x=timeseries,
y=internal_temperatures,
name="内気温度",
mode="lines+markers",
),
]
)
st.plotly_chart(figT)

st.subheader("湿度")
figH = go.Figure(
data=[
go.Scatter(
x=timeseries,
y=external_humidities,
name="外気温度",
mode="lines+markers",
),
go.Scatter(
x=timeseries,
y=internal_humidities,
name="内気温度",
mode="lines+markers",
),
]
try:
st.session_state.shoe_id = int(
st.sidebar.selectbox(
label="Select a Shoe", options=shoes.values(), index=current_shoe_index, placeholder="靴を選んでください"
).split( # type:ignore
" "
)[
0
]
)

except Exception:
st.session_state.shoe_id = None

# # Session

sessions: list[str] = [str(i.session_id) for i in crud_session.search_session_by(shoe_id=st.session_state.shoe_id)]

try:
currennt_session_index: int | None = sessions.index(current_session_id) # type:ignore
# if current_session_id is not None else None
except Exception:
currennt_session_index = None

st.session_state.session_id = st.sidebar.selectbox(
label="Select a Session", options=sessions, index=currennt_session_index
)
st.plotly_chart(figH)


# Main Page

if st.session_state.session_id is not None:
sensors: list[Sensor] = crud_sensor.search_sensor_by(session_id=st.session_state.session_id)

JST = timezone(timedelta(hours=+9), "JST")
timeseries: list[str] = [s.time.astimezone(JST).strftime("%H時%M分%S秒") for s in sensors]

external_temperatures: list[float] = [s.external_temperature for s in sensors]
external_humidities: list[float] = [s.external_humidity for s in sensors]
internal_temperatures: list[float] = [s.internal_temperature for s in sensors]
internal_humidities: list[float] = [s.internal_humidity for s in sensors]

st.subheader("温度")
figT = go.Figure(
data=[
go.Scatter(
x=timeseries,
y=external_temperatures,
name="外気温度",
mode="lines+markers",
),
go.Scatter(
x=timeseries,
y=internal_temperatures,
name="内気温度",
mode="lines+markers",
),
]
)
st.plotly_chart(figT)

st.subheader("湿度")
figH = go.Figure(
data=[
go.Scatter(
x=timeseries,
y=external_humidities,
name="外気温度",
mode="lines+markers",
),
go.Scatter(
x=timeseries,
y=internal_humidities,
name="内気温度",
mode="lines+markers",
),
]
)
st.plotly_chart(figH)
7 changes: 5 additions & 2 deletions src/kb_2315/backend/crud/crud_sensor.py
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ def search_sensor_by(
self,
id: int | None = None,
device_id: str | None = None,
session_id: UUID | None = None,
session_id: UUID | str | None = None,
) -> list[Sensor]:
with self._Session() as session:
query: Query[Sensor] = session.query(Sensor)
Expand All @@ -47,7 +47,10 @@ def search_sensor_by(
query = query.filter(Sensor.device_id == id)

if session_id is not None:
query = query.filter(Sensor.session_id == session_id)
if isinstance(session_id, str):
query = query.filter(Sensor.session_id == UUID(session_id))
else:
query = query.filter(Sensor.session_id == session_id)

ret: list[Sensor] = query.all()

Expand Down

0 comments on commit c8bfa24

Please sign in to comment.