.NET Core 3.1 UPS监控工具开发

最近,接到了一个客户需求,他们需要一个应用程序来监控和记录嵌入式Windows控制器的不间断电源(UPS)状态。这个应用程序不仅需要监控电源状态,还需要在电源状态发生变化时,能够记录日志、绘制图表,并且在必要时能够执行系统关机、休眠等操作。这个工具的设计非常简单,可以作为其他相关项目的框架。

虽然客户的需求超出了这里描述的功能,但额外的功能是特定于客户的,并不相关。在寻找类似项目时,发现了一些片段,但没有找到具体的项目。因此,这个项目是基于maharishi_b和lcady的项目衍生出来的。

使用代码

这个应用程序构建为一个工具栏应用程序,它始终运行并监控Windows电源事件。在每个事件中,应用程序将事件记录到CSV日志文件中,如果交流电(AC)断开,应用程序会弹出并显示UPS容量和剩余时间的图表。所有这些功能都依赖于UPS是否插入并支持标准的Windows HID电源设备配置文件。

在正常操作期间,可以使用工具栏上下文菜单(右键单击工具栏图标)查看应用程序。使用"显示"将打开正常操作窗口:

这表明UPS在线,电池容量为100%。底部的"高"是Windows电源系统对电池容量的判断。电池容量的满刻度为100%。

当交流电线路丢失时,主屏幕将弹出并显示电源状态:

这表明AC现在离线,剩余67%的电池容量。系统仍然将这个容量视为"高"。现在AC离线,剩余时间变得相关,并以红色显示。剩余时间的满刻度被硬编码为60分钟。

恢复电力后,剩余时间不再相关,系统开始重新充电电池:

发生的每个事件都被记录到从PowerMonitor启动的目录中的log.csv文件中。格式如下:

public class SystemPowerStatus { public ACLineStatus ACLineStatus; public BatteryFlag BatteryFlag; public Byte BatteryLifePercent; public Byte Reserved1; public Int32 BatteryLifeTime; public Int32 BatteryFullLifeTime; }

大部分代码都是自解释的。条形图可能是最有趣的部分——它是lcady的条形图的演变。正在将其制作成一个通用的条形图类,但目前它是一个简单的hack。

喜欢这个类将图表绘制到BMP上,然后将BMP blit到图片视图中。这意味着图表构建在很大程度上独立于查看过程,并且可以被卸载到其他线程。这在通过可能较慢的设备进行数据采集时尤为重要。

要点

将电池容量映射到剩余时间是非常困难的。UPS越来越好,但它们大多使用电池电压,这是一个非常差的指标,尤其是当电池老化,已经循环了很多,或者最近循环了。

剩余时间只是一个指标,应该根据自己的分析,在AC断电和充电时间收集的数据的基础上采取行动。

沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485