Update publishing only the reading value from the meter

This commit is contained in:
atef 2024-07-01 15:12:59 +02:00
parent dca4543a13
commit 94c1324f06
1 changed files with 21 additions and 39 deletions

View File

@ -15,6 +15,7 @@ public static class SchneiderMeterDriver
{ {
return Run(hostName, ModbusTcpClient.DefaultPort, dbusAddress); return Run(hostName, ModbusTcpClient.DefaultPort, dbusAddress);
} }
public static async Task<Exception> Run(String hostName, UInt16 port, Bus dbusAddress) public static async Task<Exception> Run(String hostName, UInt16 port, Bus dbusAddress)
{ {
// var ep = new UnixDomainSocketEndPoint("/home/eef/graber_dbus.sock"); // var ep = new UnixDomainSocketEndPoint("/home/eef/graber_dbus.sock");
@ -25,26 +26,15 @@ public static class SchneiderMeterDriver
var schneiderStatus = Observable var schneiderStatus = Observable
.Interval(Config.UpdatePeriod) .Interval(Config.UpdatePeriod)
.Select(_ => schneider.Read()) .Select(_ => schneider.Read())
.Publish(); .Where(reading => reading != null)
.Publish();
var x = schneider.Read();
var poller = schneiderStatus.Connect(); var poller = schneiderStatus.Connect();
var properties = Config.DefaultProperties; var properties = Config.DefaultProperties;
// Step 1: Access Config.Signals
var signalsCollection = Config.Signals;
/*var signals = Config
.Signals
.Select(signal => schneiderStatus.Select(signal.ToVeProperty))
.Merge()
.Do(p => properties.Set(p));*/
var signals = Config var signals = Config
.Signals .Signals
.Select(signal => schneiderStatus .Select(signal => schneiderStatus
@ -62,39 +52,31 @@ public static class SchneiderMeterDriver
return property; return property;
}) })
.Where(property => property != null)) .Where(property => property != null))
.Merge() .Merge()
.Do(p => .Do(p =>
{ {
Console.WriteLine($"Setting property: {p}"); Console.WriteLine($"Setting property: {p}");
properties.Set(p); properties.Set(p);
}); });
// Log initial signals // TODO: remove when possible
/*Console.WriteLine("Initial Signals:");
foreach (var signal in signalsCollection)
{
Console.WriteLine($"Signal: {signal}");
}*/
// TODO: remove when possible
// Apparently some VE services need to be periodically reminded that // Apparently some VE services need to be periodically reminded that
// this service is /Connected // this service is /Connected
Console.WriteLine("Goes to subscribe"); Console.WriteLine("Goes to subscribe");
schneiderStatus.Subscribe(_ => properties.Set("/Connected", 1)); schneiderStatus.Subscribe(_ => properties.Set("/Connected", 1));
Console.WriteLine("Subscribed successfully"); Console.WriteLine("Subscribed successfully");
// Wait until status is read once to make sure all // Wait until status is read once to make sure all
// properties are set when we go onto the bus. // properties are set when we go onto the bus.
var dbus = schneiderStatus var dbus = schneiderStatus
.Skip(1) .Skip(1)
.Take(1) .Take(1)
.SelectMany(_ => PublishPropertiesOnDBus(properties, dbusAddress)); .SelectMany(_ => PublishPropertiesOnDBus(properties, dbusAddress));
return await signals
.MergeErrors(dbus)
.Finally(poller.Dispose)
.SelectErrors();
return await signals
.MergeErrors(dbus)
.Finally(poller.Dispose)
.SelectErrors();
} }