Uninterruptible power supply: Difference between revisions

Tie-ling (talk | contribs)
Delay UPS Shutdown: use list of strings
Wo2wz (talk | contribs)
remove unnecessary portion under compatible hardware
 
(9 intermediate revisions by 2 users not shown)
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 94: 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 127: 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 142: 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 212: 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-offdelay seconds later: After 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 233: 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 = {
     unitConfig = {
     enable = true;
      Description = "Initiate delayed UPS shutdown";
    environment = config.systemd.services.upsmon.environment;
      Before = "umount.target";
    description = "Initiate delayed UPS shutdown";
      DefaultDependencies = false;
    before = [ "umount.target" ];
    };
    wantedBy = [ "final.target" ];
     serviceConfig = {
     serviceConfig = {
       Type = "oneshot";
       Type = "oneshot";
       ExecStart = ''${pkgs.bash}/bin/bash -c\
      # need to use '-u root', or else permission denied
      "${pkgs.util-linux}/bin/logger -t\
       ExecStart = ''${pkgs.nut}/bin/upsdrvctl -u root shutdown'';
        nut-delayed-ups-shutdown 'upsdrvctl shutting down UPS';\
      # must not use slice: if used, upsdrvctl will not run as a late
        ${pkgs.nut}/bin/upsdrvctl shutdown"'';
      # shutdown service
      # Slice = "";
    };
    unitConfig = {
      ConditionPathExists = config.power.ups.upsmon.settings.POWERDOWNFLAG;
      DefaultDependencies = "no";
     };
     };
    wantedBy = [ "final.target" ];
   };
   };
</syntaxhighlight>
</syntaxhighlight>
[[Category:Hardware]]