Innovenergy_trunk/csharp/App/VrmGrabber/Controller.cs

76 lines
2.8 KiB
C#
Raw Normal View History

2023-04-27 14:59:45 +00:00
using System.ComponentModel.Design;
using System.Diagnostics.CodeAnalysis;
using System.Text.Json;
using System.Text.Json.Nodes;
2023-04-27 14:59:45 +00:00
using Flurl.Util;
using InnovEnergy.App.Backend.Database;
using InnovEnergy.Lib.Victron.VictronVRM;
using Microsoft.AspNetCore.Mvc;
namespace InnovEnergy.App.Backend.Controllers;
using Token = String;
[ApiController]
[Route("api/")]
public class Controller : ControllerBase
{
[HttpGet(nameof(GetInstallation))]
2023-04-27 14:59:45 +00:00
[UnconditionalSuppressMessage("Trimming", "IL2026:Members annotated with 'RequiresUnreferencedCodeAttribute' require dynamic access otherwise can break functionality when trimming application code", Justification = "<Pending>")]
public Object GetInstallation(UInt64 serialNumber)
2023-04-27 14:59:45 +00:00
{
var instList = Db.InstallationsAndDetails.Values.ToList();
foreach (var detailList in instList.Select((value, index) => new { Value = value, Index = index}))
2023-04-27 14:59:45 +00:00
{
if (detailList.Value.All(detail => detail.Json["idSite"]?.GetValue<UInt64>() != serialNumber)) continue;
var retour = Db.InstallationsAndDetails.Keys.ToList()[detailList.Index].Json;
retour["details"] = JsonSerializer.Deserialize<JsonArray>(JsonSerializer.Serialize(detailList.Value.Select(d => d.Json).ToArray()));
2023-04-27 14:59:45 +00:00
return retour;
}
return new NotFoundResult();
}
[HttpGet(nameof(GetInstallationList))]
public Object GetInstallationList()
{
var instList = Db.InstallationsAndDetails.Keys.ToList();
if (instList.Count == 0) return 0;
var returnJson = new Dictionary<String, Dictionary<String, String>>();
foreach (var installation in instList)
{
returnJson[installation.Name] = new Dictionary<String, String>();
returnJson[installation.Name].Add("ip", $"<a target='_blank' href=https://{Ip(installation)}> On-Device-Gui </a>");
try
{
returnJson[installation.Name].Add("idSite",
$"<a target='_blank' href=https://vrm.victronenergy.com/installation/{installation.IdSite}/dashboard> Dashboard </a>");
returnJson[installation.Name]
.Add("identifier", $"{installation.Json["identifier"]?.GetValue<String>()}");
returnJson[installation.Name].Add("machine serial number", $"{Serial(installation)}");
}
catch (Exception)
{
continue;
}
}
return returnJson;
}
private static String? Ip(Installation installation)
{
return Db.InstallationsAndDetails[installation].RemoteSupportIp();
}
private static String? Serial(Installation installation)
{
return Db.InstallationsAndDetails[installation].MachineSerial();
}
2023-04-27 14:59:45 +00:00
}
// installation Name, ip (link uf gui), idSite (vrm link), identifier , machineserial (HQ...)
2023-04-27 14:59:45 +00:00