Felicity-Inverter-Monitor/src/Server/Endpoints/GetStatus/Endpoint.cs
2025-03-12 21:21:25 +05:30

59 lines
1.8 KiB
C#

using InverterMon.Shared.Models;
using System.Runtime.CompilerServices;
using InverterMon.Server.InverterService;
namespace InverterMon.Server.Endpoints.GetStatus;
public class Endpoint : EndpointWithoutRequest<object>
{
public FelicitySolarInverter Inverter { get; set; } = null!;
public override void Configure()
{
Get("status");
AllowAnonymous();
}
public override async Task HandleAsync(CancellationToken c)
{
try
{
await SendAsync(GetDataStream(c), cancellation: c);
}
catch (TaskCanceledException)
{
//nothing to do here
}
}
async IAsyncEnumerable<InverterStatus> GetDataStream([EnumeratorCancellation] CancellationToken c)
{
while (!c.IsCancellationRequested)
{
if (Env.IsDevelopment())
{
var status = new InverterStatus
{
OutputVoltage = Random.Shared.Next(240),
LoadWatts = Random.Shared.Next(3500),
LoadPercentage = Random.Shared.Next(100),
BatteryVoltage = Random.Shared.Next(24),
BatteryChargeCurrent = Random.Shared.Next(20),
BatteryDischargeCurrent = Random.Shared.Next(300),
HeatSinkTemperature = Random.Shared.Next(300),
PVInputCurrent = Random.Shared.Next(300),
PVInputVoltage = Random.Shared.Next(300),
PVInputWatt = Random.Shared.Next(1000),
PV_MaxCapacity = 1000,
BatteryCapacity = 100
};
yield return status;
}
else
yield return Inverter.Status;
await Task.Delay(1000, c);
}
}
}