Newer
Older
@page "/graph"
@using Public_API.Shared.Models
@inject HttpClient http
<h3>Graph</h3>
<!-- TODO : List of sensors here-->
<label for="sensor">Sensor: </label>
@if (sensors == null)
{
<p><em>Loading...</em></p>
}
else
{
<select name="sensor" @onchange="@OnSensorSelectChange">
@foreach (Sensor s in sensors)
{
<option value="@s.sensorID">@s.friendlyName</option>
}
</select>
}
<!-- TODO : Show data for each sensor here -->
<h3>Sensor Selected: @targetSensor.friendlyName</h3>
}
<!-- TODO Graphs here! -->
@{<LineChart @ref="lineChart" TItem="decimal?" />}
@code {
private Sensor[] sensors;
private Sensor targetSensor;
LineChart<decimal?> lineChart;
private vw_SensorData[] sensorData;
protected override async Task OnInitializedAsync()
{
sensors = await http.GetFromJsonAsync<Sensor[]>("api/GetSensorList");
}
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
//await HandleChartRedraw(lineChart, new List<string>(), new LineChartDataset<decimal?>(), new LineChartDataset<decimal?>());
}
}
async void OnSensorSelectChange(ChangeEventArgs e)
{
await getSensor(e.Value.ToString());
await getSensorData(e.Value.ToString());
await HandleChartRedraw(lineChart, generateLabels(),
GetLineChartDataset(),
GetLineChartDatasetHumidity()
);
StateHasChanged();
}
async Task HandleChartRedraw(LineChart<decimal?> chart, List<string> labels,
LineChartDataset<decimal?> dataset,
LineChartDataset<decimal?> dataset2)
{
await chart.Clear();
await chart.AddLabelsDatasetsAndUpdate(labels, dataset);
await chart.AddDatasetsAndUpdate(dataset2);
}
LineChartDataset<decimal?> GetLineChartDataset()
{
return new LineChartDataset<decimal?>
{
Label = "Temperature",
Data = extractTemperature(),
BorderColor = new List<string> { ChartColor.FromRgba(255, 99, 132, 1f) },
Fill = false,
PointRadius = 2,
BorderDash = new List<int> { }
};
}
LineChartDataset<decimal?> GetLineChartDatasetHumidity()
{
return new LineChartDataset<decimal?>
{
Label = "Humidity",
Data = extractHumidity(),
BorderColor = new List<string> { ChartColor.FromRgba(99, 132, 99, 1f) },
Fill = false,
PointRadius = 2,
BorderDash = new List<int> { }
};
}
protected async Task getSensor(string sensorID)
{
targetSensor = await http.GetFromJsonAsync<Sensor>("api/GetSensorByID/" + sensorID);
}
protected async Task getSensorData(string sensorID)
{
sensorData = await http.GetFromJsonAsync<vw_SensorData[]>("api/LatestData/" + sensorID);
}
private List<decimal?> extractTemperature()
{
List<decimal?> l = new List<decimal?>();
foreach (vw_SensorData data in sensorData)
{
l.Add(data.temperature);
}
return l;
}
private List<decimal?> extractHumidity()
List<decimal?> l = new List<decimal?>();
foreach (vw_SensorData data in sensorData)
{
l.Add(data.humidity);
}
return l;
}
private List<string> generateLabels()
{
List<string> labels = new List<string>();
foreach (vw_SensorData data in sensorData)
{
labels.Add(data.dateTime.ToShortDateString() + " " + data.dateTime.ToShortTimeString());
}
return labels;