Uninterruptible power supply: Difference between revisions
→The Delayed UPS Shutdown: reason for offdelay |
remove unnecessary portion under compatible hardware |
||
| (12 intermediate revisions by 2 users not shown) | |||
| Line 50: | Line 50: | ||
* upsd.conf, control access to upsd, power.ups.upsd option | * upsd.conf, control access to upsd, power.ups.upsd option | ||
* upsd.users, add user with access to upsd, power.ups.users option | * upsd.users, add user with access to upsd, power.ups.users option | ||
* upsmon.conf, connect to upsd, power.ups.upsmon.monitor section; | * upsmon.conf, connect upsmon to upsd, power.ups.upsmon.monitor section; | ||
* upsmon.conf, set how upsmon should react to status changes, power.ups.upsmon.settings section | * upsmon.conf, set how upsmon should react to status changes, power.ups.upsmon.settings section | ||
* delayed UPS shutdown systemd unit, to make Restore Power on AC Return BIOS option functional, systemd.services.nut-delayed-ups-shutdown section | * delayed UPS shutdown systemd unit, to make Restore Power on AC Return BIOS option functional, systemd.services.nut-delayed-ups-shutdown section | ||
| Line 63: | Line 63: | ||
# this UPS device is named UPS-1. | # this UPS device is named UPS-1. | ||
ups."UPS-1" = { | ups."UPS-1" = { | ||
description = "Eaton Ellipse ECO 650 with 12V 7Ah Batt"; | description = "Eaton Ellipse ECO 650 with 12V 7Ah lead-acid Batt"; | ||
# driver name from https://networkupstools.org/stable-hcl.html | # driver name from https://networkupstools.org/stable-hcl.html | ||
| Line 78: | Line 78: | ||
# after offdelay seconds, the UPS power must be cut, even if | # after offdelay seconds, the UPS power must be cut, even if | ||
# wall power returns. | # wall power returns. | ||
# There is a danger that the system will take longer than the default 20 seconds to shut down. | |||
# If that were to happen, the UPS shutdown would provoke a brutal system crash. | |||
# We adjust offdelay, to solve this issue. | |||
"offdelay = 60" | "offdelay = 60" | ||
| Line 84: | Line 88: | ||
# "Restore power on AC" should now power on the system. | # "Restore power on AC" should now power on the system. | ||
# For reasons described above, ondelay value must be larger than offdelay value. | # For reasons described above, ondelay value must be larger than offdelay value. | ||
# We adjust ondelay, to ensure Restore power on AC option returns to Power Disconnected state. | |||
"ondelay = 70" | "ondelay = 70" | ||
| Line 89: | Line 94: | ||
# upsmon initiate shutdown once this threshold is reached. | # upsmon initiate shutdown once this threshold is reached. | ||
"lowbatt = 40" | "lowbatt = 40" | ||
# ignore it if the UPS reports a low battery condition | |||
# without this, system will shutdown only when ups reports lb, | |||
# not respecting lowbatt option | |||
"ignorelb" | |||
]; | ]; | ||
}; | }; | ||
| Line 122: | Line 132: | ||
# declarations. upsd.users | # declarations. upsd.users | ||
users."nut-admin" = { | users."nut-admin" = { | ||
passwordFile = ../resources/ups-passwd.txt; | passwordFile = "${../resources/ups-passwd.txt}"; | ||
upsmon = "primary"; | upsmon = "primary"; | ||
}; | }; | ||
| Line 137: | Line 147: | ||
powerValue = 1; | powerValue = 1; | ||
user = "nut-admin"; | user = "nut-admin"; | ||
passwordFile = ../resources/ups-passwd.txt; | passwordFile = "${../resources/ups-passwd.txt}"; | ||
type = "primary"; | type = "primary"; | ||
}; | }; | ||
| Line 207: | Line 217: | ||
During the system shutdown, systemd service unit runs the command | During the system shutdown, systemd service unit runs the command | ||
upsdrvctl shutdown. This tells the UPS that it is to shut down | <code>upsdrvctl shutdown</code>. This tells the UPS that it is to shut down | ||
offdelay seconds later. The system powers down before offdelay seconds | offdelay seconds later. The system powers down before offdelay seconds | ||
have passed. Wall power returns before the UPS shuts down Less than | have passed. Wall power returns before the UPS shuts down. Less than | ||
offdelay seconds have passed. The UPS continues it's shutdown | offdelay seconds have now passed. The UPS continues it's shutdown | ||
process. | process. | ||
After offdelay seconds the UPS shuts down, disconnecting it's | After offdelay seconds the UPS shuts down, disconnecting it's | ||
outlets. The beeping stops. With some UPS units, there is an audible | outlets. The beeping stops. With some UPS units, there is an audible | ||
clunk. An interval of ondelay | clunk. An interval of ondelay minus offdelay seconds later: After ondelay | ||
seconds the UPS turns itself on, and repowers it's outlets. The system | seconds the UPS turns itself on, and repowers it's outlets. The system | ||
BIOS option Restore Power on AC return has hopefully been selected and | BIOS option Restore Power on AC return has hopefully been selected and | ||
| Line 228: | Line 238: | ||
# copied from ConfigExamples 3.0 book, Appendix B.2. | # copied from ConfigExamples 3.0 book, Appendix B.2. | ||
systemd.services.nut-delayed-ups-shutdown = { | systemd.services.nut-delayed-ups-shutdown = { | ||
enable = true; | |||
environment = config.systemd.services.upsmon.environment; | |||
description = "Initiate delayed UPS shutdown"; | |||
before = [ "umount.target" ]; | |||
wantedBy = [ "final.target" ]; | |||
serviceConfig = { | serviceConfig = { | ||
Type = "oneshot"; | Type = "oneshot"; | ||
ExecStart = ''${pkgs. | # need to use '-u root', or else permission denied | ||
ExecStart = ''${pkgs.nut}/bin/upsdrvctl -u root shutdown''; | |||
# must not use slice: if used, upsdrvctl will not run as a late | |||
# shutdown service | |||
# Slice = ""; | |||
}; | |||
unitConfig = { | |||
ConditionPathExists = config.power.ups.upsmon.settings.POWERDOWNFLAG; | |||
DefaultDependencies = "no"; | |||
}; | }; | ||
}; | }; | ||
</syntaxhighlight> | </syntaxhighlight> | ||
[[Category:Hardware]] | |||