using System.Collections.Immutable; using System.Reactive.Linq; using InnovEnergy.Lib.Protocols.DBus; using InnovEnergy.Lib.Victron.VeDBus; namespace InnovEnergy.VenusLogger; using Props = ImmutableDictionary; public static class DBusObserver { // public static IObservable ObserveGrid(this DBusConnection dbus) // { // return dbus // .ObserveService(VeService.Grid) // .TrySelect(Parsers.Grid.Parse) // .StartWith(new Grid()); // } // // // public static IObservable> ObservePvInverters(this DBusConnection dbus) // { // return dbus // .ObserveServices(VeService.PvInverter) // .Select(Parsers.PvInverter.Parse); // } // // // public static IObservable ObserveInverter(this DBusConnection dbus) // { // return dbus // .ObserveService(VeService.Inverter) // .TrySelect(Parsers.Inverter.Parse) // .StartWith(new Inverter()); // } // // // public static IObservable> ObservePvChargers(this DBusConnection dbus) // { // return dbus // .ObserveServices(VeService.SolarCharger) // .Select(Parsers.PvCharger.Parse) // .StartWith(Empty()); // } // // public static IObservable ObserveDcSystem(this DBusConnection dbus) // { // return dbus // .ObserveService(VeService.Settings) // .TrySelect(p => p["/Settings/SystemSetup/HasDcSystem"].Value.Apply(Convert.ToBoolean)) // .StartWith(false) // .DistinctUntilChanged(); // } // // public static IObservable> Observe48TlBatteries(this DBusConnection dbus) // { // return dbus // .ObserveService(VeService.Battery) // .TrySelect(Parsers.Battery48Tl.Parse) // .StartWith(Empty()); // } public static IObservable> ObserveServices(this DBusConnection dbus, String service) { return dbus .ObservePropertiesOfServices(s => s.StartsWith(service)) .StartWith(Array.Empty()); } }