Telemetry graph
Displaying graph data#
Users can view the readings data on a graph. The X-axis displays the time values and the Y-axis displays the last 10 values for the reading category selected from the reading category dropdown menu.
Use the react package date-time picker to select a date and time to get readings for. The last 10 readings up to that time load and map on the graph's X and Y axes.

| Callout | Element | Description |
|---|---|---|
| A | Graph | Mapped readings on graph |
| B | Info icon | Click to view relative information |
| C | Date-time picker | Pick a date and time to generate the last 10 readings up to that point in time. |
| D | Reading value dropdown | Select a reading type to map. |
Getting and displaying readings on a graph#
To display the readings data on a graph, TelemetryChannel.jsx imports and uses the ResponsiveLine library from nivo/line package.
The following code gets all the named user items and filters them for the "ref_app_iot_collection" telemetry collection:
let namedItemsAll = await IafItemSvc.getNamedUserItems();
let telCollections = namedItemsAll._list.find( (item) => item._userType === "ref_app_iot_collection");
IafItemSvc.getRelatedReadingItems gets the "ref_app_iot_collection" telemetry collection's related readings:
let getRelatedReading = await IafItemSvc.getRelatedReadingItems( telCollections._id, undefined, ctx, undefined);
setGraphdata maps the readings and their data:
const setGraphdata = () => { // Define data for the line chart const data = [ { id: "data", data: relatedReading?._list?.slice(-10).map((x, index) => { const date = new Date(x._ts); const hours = date.getHours().toString().padStart(2, "0"); const minutes = date.getMinutes().toString().padStart(2, "0"); const formattedDate = date.toLocaleString();
return { x: `${hours}:${minutes}`, y: getYAxisData()[index], [selectedYAxis.value]: getYAxisData()[index], z: formattedDate, }; }), }, ]; console.log("data", data) setGraphData(data);};
The X-axis contains the hour and minute values and getYAxisData gets and maps the data to the graph's Y-axis:
const getYAxisData = () => { const mapYAxisToValues = (yAxis) => { return ( relatedReading?._list?.slice(-10).map((entry) => entry[yAxis]) || [ 0, 0, 0, ] ); };
switch (selectedYAxis.value) { case "co2": return mapYAxisToValues("CO2"); case "temperature": return mapYAxisToValues("Temperature"); case "humidity": return mapYAxisToValues("Humidity"); case "als": return mapYAxisToValues("ALS"); case "pm1.0": return mapYAxisToValues("PM1.0"); case "pm2.5": return mapYAxisToValues("PM2.5"); case "pm10": return mapYAxisToValues("PM10"); case "voc": return mapYAxisToValues("VOC"); default: return []; }};