Skip to content
Snippets Groups Projects
Commit 1aa3a891 authored by Callum Inglis's avatar Callum Inglis
Browse files

Begin Graphs

parent dddfe51c
No related branches found
No related tags found
1 merge request!2Api authentication
...@@ -14,7 +14,7 @@ else ...@@ -14,7 +14,7 @@ else
{ {
<select name="sensor" @onchange="@OnSensorSelectChange"> <select name="sensor" @onchange="@OnSensorSelectChange">
<option disabled>Select...</option> <option disabled selected> Select...</option>
@foreach (Sensor s in sensors) @foreach (Sensor s in sensors)
{ {
<option value="@s.sensorID">@s.friendlyName</option> <option value="@s.sensorID">@s.friendlyName</option>
...@@ -22,27 +22,126 @@ else ...@@ -22,27 +22,126 @@ else
</select> </select>
} }
<!-- TODO : Show data for each sensor here --> <!-- TODO : Show data for each sensor here -->
@if (targetSensor != null) { @if (@targetSensor != null)
{
<h3>Sensor Selected: @targetSensor.friendlyName</h3> <h3>Sensor Selected: @targetSensor.friendlyName</h3>
<!-- TODO Graphs here! -->
} }
<!-- TODO Graphs here! -->
@{<LineChart @ref="lineChart" TItem="decimal?" />}
@code { @code {
private Sensor[] sensors; private Sensor[] sensors;
private Sensor targetSensor; private Sensor targetSensor;
LineChart<decimal?> lineChart;
private vw_SensorData[] sensorData;
protected override async Task OnInitializedAsync() protected override async Task OnInitializedAsync()
{ {
sensors = await http.GetFromJsonAsync<Sensor[]>("api/GetSensorList"); sensors = await http.GetFromJsonAsync<Sensor[]>("api/GetSensorList");
} }
public async Task OnSensorSelectChange(ChangeEventArgs e) 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()
{ {
targetSensor = await http.GetFromJsonAsync<Sensor>("api/GetSensorByID/" + e.Value.ToString()); 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;
} }
} }
\ No newline at end of file
...@@ -8,6 +8,7 @@ ...@@ -8,6 +8,7 @@
<ItemGroup> <ItemGroup>
<PackageReference Include="Blazorise" Version="0.9.5.4" /> <PackageReference Include="Blazorise" Version="0.9.5.4" />
<PackageReference Include="Blazorise.Bootstrap" Version="0.9.5.4" /> <PackageReference Include="Blazorise.Bootstrap" Version="0.9.5.4" />
<PackageReference Include="Blazorise.Charts" Version="0.9.5.4" />
<PackageReference Include="Blazorise.Icons.FontAwesome" Version="0.9.5.4" /> <PackageReference Include="Blazorise.Icons.FontAwesome" Version="0.9.5.4" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.13" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly" Version="5.0.13" />
<PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.13" PrivateAssets="all" /> <PackageReference Include="Microsoft.AspNetCore.Components.WebAssembly.DevServer" Version="5.0.13" PrivateAssets="all" />
......
...@@ -8,4 +8,5 @@ ...@@ -8,4 +8,5 @@
@using Microsoft.JSInterop @using Microsoft.JSInterop
@using Public_API.Client @using Public_API.Client
@using Public_API.Client.Shared @using Public_API.Client.Shared
@using Blazorise @using Blazorise
\ No newline at end of file @using Blazorise.Charts
\ No newline at end of file
...@@ -22,6 +22,7 @@ ...@@ -22,6 +22,7 @@
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script> <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.1/dist/umd/popper.min.js" integrity="sha384-9/reFTGAW83EW2RDu2S0VKaIzap3H66lZH81PoYlFhbGU+6BZp6G7niu735Sk7lN" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.min.js" integrity="sha384-+YQ4JLhjyBLPDQt//I+STsc9iw4uQqACwlvpslubQzn4u2UU2UFM80nGisd026JF" crossorigin="anonymous"></script> <script src="https://cdn.jsdelivr.net/npm/bootstrap@4.6.0/dist/js/bootstrap.min.js" integrity="sha384-+YQ4JLhjyBLPDQt//I+STsc9iw4uQqACwlvpslubQzn4u2UU2UFM80nGisd026JF" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/chart.js@2.8.0"></script>
<div id="blazor-error-ui"> <div id="blazor-error-ui">
An unhandled error has occurred. An unhandled error has occurred.
......
...@@ -78,7 +78,13 @@ namespace Public_API.Server.Controllers ...@@ -78,7 +78,13 @@ namespace Public_API.Server.Controllers
[HttpGet("LatestData")] [HttpGet("LatestData")]
public IEnumerable<vw_SensorData> GetLatestSensorData() public IEnumerable<vw_SensorData> GetLatestSensorData()
{ {
return db.vw_SensorData.OrderByDescending(d => d.dateTime).Take(100).ToArray(); return db.vw_SensorData.OrderByDescending(d => d.dateTime).Take(250).ToArray();
}
[HttpGet("LatestData/{sensorID}")]
public IEnumerable<vw_SensorData> GetLatestSensorData(int SensorID)
{
return db.vw_SensorData.Where(d => d.sensorID.Equals(SensorID)).OrderByDescending(d => d.dateTime).Take(100).ToArray();
} }
[HttpGet("GetSensorList")] [HttpGet("GetSensorList")]
......
using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;
using Public_API.Server.DAL;
using Public_API.Shared.Models;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
namespace Public_API.Server.Controllers
{
[Route("[controller]")]
[ApiController]
public class FrontendController : ControllerBase
{ }
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment