51 lines
1.2 KiB
C#
51 lines
1.2 KiB
C#
|
using InnovEnergy.Lib.Utils;
|
||
|
using InnovEnergy.Lib.Victron.VeDBus;
|
||
|
using InnovEnergy.WireFormat.VictronV1;
|
||
|
|
||
|
namespace InnovEnergy.VenusLogger.Parsers;
|
||
|
|
||
|
public static class PvInverter
|
||
|
{
|
||
|
public static Maybe<Device> GetPvInverter(this IEnumerable<ServiceProperties> services, AcBusType busType)
|
||
|
{
|
||
|
var pvInverters = services
|
||
|
.Where(sp => sp.GetBusType() == busType)
|
||
|
.TrySelect(GetPvInverter)
|
||
|
.ToList();
|
||
|
|
||
|
if (pvInverters.Count < 2)
|
||
|
return pvInverters.FirstOrDefault().Maybe();
|
||
|
|
||
|
return new Device
|
||
|
{
|
||
|
Type = DeviceType.PvInverter,
|
||
|
Devices = { pvInverters }
|
||
|
};
|
||
|
}
|
||
|
|
||
|
private static Device GetPvInverter(ServiceProperties sp)
|
||
|
{
|
||
|
return new Device
|
||
|
{
|
||
|
Type = DeviceType.PvInverter,
|
||
|
Phases = { sp.Properties.GetAcPhases() }
|
||
|
};
|
||
|
}
|
||
|
|
||
|
private static AcBusType GetBusType(this ServiceProperties service)
|
||
|
{
|
||
|
try
|
||
|
{
|
||
|
return (AcBusType) service.Properties.GetProperty<Int32>("/Position");
|
||
|
}
|
||
|
catch
|
||
|
{
|
||
|
return AcBusType.Unknown;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
|
||
|
|
||
|
|
||
|
// numbers must match those used by Victron on DBus!
|