Felicity-Inverter-Monitor/src/Client/Pages/PVGenForDay.razor
2025-03-11 20:12:19 +05:30

99 lines
2.3 KiB
Plaintext

@page "/pvgen"
@using InverterMon.Shared.Models
@inject HttpClient Http
<PageTitle>PV Generation For Day</PageTitle>
<div>
@if(day == null)
{
<Loader Enabled=true />
}
else
{
<h3 class="bg-dark bg-opacity-10 text-center p-3">
<button class="btn bg-white" @onclick="GetPrevDay">
<span class="oi oi-arrow-thick-left"></span>
</button>
<span class="mx-3">
@day.DayName
</span>
<button class="btn bg-white" @onclick="GetNextDay">
<span class="oi oi-arrow-thick-right"></span>
</button>
</h3>
<Area Data="day.WattPeaks" Config="aConf" />
<h4 class="bg-light text-center p-3">
Total Generation: <b>@day.TotalKiloWattHours</b> kWh
</h4>
}
</div>
@code{
private PVDay? day;
private AreaConfig aConf = new()
{
Padding = "auto",
AutoFit = true,
XField = "Time",
YField = "Watts",
Smooth = false,
Line = new()
{
Size = 1,
Color = "#5598d7"
},
AreaStyle = new()
{
Fill = "l(270) 0:#ffffff 0.5:#7ec2f3 1:#1890ff",
}
};
protected override async Task OnInitializedAsync()
{
await FetchForDay();
}
private async Task FetchForDay(int? dayNumber = null)
{
try
{
day = await Http.GetFromJsonAsync<PVDay>($"api/pv-log/get-pv-for-day/{dayNumber ?? DateOnly.FromDateTime(DateTime.Now).DayNumber}");
aConf.XAxis = new()
{
Range = day?.GraphRange,
TickCount = day?.GraphTickCount
};
//StateHasChanged();
}
catch (Exception)
{
//ignore
}
}
private async Task GetNextDay()
{
var dayNum = this.day?.DayNumber+1;
day = null;
await FetchForDay(dayNum);
if (day is null)
await FetchForDay(dayNum - 1);
StateHasChanged();
}
private async Task GetPrevDay()
{
var dayNum = this.day?.DayNumber-1;
day = null;
await FetchForDay(dayNum);
if (day is null)
await FetchForDay(dayNum + 1);
StateHasChanged();
}
}