Uninterruptible power supply: Difference between revisions

Tie-ling (talk | contribs)
Delay UPS Shutdown: remove redundant section, as similar code is already present in NixOS
 
(13 intermediate revisions by 4 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 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;
      # A file that contains just the password.
       passwordFile = "/etc/nixos/ups-passwd.txt";
       upsmon = "primary";
       upsmon = "primary";
     };
     };
Line 142: Line 148:
       powerValue = 1;
       powerValue = 1;
       user = "nut-admin";
       user = "nut-admin";
       passwordFile = ../resources/ups-passwd.txt;
       passwordFile = "/etc/nixos/ups-passwd.txt";
       type = "primary";
       type = "primary";
     };
     };
Line 199: Line 205:
   };
   };
</syntaxhighlight>
</syntaxhighlight>
 
[[Category:Hardware]]
= Delay UPS Shutdown =
 
As part of the system shutdown process, there needs to be an action to
send a message to the UPS to tell it that some time later, it too will
shut down. Note that the UPS does not shutdown at the same time as the
system it protects.  The UPS shutdown is delayed. By default the delay
is 20 seconds. The absence of AC power to the protected system for a
sufficient time has the effect of resetting the BIOS options, and in
particular the option Restore power on AC return. This BIOS option
will be needed to restart the box.
 
During the system shutdown, systemd service unit runs the command
upsdrvctl shutdown. This tells the UPS that it is to shut down
offdelay seconds later. The system powers down before offdelay seconds
have passed. Wall power returns before the UPS shuts down Less than
offdelay seconds have passed. The UPS continues it's shutdown
process.
 
After offdelay seconds the UPS shuts down, disconnecting it's
outlets. The beeping stops.  With some UPS units, there is an audible
clunk. An interval of ondelay-offdelay seconds later: After ondelay
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
the system powers up.
 
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 have adjusted offdelay above, to solve this issue.
 
 
<syntaxhighlight lang="nix">
  # copied from ConfigExamples 3.0 book, Appendix B.2.
  systemd.services.nut-delayed-ups-shutdown = {
    unitConfig = {
      Description = "Initiate delayed UPS shutdown";
      Before = "umount.target";
      DefaultDependencies = false;
    };
    serviceConfig = {
      Type = "oneshot";
      ExecStart = ''${pkgs.bash}/bin/bash -c\
      "${pkgs.util-linux}/bin/logger -t\
        nut-delayed-ups-shutdown 'upsdrvctl shutting down UPS';\
        ${pkgs.nut}/bin/upsdrvctl shutdown"'';
    };
    wantedBy = "final.target";
  };
</syntaxhighlight>