diff --git a/main.py b/main.py
index 69bcbc4..0038cd5 100644
--- a/main.py
+++ b/main.py
@@ -437,7 +437,7 @@ def render_vehicles(vehicle):
for sig in frame_def.signals:
unit_str = f" ({sig.unit})" if sig.unit else ""
title = f"{frame_def.can_id} - {sig.name}{unit_str}"
- fig = vehicle_module.plot_signal(decoded, sig.name, title=title)
+ fig = vehicle_module.plot_signal(decoded, sig.name, title=title, color=frame_def.color)
card = dbc.Card([
dbc.CardBody([
diff --git a/vehicle/base.py b/vehicle/base.py
index d70e040..56e20db 100644
--- a/vehicle/base.py
+++ b/vehicle/base.py
@@ -23,6 +23,7 @@ class SignalDef:
class FrameDef:
can_id: str
description: str = ""
+ color: str = "#377eb8"
signals: List[SignalDef] = field(default_factory=list)
def normalize_id(can_id: str) -> str:
@@ -92,7 +93,7 @@ def decode_dataframe(df: pd.DataFrame, can_id: str, decoder_rules: dict) -> pd.D
return out
-def plot_signal(df: pd.DataFrame, signal_name: str, title: str, height: int = 280) -> go.Figure:
+def plot_signal(df: pd.DataFrame, signal_name: str, title: str, color: str = "#377eb8", height: int = 280) -> go.Figure:
fig = go.Figure()
if df.empty or signal_name not in df.columns:
@@ -109,7 +110,7 @@ def plot_signal(df: pd.DataFrame, signal_name: str, title: str, height: int = 28
x=df["Timestamp"],
y=df[signal_name],
mode="lines",
- line=dict(width=2, color="#377eb8"),
+ line=dict(width=2, color=color),
name=signal_name,
hovertemplate=f"{signal_name}
Time: %{{x}}
Value: %{{y:.2f}}",
))
diff --git a/vehicle/komatsu.py b/vehicle/komatsu.py
index 5d91baa..121134e 100644
--- a/vehicle/komatsu.py
+++ b/vehicle/komatsu.py
@@ -10,6 +10,7 @@ DECODER_RULES = {
normalize_id("0x011F"): FrameDef(
can_id="0x011F",
description="Engine ECM Main Broadcast",
+ color="#e41a1c",
signals=[
SignalDef(
name="Engine",
@@ -25,15 +26,41 @@ DECODER_RULES = {
name="Pressure / Load",
bit_start=16,
bit_length=16,
- factor=1.0,
- offset=0.0,
+ factor=0.05,
+ offset=0,
is_signed=False,
byte_order="little",
- unit="raw",
+ unit="%",
+ ),
+ ],
+ ),
+ normalize_id("0x0CFF3300"): FrameDef(
+ can_id="0x0CFF3300",
+ description="Engine temperature block",
+ color="#0080fe",
+ signals=[
+ SignalDef(
+ name="Engine coolant temp",
+ bit_start=8,
+ bit_length=8,
+ factor=1,
+ offset=0.0,
+ is_signed=False,
+ byte_order="big",
+ unit="℃",
+ ),
+ SignalDef(
+ name="Engine oil temp",
+ bit_start=40,
+ bit_length=8,
+ factor=1,
+ offset=0.0,
+ is_signed=False,
+ byte_order="big",
+ unit="℃",
),
],
),
-
}
def decode_dataframe(df, can_id):