2 changed files with 175 additions and 1 deletions
@ -0,0 +1,172 @@ |
|||||
|
import "chartjs-adapter-date-fns"; |
||||
|
|
||||
|
import type React from "react"; |
||||
|
|
||||
|
import { |
||||
|
Chart as ChartJS, |
||||
|
Filler, |
||||
|
Legend, |
||||
|
LinearScale, |
||||
|
LineElement, |
||||
|
PointElement, |
||||
|
TimeSeriesScale, |
||||
|
Tooltip |
||||
|
} from "chart.js"; |
||||
|
import { Line } from "react-chartjs-2"; |
||||
|
|
||||
|
import { useDevice } from "@app/core/providers/useDevice.js"; |
||||
|
|
||||
|
export const Sensor = (): JSX.Element => { |
||||
|
const { nodes, hardware } = useDevice(); |
||||
|
|
||||
|
const myNode = nodes.find((n) => n.data.num === hardware.myNodeNum); |
||||
|
|
||||
|
ChartJS.register( |
||||
|
LinearScale, |
||||
|
PointElement, |
||||
|
LineElement, |
||||
|
Tooltip, |
||||
|
Filler, |
||||
|
Legend, |
||||
|
TimeSeriesScale |
||||
|
); |
||||
|
|
||||
|
return ( |
||||
|
<div className="flex h-full w-full flex-grow"> |
||||
|
<Line |
||||
|
className="h-full w-full flex-grow" |
||||
|
options={{ |
||||
|
responsive: true, |
||||
|
maintainAspectRatio: false, |
||||
|
interaction: { |
||||
|
mode: "index", |
||||
|
intersect: false |
||||
|
}, |
||||
|
line: { |
||||
|
datasets: { |
||||
|
tension: 0.5 |
||||
|
} |
||||
|
}, |
||||
|
scales: { |
||||
|
x: { |
||||
|
type: "timeseries", |
||||
|
ticks: { |
||||
|
display: false |
||||
|
} |
||||
|
}, |
||||
|
y: { |
||||
|
ticks: { |
||||
|
display: false |
||||
|
} |
||||
|
}, |
||||
|
y1: { |
||||
|
display: false |
||||
|
}, |
||||
|
y2: { |
||||
|
display: false |
||||
|
}, |
||||
|
y3: { |
||||
|
display: false |
||||
|
}, |
||||
|
y4: { |
||||
|
display: false |
||||
|
}, |
||||
|
y5: { |
||||
|
display: false |
||||
|
} |
||||
|
}, |
||||
|
plugins: {} |
||||
|
}} |
||||
|
data={{ |
||||
|
labels: [], |
||||
|
datasets: [ |
||||
|
{ |
||||
|
fill: true, |
||||
|
label: "barometricPressure", |
||||
|
yAxisID: "y", |
||||
|
data: myNode?.environmentMetrics.map((metric) => { |
||||
|
return { |
||||
|
x: metric.timestamp, |
||||
|
y: metric.barometricPressure |
||||
|
}; |
||||
|
}), |
||||
|
backgroundColor: "rgba(102, 126, 234, 0.25)", |
||||
|
borderColor: "rgba(102, 126, 234, 1)", |
||||
|
pointBackgroundColor: "rgba(102, 126, 234, 1)" |
||||
|
}, |
||||
|
{ |
||||
|
fill: true, |
||||
|
label: "current", |
||||
|
yAxisID: "y1", |
||||
|
data: myNode?.environmentMetrics.map((metric) => { |
||||
|
return { |
||||
|
x: metric.timestamp, |
||||
|
y: metric.current |
||||
|
}; |
||||
|
}), |
||||
|
backgroundColor: "rgba(237, 100, 166, 0.25)", |
||||
|
borderColor: "rgba(237, 100, 166, 1)", |
||||
|
pointBackgroundColor: "rgba(237, 100, 166, 1)" |
||||
|
}, |
||||
|
{ |
||||
|
fill: true, |
||||
|
label: "gasResistance", |
||||
|
yAxisID: "y2", |
||||
|
data: myNode?.environmentMetrics.map((metric) => { |
||||
|
return { |
||||
|
x: metric.timestamp, |
||||
|
y: metric.gasResistance |
||||
|
}; |
||||
|
}), |
||||
|
backgroundColor: "rgba(113, 234, 102, 0.25)", |
||||
|
borderColor: "rgba(113, 234, 102, 1)", |
||||
|
pointBackgroundColor: "rgba(113, 234, 102, 1)" |
||||
|
}, |
||||
|
{ |
||||
|
fill: true, |
||||
|
label: "relativeHumidity", |
||||
|
yAxisID: "y3", |
||||
|
data: myNode?.environmentMetrics.map((metric) => { |
||||
|
return { |
||||
|
x: metric.timestamp, |
||||
|
y: metric.relativeHumidity |
||||
|
}; |
||||
|
}), |
||||
|
backgroundColor: "rgba(234, 166, 102, 0.25)", |
||||
|
borderColor: "rgba(234, 166, 102, 1)", |
||||
|
pointBackgroundColor: "rgba(234, 166, 102, 1)" |
||||
|
}, |
||||
|
{ |
||||
|
fill: true, |
||||
|
label: "temperature", |
||||
|
yAxisID: "y4", |
||||
|
data: myNode?.environmentMetrics.map((metric) => { |
||||
|
return { |
||||
|
x: metric.timestamp, |
||||
|
y: metric.temperature |
||||
|
}; |
||||
|
}), |
||||
|
backgroundColor: "rgba(38, 255, 212, 0.25)", |
||||
|
borderColor: "rgba(38, 255, 212, 1)", |
||||
|
pointBackgroundColor: "rgba(38, 255, 212, 1)" |
||||
|
}, |
||||
|
{ |
||||
|
fill: true, |
||||
|
label: "voltage", |
||||
|
yAxisID: "y5", |
||||
|
data: myNode?.environmentMetrics.map((metric) => { |
||||
|
return { |
||||
|
x: metric.timestamp, |
||||
|
y: metric.voltage |
||||
|
}; |
||||
|
}), |
||||
|
backgroundColor: "rgba(247, 255, 15, 0.25)", |
||||
|
borderColor: "rgba(247, 255, 15, 1)", |
||||
|
pointBackgroundColor: "rgba(247, 255, 15, 1)" |
||||
|
} |
||||
|
] |
||||
|
}} |
||||
|
/> |
||||
|
</div> |
||||
|
); |
||||
|
}; |
||||
Loading…
Reference in new issue