76 lines
2.8 KiB
C#
76 lines
2.8 KiB
C#
using System.ComponentModel.Design;
|
|
using System.Diagnostics.CodeAnalysis;
|
|
using System.Text.Json;
|
|
using System.Text.Json.Nodes;
|
|
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))]
|
|
[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)
|
|
{
|
|
var instList = Db.InstallationsAndDetails.Values.ToList();
|
|
foreach (var detailList in instList.Select((value, index) => new { Value = value, Index = index}))
|
|
{
|
|
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()));
|
|
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();
|
|
}
|
|
}
|
|
|
|
|
|
// installation Name, ip (link uf gui), idSite (vrm link), identifier , machineserial (HQ...)
|
|
|
|
|