using InnovEnergy.Lib.Devices.IEM3kGridMeter; using InnovEnergy.Lib.Protocols.DBus.Protocol.DataTypes; using InnovEnergy.Lib.Victron.VeDBus; namespace InnovEnergy.App.SchneiderDriver { public record Signal(Func Source, ObjectPath Path, String Format = "") { // Converts the status object to a VeProperty, handling null status gracefully public VeProperty ToVeProperty(Iem3KGridMeterRegisters status) { // Check if status is null and log a message // if (status == null) // { // Console.WriteLine($"Status is null for path: {Path}"); // // Return a default VeProperty if status is null // return new VeProperty(Path, default(double), string.Format($"{{0:{Format}}}", default(double))); // } // // // Retrieve the value using the provided source function var value = Source(status); // // // Handle the case where the value itself might be null // if (value == null) // { // Console.WriteLine($"Value is null for path: {Path}"); // // Return a default VeProperty if value is null // return new VeProperty(Path, default(double), string.Format($"{{0:{Format}}}", default(double))); // } if (value is Single floatValue) { value = (Double)floatValue; } // Create and return the VeProperty with the actual value and format return new VeProperty(Path, value, string.Format($"{{0:{Format}}}", value)); } } }