UPS: read NUT as well as apcupsd in upsDevices
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
- 难度
- 4/5
- 预计耗时
- 3-5 天
- 新手友好度
- 48/100
- Issue 类型
- 功能
- 描述清晰度
- 基本清楚
- 活跃度
- 活跃
- 技术栈
- typescript
调研方向
Start by reading UPSService.getUPSData() and createUPSDevice, which the issue identifies as the apcupsd data path and placeholder mapping. Check how UPS configuration is exposed, then trace how the NUT plugin provides its configured NAME and IPADDR for server and client modes. Done means NUT readings map to the listed UPSDevice fields when apcupsd returns no data, with the proposed source and configuration signals handled consistently.
由索引模型根据 Issue 内容生成。
描述
Is your feature request related to a problem?
upsDevices only reads apcupsd (UPSService.getUPSData() runs /sbin/apcaccess). Many Unraid servers monitor their UPS with NUT instead, through the popular NUT plugin, often as a NUT client of another box (a firewall or another server) that the UPS is plugged into. On those servers apcupsd is disabled, apcaccess returns nothing, and upsDevices fails with Failed to get UPS data: No UPS data returned from apcaccess. So API clients can't show the UPS the server actually depends on, even though the webGUI shows it through the NUT plugin.
Related: #1765 (a NUT user seeing wrong values in a mobile client) and #1825 (placeholder values returned when no UPS is connected).
Describe the solution you'd like
When apcupsd has no data and NUT is configured, read the UPS through NUT (upsc <ups>@<host>, or the NUT network protocol on port 3493 using the plugin's configured NAME / IPADDR, which works in both server and client mode), and map it onto the existing UPSDevice fields:
| UPSDevice field | NUT variable |
|---|---|
model |
device.model / ups.model |
status |
ups.status (OL, OB, LB, ...), mapped to the same words as apcupsd |
battery.chargeLevel |
battery.charge |
battery.estimatedRuntime |
battery.runtime (already seconds) |
power.inputVoltage |
input.voltage |
power.outputVoltage |
output.voltage |
power.loadPercentage |
ups.load |
power.nominalPower |
ups.realpower.nominal |
A source field (APCUPSD / NUT) on UPSDevice or UPSConfiguration would help clients explain where the data comes from.
Describe alternatives you've considered
- Enabling apcupsd alongside NUT: not supported; the two conflict over the USB device, and a NUT client has no local UPS to read.
- Querying NUT directly from the client: needs another port and credentials outside the API, and only works on the LAN.
Additional context
While adding a UPS card to an Android client (urrt) on API 4.37.5, two more things showed up:
upsConfiguration.serviceis the useful "is a UPS configured" signal for apcupsd, but there is no equivalent for NUT, so a client can't tell "no UPS" from "UPS monitored by NUT".- When an apcaccess field is missing,
createUPSDevicefills in placeholders (LOADPCT25,BCHARGE100,TIMELEFT60 min,LINEV/OUTPUTV120.5, model "APC Back-UPS Pro 1500",healthalways "Good"). A client can't tell those from real readings. Returningnullfor missing values (the fields would need to become nullable) would let clients show "unknown" instead. This overlaps #1825.
Environment (if relevant)
Unraid OS Version: 7.3.3 and 7.4.0-rc.1 (API 4.37.5). The server is a NUT client (MODE="slave") of a NUT server on the firewall; apcupsd disabled.
Pre-submission Checklist
- I have searched existing issues to ensure this feature hasn't already been requested
- This is not an Unraid Connect related feature (if it is, please submit via the support form instead)
- I have provided clear examples or use cases for the feature
- 主要语言
- TypeScript
- 星标
- 115
- 派生
- 23
- 平均合并
- 4 天 1 小时
- 30 天内合并 PR
- 7
环境准备
- 没有 Dockerfile 或 Docker Compose 文件
- 没有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
unraid/api 的其他 Issue
-
难度 2/5 1-3 小时 新手友好度 70/100
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 88/100
维护者通常 1 天内回复
-
难度 3/5 1-2 天 新手友好度 66/100
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 35/100
维护者通常 1 天内回复
-
难度 4/5 3-5 天 新手友好度 64/100
维护者通常 1 天内回复
相似的 Issue
-
难度 2/5 1-3 小时 新手友好度 76/100
维护者通常 1 天内回复
-
bug
难度 1/5 1 小时以内 新手友好度 76/100
维护者通常 1 天内回复
-
community first-timers-only good first issue hacktoberfest help wanted low hanging fruit up-for-grabs
难度 1/5 1 小时以内 新手友好度 76/100
lingdojo/kana-dojo#32964 · 1 条评论 · 5 个 reaction ·
维护者通常 1 天内回复
-
Documentation status: needs triage
难度 2/5 1-3 小时 新手友好度 72/100
mastra-ai/mastra#28194 · 1 条评论 ·
维护者通常 1 天内回复
-
priority-low refactor-3
难度 2/5 1-3 小时 新手友好度 84/100
维护者通常 3 天内回复