Merge pull request #2680 from masterwishx/work2471-eco_addon
[networkupstools.git] / NEWS.adoc
blobfe174f6b1fee59f333a4065980503bd667033cea
1 ifdef::txt[]
2 NUT Release Notes
3 =================
4 endif::txt[]
6 If you're upgrading from an earlier version, see the link:UPGRADING.adoc[] file.
8 Please note that web and source document links, product and service names
9 listed in historic entries of past releases may no longer be relevant.
11 For a complete and more detailed list of changes, please refer to the
12 ChangeLog file (generated for release archives), or to the Git version
13 control history for "live" codebase.
16 PLANNED: Release notes for NUT 2.8.4 - what's new since 2.8.3
17 -------------------------------------------------------------
19 https://github.com/networkupstools/nut/milestone/9
21  - (expected) Dynamic Mapping Files (DMF) feature supported, to allow
22    the driver binaries to be built once and data mappings to be loaded
23    and modernized on the fly (porting from 42ITy project)
25  - (expected) Porting of reference packaging from 42ITy project
27  - (expected) Porting of patches suggested by different distribution packages
29  - (expected) C code clean-up/consistency (string format security, work with
30    Boolean values, string to number conversions, etc. in the same manner)
32  - (expected) clean-up of libusb API variants support [#300 and follow-ups]
34  - (expected) CI automation for coding style
36  - (expected) CI automation for driver flags and variables to be certainly
37    documented, handled in augeas lenses, nutconf classes, etc.
39  - (expected) CI automation for use of data points in drivers that conform
40    to patterns defined in link:docs/nut-names.txt[]
42  - (expected) Bug fixes for fallout possible due to "fightwarn" effort in 2.8.0+
45 PLANNED: Release notes for NUT 2.8.3 - what's new since 2.8.2
46 -------------------------------------------------------------
48 https://github.com/networkupstools/nut/milestone/11
50  - Fix fallout of development in NUT v2.8.0 and/or v2.8.1 and/or v2.8.2:
51    * Move of `NUT_DEBUG_LEVEL` and "-D" CLI option handling to start of
52      driver programs for issue #2259 in NUT v2.8.2 release misfired with
53      regard to data-dump mode (it no longer caused foreground by default).
54      [#2408]
55    * The `nut-driver-enumerator.sh` improvements misfired in v2.8.2 release
56      with an overlooked bit of shell syntax, and caused `nut-driver@upsname`
57      instances to not auto-restart when `ups.conf` is edited. [#682, #2410]
58    * Addition of "NUT Simulated devices" support to `nut-scanner` in v2.8.2
59      broke detection of (in-)ability to find and query "Old NUT" servers via
60      `libupsclient.so` (internal flag got always enabled). [#2246]
61    * A fix for `upsmon` v2.8.1 setting of `OFFDURATION` [PR #2108, issue #2104,
62      revisiting PR #2055, issue #2044] was overly zealous and impacted also
63      the `OB` state in cases where communications to the data server were
64      severed and `DEADTIME` setting was not honored. [PR #2462, issue #2454]
65    * Using `drivername -c reload` (e.g. facilitated by `nut-driver-enumerator`
66      script and service when editing `ups.conf`) led to disconnected Unix
67      sockets and a tight polling loop that hogged CPU. While the underlying
68      bug is ancient, it took recent development to hit it as a practical
69      regression. [issue #1904, issue #2484]
70    * Fallback `localtime_r()` and `gmtime_r()` for some platform builds where
71      a `*_s()` variant was available was not handled correctly. [PR #2583]
72    * A recently introduced `allow_killpower` did not actually work as an
73      `ups.conf` flag (only as a protocol command). [issue #2605, PR #2606]
75  - development iterations of NUT should now identify with not only the semantic
76    version of a preceding release, but with git-derived information about the
77    amount of iterations that followed (if available): the three-number "semver"
78    would be seen on release snapshots, while other builds would expose the
79    added components: one with the amount of commits on the main development
80    trunk since the preceding release which are ancestors of the built code
81    base, and in case of feature development branches -- another component
82    with the amount of commits unique to this branch (which are not part of
83    the development trunk). This allows to produce more relevant (monotonously
84    growing) version identifiers for packages and similar artifacts, with more
85    meaningful upgrades via development snapshots, eventually. A copy of the
86    current version information would be embedded into "dist" archives as a
87    `VERSION_DEFAULT` file. [#1949]
89  - the `upsnotify()` common code introduced in recent NUT releases (integrating
90    with service management frameworks, etc.) was a bit cryptic when it reported
91    a *failure to notify* (e.g. when not running as a service currently), fixed
92    now to report human-friendly text instead of internal enum codes. Follow-up
93    to [issue #1590, PR #1777, PR #2136]
95  - drivers, `upsd`, `upsmon`: reduce "scary noise" about failure to `fopen()`
96    the PID file (which most of the time means that no previous instance of
97    the daemon was running to potentially conflict with), especially useless
98    since in recent NUT releases the verdicts from `sendsignal*()` methods
99    are analyzed and lead to layman worded situation reports in these programs.
100    [issue #1782, PR #2384]
102  - drivers started with the `-FF` command-line option (e.g. wrapped into the
103    systemd units to stay "foregrounded" *and* save a PID file anyway) should
104    now also handle an existing PID file to interact with the earlier instance
105    of the driver program, if still running (e.g. started manually). [#2384]
107  - Extended instant commands for driver reloading with a `driver.exit`
108    command for a protocol equivalent of sending a `SIGTERM`, e.g. when
109    a newer instance of the driver program tries to start. [#1903, #2392]
111  - A new `NUT_QUIET_INIT_BANNER` envvar (presence or "true" value) can now
112    prevent the tool name and NUT version banner from being unilaterally
113    printed out when NUT programs start. [issues #1789 vs. #316; #2573]
115  - The `upsdrvctl` should now warn if executed on systems where NUT was
116    built with support for service management frameworks like systemd or SMF,
117    so nut-driver service units prepared by `nut-driver-enumerator` would
118    conflict with manually-executed driver programs. This warning can be
119    hushed by exporting a `NUT_QUIET_INIT_NDE_WARNING` environment variable
120    with any value.
122  - Extended `upsdrvctl` with a `list` operation (or `-l` option) to report
123    manageable device configuration names (possible `<ups>` arguments to
124    `start`, `stop` etc. operations), or to confirm a single name that it
125    is known, and a `status` operation for more information. [#2567]
127  - riello_ser updates:
128    * added `localcalculation` option to compute `battery.runtime` and
129      `battery.charge` if the device provides bogus values [issue #2390,
130      following in the footsteps of #1692, #1685 done for `riello_usb`]
131      (similar to `runtimecal` in some other drivers, may be refactored
132      to that configuration and logic model in later NUT releases)
134  - apcsmart updates:
135    * Revised code to use `strncpy()` and avoid potential overflows that are
136      possible with `strcpy()` used before. [PR #2564]
137    * Lost communications led to a logging flood, should not anymore.
138      In fact, the driver should try fully reconnecting upon getting into
139      a prolonged data stale condition. [issue #704, PR #2564]
141  - added Visench C1K (using serial port converter with USB ID `1a86:7523`)
142    as known supported by `nutdrv_qx` (Megatec protocol) since at least
143    NUT v2.7.4 release [#2395]
145  - bicker_ser: added new driver for Bicker 12/24Vdc UPS via RS-232 serial
146    communication protocol, which supports any UPS shipped with the PSZ-1053
147    extension module. [PR #2448]
149  - liebert-gxe: added new driver with support for Liebert GXE Series UPS
150    (serial or USB posing as a serial port). [#2629]
152  - usbhid-ups updates:
153    * Support of the `onlinedischarge_log_throttle_hovercharge` in the NUT
154      v2.8.2 release was found to be incomplete. [#2423, follow-up to #2215]
155    * Added support for `interrupt_pipe_no_events_tolerance=N` setting to
156      optionally prevent UPS lockup, indicated by continuous "Got 0 HID Objects"
157      situation as a clue, by reconnecting on stale data.  Note that while some
158      devices just report information upon subsequent poll and just have nothing
159      urgent to declare with an USB interrupt, others (e.g. APC BXnnnnMI) were
160      seen to lock up until a full connection restart. [#2671, #2681]
161    * Added support for `lbrb_log_delay_sec=N` setting to delay propagation of
162      `LB` or `LB+RB` state (buggy with APC BXnnnnMI devices circa 2023-2024).
163      This may work better with flags like `onlinedischarge_calibration` and
164      `lbrb_log_delay_without_calibrating` for some devices. [#2347]
165    * General suggestion from `possibly_supported()` message method for devices
166      with VendorID=`0x06da` (Phoenixtec), seen in some models supported by
167      MGE HID or Liebert HID, updated to suggest trying `nutdrv_qx`. [#334]
168    * MGE HID list of `mge_model_names[]` was extended for Eaton 9E, 5PX and 5SC
169      series (largely guessing, feedback and PRs for adaptation to actual
170      string values reported by devices via USB are welcome), so these devices
171      would now report `battery.voltage` and `battery.voltage.nominal`. [#2380]
172    * Added `ups.beeper.status` support for Masterpower MF-UPS650VA using the
173      MGE HID subdriver. [#2662]
174    * `powercom-hid` subdriver sent UPS shutdown commands in wrong byte order,
175      at least for devices currently in the field. A toggle was added to set
176      the old behavior (if some devices do need it), while a fix is applied
177      by default: `powercom_sdcmd_byte_order_fallback`. [PR #2480]
178    * `cps-hid` subdriver now supports more variables, as available on e.g.
179      CP1350EPFCLCD model. [PR #2540]
180    * USB parameters (per `usb_communication_subdriver_t`) are now set back to
181      their default values during enumeration after probing each subdriver.
182      Having an unrelated device connected with a VID:PID matching the
183      `arduino-hid` subdriver prevented use of an actual `usb-hid` device due to
184      changes made to this struct during probe. [#2611]
186  - USB drivers could log `(nut_)libusb_get_string: Success` due to either
187    reading an empty string or getting a success code `0` from libusb.
188    This difference should now be better logged, and not into syslog. [#2399]
190  - USB drivers can benefit from a new `nut_usb_get_string()` method which
191    can do a fallback `en_US` query for devices which report a broken "langid"
192    language identifier value. This notably manifested in inability to query
193    device Manufacturer, Model and Serial Number values with some buggy device
194    firmware or hardware. [PR #2604, issues #1925, #414]
195    * Currently this was tested to fix certain device discovery with `usbhid-ups`;
196      should also apply out of the box to same discovery logic in `blazer_usb`,
197      `nutdrv_qx`, `riello_usb` and `tripplite_usb` drivers.
198    * Also applied to `nut-scanner` and `libnutscan`. [issue #2615]
199    * More work may be needed for other USB-capable drivers (`richcomm_usb`,
200      `nutdrv_atcl_usb`) and for general code to collect string readings and
201      other data points, and to configure the fallback locale or choose one
202      if several are served by the device. [issues #2613, #2614, #2615]
204  - USB drivers should now be more likely to succeed with iterative detection
205    of an UPS interface on a composite USB device or when looking at devices
206    with non-default interface/endpoint/config numbers. [PR #2611]
208  - USB drivers should now accept a `LIBUSB_DEBUG=INTEGER` setting in `ups.conf`
209    (as well as an environment variable that can be generally set via `nut.conf`
210    or service unit methods or init script), to enable troubleshooting of LibUSB
211    itself. [issue #2616]
213  - Introduced a new driver concept for interaction with OS-reported hardware
214    monitoring readings. Currently instantiated as `hwmon_ina219` specifically
215    made for Texas Instruments INA219 chip as exposed in the Linux "hwmon"
216    subsystem of its "sysfs" interface (and talking I2C under the hood), this
217    approach seems to have good potential to expand into covering more devices
218    and perhaps platforms. [#2430]
220  - Introduced `ECO` status concept for "ECO mode" (or "High Efficiency" mode,
221    or "Energy Saver System"...) as named and defined by hardware vendors.
222    One common aspect is that this is a balance of electrical efficiency vs.
223    robust outage protection (which may be overkill for IT equipment whose
224    PSU can survive several milliseconds on capacitors alone) which can be
225    selected at run-time.  Previously such choice was made at the time of
226    purchase, with the UPSes only supporting some one protection strategy.
227    [issue #2495, PR #2637]
228    * Updated documentation, end-user clients (CGI, NUT-Monitor UI);
229    * Updated `upsmon` client with ability to report entering and exiting
230      the ECO mode if reported by the driver;
231    * Initial implementation for Eaton devices with `usbhid-ups` driver.
233  - Introduced handling for the `ALARM` status, which already existed as a
234    common denominator for devices seen with active `ups.alarm` variables.
235    UPS devices in an `ALARM` status are generally considered volatile and
236    may be considered critical/dead by the `upsmon` client earlier than in
237    other statuses (e.g. in no-communication situations). It has to be noted
238    that there is no common standard for what constitutes an alarm and such
239    alarm states were also previously observed for less severe reasons. This
240    depends on the manufacturer/device-specific implementation in the driver.
241    [issue #2657, PR #2658]
242    * Updated documentation, end-user clients (CGI, NUT-Monitor UI);
243    * Updated `upsmon` client with ability to report entering and exiting
244      the ALARM status if reported by the driver;
245    * Updated `upsmon` client with setting to toggle whether an `ALARM`
246      status can prompt the UPS to become critical in certain situations.
248  - upsmon:
249    * it was realized that the `POWERDOWNFLAG` must be explicitly set in the
250      configuration file, there is no built-in default in the binary program
251      (the settings facilitated by the `configure` script during build "only"
252      impact the `upsmon.conf.sample`, init-scripts and similar files generated
253      from templates). [issue #321, PR #2383]
254    * added an `OBLBDURATION` (seconds) setting to optionally delay raising
255      the alarm for immediate shutdown in critical situation. [#321]
257  - More systemd integration:
258    * Introduced a `nut-sleep.service` unit which stops `nut.target` when a
259      system sleep was requested, and starts it when the sleep is finished.
260      This helps avoid NUT shutting down a woken-up system just because its
261      power state was critical before the sleep (called as a `SHUTDOWNCMD`
262      implementation by the end-user), and a next-read timestamp was not seen
263      (deemed to be a stale UPS, meaning lost communications during critical
264      state, so must go down ASAP). While not as elegant as native systemd
265      "inhibitor interface" support, this approach does work. [#1833, #1070]
266    * Introduced support for the "inhibitor interface" as well (should be
267      available on systems with systemd version 183 or newer) for a better
268      handling of the time jump specifically in the `upsmon` client via new
269      `Inhibit()` method in `common.c`. [#1070]
270    * As an extension of the logic introduced above, hopefully now `upsmon`
271      would behave better in face of any significant and unexpected clock
272      jumps (on POSIX builds so far), even if they are not suspend/hibernate
273      events (or they were but we could not have an inhibit lock). Now they
274      should be handled similar (avoid stale UPS data and rash decisions)
275      for summer/winter time change on non-UTC deployments, a debugger
276      suspending the `upsmon` process, etc. [#2597]
278  - gamatronic driver revised for safer memory operations; this was reported
279    to have fixed a Segmentation Fault seen in earlier NUT releases with
280    some of the devices supported by this driver. [#2427]
282  - upsd:
283    * `upsd_cleanup()` is now traced, to more easily see that the daemon is
284      exiting (and/or start-up has aborted due to configuration or run-time
285      issues). Warning about "world readable" files clarified. [#2417]
287  - nut-scanner:
288    * the tool relies on dynamic loading of shared objects (library files)
289      orchestrated at run-time rather than pre-compiled, to avoid excessively
290      huge package footprints. This however relies on knowing (or sufficiently
291      safely guessing) the library file names to use, and short `libname.so`
292      is not ubiquitously available. With the new `m4` macro `AX_REALPATH_LIB`
293      we can store and try to use the file name which was present on the build
294      system, while we search for a suitable library. [#2431]
296 NOTE: A different but functionally equivalent trick is done for `libupsclient`
297 during a NUT build.
298    * fixed support for IPv6 addresses (passed in square brackets) for both
299      `-s` start/`-e` end command-line options, and for `-m cidr/mask` option.
300      [issue #2512, PR #2518]
301    * newly added support to scan several IP addresses (single or ranges)
302      with the same call, by repeating command-line options; also `-m auto{,4,6}`
303      can be specified (once) to select IP (all, IPv4, IPv6) address ranges of
304      configured local network interfaces.
305      An `/ADDRLEN` suffix can be added to the option, to filter out discovered
306      subnets with too many bits available for the host address part (avoiding
307      millions of scans in the extreme cases).
308      [issue #2244, issue #2511, PR #2509, PR #2513, PR #2517]
309    * implemented parallel scanning for IPMI bus, otherwise default scan for
310      all supported buses with `-m auto` takes unbearably long. [#2523]
311    * bumped version of `libnutscan` to 2.6.0, it now includes a few more
312      methods and symbols from `libcommon`. [issue #2244, PR #2509]
313    * do not actively suggest `vendor(id)`, `product(id)`, and `serial` options
314      for `bcmxcp_usb`, `richcomm_usb` and `nutdrv_atcl_usb` drivers for now
315      [#1763, #1764, #1768, #2580]
317  - common code:
318    * introduced a `NUT_DEBUG_SYSLOG` environment variable to tweak activation
319      of syslog message emission (and related detachment of `stderr` when
320      backgrounding), primarily useful for NIT and perhaps systemd. Most
321      methods relied on logging bits being set, so this change aims to be
322      minimally invasive to impact setting of those bits (or not) in the
323      first place. [#2394]
324    * `root`-owned daemons now use not the hard-coded `PIDPATH` value set
325      by the `configure` script during build, but can override it with a
326      `NUT_PIDPATH` environment variable in certain use-cases (such as
327      tests). [#2407]
328    * introduced a check for daemons working with PID files to double-check
329      that if they can resolve the program name of a running process with
330      this identifier, that such name matches the current program (avoid
331      failures to start NUT daemons if PID files are on persistent storage,
332      and some unrelated program got that PID after a reboot).  This might
333      introduce regressions for heavily customized NUT builds (e.g. those
334      embedded in NAS or similar devices) where binary file names differ
335      significantly from a `progname` string defined in the respective NUT
336      source file, so a boolean `NUT_IGNORE_CHECKPROCNAME` environment
337      variable support was added to optionally disable this verification.
338      Also the NUT daemons should request to double-check against their
339      run-time process name (if it can be detected). [issue #2463]
340    * introduced `m4` macros to check during `configure` phase for the
341      platform, and a `nut_bool.h` header with `nut_bool_t` type to use
342      during build, to avoid the numerous definitions of Boolean types
343      and values (or macros) in the NUT codebase. [issue #1176, issue #31]
344    * custom `distcheck-something` targets did not inherit `DISTCHECK_FLAGS`
345      properly. [#2541]
346    * added `status_get()` in NUT driver state API, to check if a status
347      token string had been set recently, and to avoid duplicate settings.
348      [PR #2565]
349    * local socket/pipe protocol introduced a `LOGOUT` command for cleaner
350      disconnection handling. [#2572]
351    * codebase adapted to the liking of `clang-18` and newer revisions of
352      `gcc-13`+ whose static analyzers on NUT CI farm complained about some
353      imperfections after adding newer OS revisions to the population of
354      build agents. [#2585, #2588]
356  - updated `docs/nut-names.txt` with items defined by 42ITy NUT fork. [#2339]
358  - various recipe, documentation and source files were revised to address
359    respective warnings issued by the new generations of analysis tools.
360    [#823, #2437, link:https://github.com/networkupstools/nut-website/issues/52[nut-website issue #52]]
362  - fixed `configure` script to use default (target-specific) values of
363    `CFLAGS`, `LIBS` etc. when probing relevant settings for each third-party
364    dependency; as a consequence, on systems that support building for many
365    targets, we check relevant build-ability for that target and not for the
366    building system itself. [issue #2673, PR #2675]
368  - fixed dynamic linking of Mozilla NSS on systems like Solaris/illumos,
369    where the shared objects are not packaged into the common RPATH.
370    [issue #2674, PR #2675]
372  - added `scripts/valgrind` with a helper script and suppression file to
373    ignore common third-party problems. [#2511]
375  - revised `nut.exe` (the NUT for Windows wrapper for all-in-one service)
376    to be more helpful with command-line use (report that it failed to start
377    as a service, have a help message, pass debug verbosity to launched NUT
378    programs...) and add a man page for it. [issue #2432, PR #2446]
380  - the `PyNUTClient` module should no longer rely on presence of a `telnetlib`
381    module in the build or execution environment (deprecated in Python 3.11,
382    removed since Python 3.13). [#2183]
384  - enabled installation of built single-file PDF and HTML (including man page
385    renditions) under the configured `docdir`. It seems previously they were
386    only built (if requested) but not installed via `make`, unlike the common
387    man pages which are delivered automatically. [#2445]
389    NOTE: The `html-chunked` documents are currently still not installed.
391  - added support to `./configure --with-doc=man=dist-auto` to use distributed
392    manual page files if present; only fall back to build them if we can. [#2473]
394  - added a `make distcheck-light-man` recipe to require verification that the
395    manual page files can be built using the prepared "tarball" archive. [#2473]
397  - revised the documentation building recipes, with the goal to avoid building
398    the `ChangeLog` products and their intermediate files more than once (but
399    still react to `git` metadata changes during development), and to sanity
400    check the resulting final document (currently only for `html-single` mode).
401    As part of this, the `CHANGELOG_REQUIRE_GROUP_BY_DATE_AUTHOR` setting was
402    added (for `make` calls and used by `tools/gitlog2changelog.py.in` script),
403    and it defaults to `true` allowing for better ordered documents at the cost
404    of some memory during document generation. [#2510]
406  - lines in first section of NUT configuration report (can optionally remain as
407    `config.nut_report_feature.log` and be installed into shared documentation
408    of a NUT package) are now better grouped as miscellaneous features and
409    detection results, then drivers and programs/tools. [#2676]
411  - added a `common/Makefile.am` build product for a new internal library
412    `libcommonstr.la` which allows a smaller selection of helper methods
413    for tools like `nut-scanner` which do not need the full `libcommon.la`
414    nor `libcommonclient.la`. [#2478, #2491]
416  - added a `drivers/Makefile.am` build product for a new internal library
417    `libserial-nutscan.la` to simplify `tools/nut-scanner/Makefile.am` recipes.
418    [#2490]
420  - build of `snmp-ups` and `netxml-ups` drivers now explicitly brings linker
421    dependency on chosen SSL libraries. [#2479]
423  - introduced `configure --with-modbus+usb` option to require an USB-capable
424    libmodbus, and defaulted a couple of specific situations as if this was
425    required (implicitly): `configure --with-modbus --with-usb` and
426    either `--with-drivers=*apc_modbus*` (actually implies `--with-modbus`)
427    or `--with-modbus-includes=... --with-modbus-libs=...`
428    as a way to avoid surprises with custom NUT builds aiming to have an
429    USB-capable `apc_modbus` driver (currently this requires a custom-built
430    libmodbus). Also fixed (re-)detection of libmodbus RTU USB support with
431    static libmodbus builds. [#2666]
433  - brought keyword dictionaries of `nutconf` and `augeas` NUT configuration
434    file parsers up to date; restored automated checks for `augeas` lenses.
435    [issue #657, issue #2294]
437    NOTE: Some known issues remain with augeas lens definitions so currently
438    they should be able to parse common simple use-cases but not certain types
439    of more complex configurations (e.g. some line patterns that involve too
440    many double-quote characters) which are valid for NUT proper. [#657]
442  - Cross-builds using only a host implementation of `pkg-config` program
443    should now ignore host `*.pc` files and avoid confusion.
445  - NUT CI farm build recipes, documentation and some `m4`/`configure.ac`
446    sources updated to handle a much larger build scope on MacOS. Also
447    migrated the builders to Apple Silicon from x86 (deprecated by CircleCI).
448    [#2502]
450  - Introduced a simple experiment to expose NUT client readings as filesystem
451    objects via FUSE, in `scripts/fuse/execfuse-nut` now. [#2591]
454 Release notes for NUT 2.8.2 - what's new since 2.8.1
455 ----------------------------------------------------
457 https://github.com/networkupstools/nut/milestone/10
459  - Fix fallout of development in NUT v2.8.0 and/or v2.8.1:
460    * dstate machinery: a segmentation fault (null pointer dereference) was
461      possible with `INSTCMD` processing of commands without parameters nor
462      `TRACKING` identifier. [#2155]
463    * USB bus number detection for libusb-1.0 builds was overly zealous and
464      wrongly considered zero values as an error. [#2198]
465    * `upsmon` recognition of `CAL` state could linger after the calibration
466      activity was completed by the hardware, which led to mis-processing of
467      shutdown triggers. Also, notification was added to report "finished
468      calibration". [issue #2168, PR #2169]
469    * `upsmon` recognition of `OFF` state as a trigger for FSD (forced shut
470      down) criticality considered also the input line state, which may be
471      an independently evolving circumstance. [issue #2278, PR #2279]
472    * `upsmon` support for `POLLFAIL_LOG_THROTTLE_MAX` did not neuter the
473      applied setting when live-reloading configuration, so commenting it
474      away in `upsmon.conf` did not have the effect of resetting the logging
475      frequency to default. It also did not reset the counters to certainly
476      follow the new configuration for existing faults. [issue #2207, PR #2209]
477    * `upsmon` support for `POLLFAIL_LOG_THROTTLE_MAX` had an off-by-one error
478      (e.g. reporting "Data stale" or "Driver not connected" every 30 sec with
479      `POLLFAIL_LOG_THROTTLE_MAX 5` and `POLLFREQ 5` settings). [#2207]
480    * Drivers running with non-default user account (e.g. with `user=root`
481      in their configuration) failed to apply group ownership and permissions
482      to their Unix socket file for interaction with the local data server.
483      [#2185, #2096]
484    * Dispatcher script `scripts/python/app/NUT-Monitor` referenced `py3qt3`
485      instead of the correct `py3qt5`. It also tries to check both `py2gtk2`
486      and `py3qt5` implementations verbosely, even if one is not installed.
487      [#2199, #2201]
488    * Set the `DesktopFileName` in `scripts/python/app/NUT-Monitor-py3qt5`,
489      this binds the application with the desktop file and allow the Open
490      Desktop compatible implementation to display the proper icon and
491      application name. [#2205]
492    * Original recipe for `apc_modbus` strictly required USB support even if
493      building NUT without it. [#2262]
494    * Builds requested with a specific C/C++ language standard revision via
495      `CFLAGS` and `CXXFLAGS` should again be honoured. [PR #2306]
496    * Allow requesting detailed debug builds (with disabled optimizations for
497      binaries to best match the source code) for supported compilers using
498      `configure` script option `--with-debuginfo`. Note that default autoconf
499      behavior usually embeds moderate optimizations and debug information on
500      its own. [PR #2310]
501    * A fix applied among clean-ups between NUT v2.7.4 and v2.8.0 releases
502      backfired for `usbhid-ups` subdriver `belkin-hid` which in practice
503      relied on the broken older behavior; more details in its entry below.
504      [PR #2371]
506  - nut-usbinfo.pl, nut-scanner and libnutscan:
507    * Library API version for `libnutscan` was bumped from 2.2.0 to 2.5.0
508      during evolution of this NUT release.
509    * USB VendorID:ProductID support list files generated by the script for
510      different OS frameworks now include a comment with other possibly
511      compatible driver names, where the respective file format allows for
512      comments.
513    * Added the concept of `alt_driver_names` in `nutscan_device_t` structure
514      for ability to suggest a comment with other possibly compatible driver
515      names in configuration snippets generated by `nut-scanner`; practical
516      support implemented for USB connected drivers.
517    * Added the concept of commented-away suggested option values `comment_tag`
518      and a method to `nutscan_add_commented_option_to_device()`, instead of
519      hacks in prepared config data which broke some use-cases. [#2221]
520    * Command-line option `-U` for USB scan can now be specified several times
521      to increase the detail level about hardware link to the device (this was
522      previously always suggested, but may be not reliable if USB enumeration
523      gets changed over time). [#2221]
524    * Added generation of FreeBSD/pfSense quirks for USB devices supported
525      by NUT (may get installed to `$datadir` e.g. `/usr/local/share/nut`
526      and need to be pasted into your `/boot/loader.conf.local`). [#2159]
527    * nut-scanner now avoids creating ambiguous `nutdevN` device section names
528      when called separately to scan different media buses (one at a time).
529      Now the "bus" name would be embedded (e.g. non-colliding `nutdev-usb1`
530      and `nutdev-snmp1`). [#2247]
531    * nut-scanner can now discover NUT simulated devices (`.dev` and `.seq`
532      files) located in your sysconfig directory, and prepare configuration
533      sections with the simulation driver (currently `dummy-ups`). [#2246]
534    * nut-scanner now reports `dummy-ups` as driver when scanning NUT "bus"
535      with Old or Avahi method. [#2236, #2245]
537  - upsd: Fixed conditions for "no listening interface available" diagnosis
538    to check how many listeners we succeeded with, not whether the first one
539    succeeded or not. If not all requested (non-localhost) listeners were
540    available, default to fail the daemon start-up attempt; support for an
541    `ALLOW_NOT_ALL_LISTENERS` setting was added to control this behavior. [#723]
543  - NUT CI improvements:
544    * Added publishing recipes for PyNUT client bindings for NUT, so it ends
545      up in the link:https://pypi.org/project/PyNUTClient[PyPI repository].
546      [#2158]
547    * Added support for new `ccache` namespace concept, where possible. [#2256]
548    * Fixed an issue for builds configured `--without-usb`. [#2263]
549    * Added a fallback for `libgd` discovery (for CGI etc. builds). [#2287]
550    * Made `aspell` TeX module detection more reliable. [#2206]
551    * Fixed recipes for completely out-of-tree builds to pass with documentation
552      generation and checking on all tested "make" implementations. [#2318]
553    * Various other recipe and documentation clean-up efforts. [#2284, #2269,
554      #2261]
556  - main driver core codebase:
557    * Help users of drivers that can be built to support optionally USB and
558      other media (like `nutdrv_qx` built for serial-only support), and built
559      in fact without USB support but used for USB devices, with some more
560      information to make troubleshooting easier. [issue #2259, PR #2260]
561    * Driver programs with debug tracing support via `-D` CLI option and/or
562      the `NUT_DEBUG_LEVEL` environment variable now check those earlier in
563      their life-time, so that initialization routine can be debugged. [#2259]
564    * Multiple USB-capable drivers got options to customize `usb_config_index`
565      `usb_hid_rep_index`, `usb_hid_desc_index`, `usb_hid_ep_in` and
566      `usb_hid_ep_out` hardware connection settings via `ups.conf` options.
567      This is treated as experimental, not all code paths may be actually
568      using such values from `struct usb_communication_subdriver_t` rather
569      than hard-coded defaults. Discovery of correct values is up to the
570      user at the moment (using `lsusb`, internet search, luck...) [#2149]
572  - nut-driver-enumerator (NDE) service/script:
573    * The optional daemon mode (primarily useful for systems which monitor
574      a large and dynamic population of power devices) was enhanced with a
575      `--daemon-after` variant which parses the configuration once before
576      daemonization and this has a chance to fail while not forked off, as
577      well as to allow only completing the service unit initialization when
578      everything is actually ready to work (so further dependencies can start
579      at the proper time). [#682]
580    * Also applied other optimizations to the script implementation. [#682]
582  - powerpanel text driver now handles status responses in any format and should
583    support most devices. [#2156]
585  - tripplite_usb driver now allows any device to match if a particular Unit ID
586    was not specified in `ups.conf`. [PR #2297, issues #2282 and #2258]
588  - snmp-ups driver:
589    * added support for Eaton EMP002 sensor for ATS16 NM2 sub-driver. [#2286]
590    * mapping table updates for apc-mib sub-driver. [#2264]
592  - usbhid-ups driver:
593    * `arduino-hid` subdriver was enhanced from "initial bare bones" experimental
594      set of mapped data points to support some 20 more mappings to make it more
595      useful as an UPS driver, not just a controller developer sandbox. [#2188]
596    * `cps-hid` subdriver now supports devices branded as Cyber Energy and built
597      by cooperation with Cyber Power Systems. [#2312]
598    * `belkin-hid` subdriver now supports Liebert PSI5 devices which have a
599      different numeric reading scale than earlier handled models. [issue #2271,
600      PR #2272, PR #2369] Generally the wrong-scale processing was addressed,
601      including a regression in NUT v2.8.0 which led to zero values
602      in voltage data points which NUT v2.7.4 reported well [#2371]
603    * The `onlinedischarge` configuration flag name was too ambiguous and got
604      deprecated (will be supported but no longer promoted by documentation),
605      introducing `onlinedischarge_onbattery` as the meaningful alias. [#2213]
606    * Logged notifications about `OL+DISCHRG` state should now be throttled
607      (see the driver manual page for more details) [#2214, #2215]:
608      - If `battery.charge` is available, make the message when entering the
609        state and then only if the charge differs from that when we posted
610        the earlier message (e.g. really discharging) and is under
611        `onlinedischarge_log_throttle_hovercharge` value (defaults to 100%);
612      - Also can throttle to a time frequency configurable by a new option
613        `onlinedischarge_log_throttle_sec`, by default 30 sec if `battery.charge`
614        is not reported by the device (should be frequent by default, in case
615        the UPS-reported state combination does reflect a bad power condition).
617  - nutdrv_qx driver:
618    * Fixed handling of `battery_voltage_reports_one_pack` configuration flag
619      introduced in NUT v2.8.1. [originally by PR #1279; fixed by PR #2324,
620      issue #2325]
622  - Various code and documentation fixes for NSS crypto support. [#2274, #2268]
624  - Laid foundations for the SmartNUT effort (aiming to integrate drivers with
625    some other backends than the networked NUT data server process).
627  - Eaton contributed recipes and scripts used to create the IPP for Unix
628    bundle (aka Eaton IPSS Unix or UPP), a freely available value-added
629    packaging of NUT distributed as the UPS software companion for OSes
630    where their more complex UPS monitoring/management tools had not been
631    ported. This allows for delivery of NUT packages with an interactive
632    installer and some system integration scripts (events, notifications,
633    status, shutdown daemon...), and was contributed to the NUT upstream
634    project by Eaton -- provided "as is" at the moment, and may later serve
635    as foundation or inspiration for new NUT features. [#2288]
637  - nutconf (C++ library and tool to read and manage NUT configuration files)
638    was started in the open by Eaton employees and used in the IPP installer,
639    but the code lingered in a side branch. It was now brushed up to our common
640    best practices and added to the main codebase. As of this import, there are
641    known deficiencies in Windows platform support, as well as some un-awareness
642    about configuration key words which appeared in NUT since 2013. [#2290]
644  - The `tools/gitlog2changelog.py.in` script was revised, in particular to
645    convert section titles (with contributor names coming from Git metadata)
646    into plain ASCII character set, for `dblatex` versions which do not allow
647    diacritics and other kinds of non-trivial characters in sections. This can
648    cause successful builds of `ChangeLog.pdf` file on more platforms, but at
649    expense of a semi-cosmetic difference in those names. [PR #2360, PR #2366]
651 Release notes for NUT 2.8.1 - what's new since 2.8.0
652 ----------------------------------------------------
654 https://github.com/networkupstools/nut/milestone/8
656  - "UPS management protocol", Informational RFC 9271 published
657    by IETF at https://www.rfc-editor.org/info/rfc9271 and the
658    IANA port number registry was updated accordingly at
659    https://www.iana.org/assignments/service-names-port-numbers/service-names-port-numbers.xhtml?search=3493
660    (even though this RFC is not formally an Internet Standard)
662  - NUT documentation files were rearranged, renaming some to `*.adoc` pattern
663    to facilitate automatic rendering in GitHub and IDE GUIs, and adding recipe
664    support for GitHub issue/PR links. This `NEWS` file is now proper asciidoc
665    rendered into `release-notes.pdf` (and HTML versions). [issue #1953, PR #2048]
666    Internally, the documents would use a new way to define cross-linking to
667    other pages and their chapters, to facilitate different renderers (including
668    GitHub UI), and file names created for "chunked HTML" documentation format
669    will no longer have the "chapter number, section number" format which is
670    not easy to maintain over time with independent builds of documentation
671    in NUT and the actual and historic snapshots for nut-website for example.
672    Chapter/Section names will be adapted to produce "chunked HTML" file names
673    instead. Documentation links rendered in GitHub UI should point to the HTML
674    pages served by a current iteration of the NUT website. [PR #226, PR #669]
676  - A new `configure --enable-spellcheck` toggle should add spelling checks
677    to `make check` (by default, if tools are available) to facilitate quicker
678    acceptance of contributions. [#2067]
680  - Published a new maintainer GPG key to sign tags and release artifacts,
681    and possibly git commits as well, as part of solution for issue #1410.
682    You can pull it from common OpenPGP servers with the following command:
684 ----
685 :; gpg --recv-key DE0184DA7043DCF7
686 gpg: key DE0184DA7043DCF7: public key "Jim Klimov (Doing FOSS
687          since last millennium) <jimklimov@gmail.com>" imported
688 gpg: Total number processed: 1
689 gpg:               imported: 1
690 ----
692 as part of https://github.com/networkupstools/nut/issues/1410 solution.
694  - Bug fixes for fallout possible due to "fightwarn" effort and other
695    evolution in NUT v2.8.0 release:
696    * The `upsdebugx()` and similar methods were converted to macros in #685
697      to avoid useless data manipulations and requests for logged information,
698      whose results would be ignored instantly because the debug level is
699      too low. As issue #1455 and PR #1495 found, in two cases the called
700      commands did "meaningfully" modify data -- so without debug logs the
701      program misbehaved. A known regression for `upscode2` driver; might
702      be or not be a problem with `upsd` server in NUT v2.8.0 release,
703      fixed for NUT v2.8.1.
704    * A table in `cyberpower-mib` (for `snmp-ups` driver) sources was
705      arranged in NUT v2.8.0 release in a way that precluded the driver
706      logic from looking at all of its entries. Also a fix for instant
707      command definitions had in fact broken them due to other development.
708      Regressions fixed for NUT v2.8.1 [#1432, #2029]
709    * A change for file-change detection in `dummy-ups` driver for NUT
710      v2.8.0 release misfired on some platforms. Regression fixed for NUT
711      v2.8.1 [#1420]
712    * Fixed building of NUT man pages when just a few drivers are selected
713      by `configure` script for custom builds [#1467]
714    * Now that `upsdrvctl` can pass debugging level through to the launched
715      driver(s), they would by default stay in the foreground. This can
716      complicate (or simplify, when intentional) the management of service
717      instances. Now there are explicit `upsdrvctl` options for choosing
718      this (`-F`/`-B`), although default behavior is retained. Note that
719      explicit foregrounding mode also keeps `upsdrvctl` tool from exiting
720      and would not wait for one driver to complete initialization before
721      starting another in case of mass-management loop to start all drivers
722      (without specifying the single device) [#1759, #1806, #1875]
723    * The `apcsmart` and `apcsmart-old` handled invalid data too zealously
724      and aborted instead of skipping over it, like they did before [#2015]
725    * A bit maths optimization in `riello_ser` and `riello_usb` misfired [#2137]
726    * Something about compile-time macros or other warnings-related refactoring
727      seems to have confused the MGE SHUT (Serial HID UPS Transfer) driver
728      support [#2022]
729    * Some warnings were not detected by the tools or build scenarios used
730      earlier, and only got addressed now
732  - An issue was identified which could cause `libupsclient` parser of device
733    and host names to crash upon bad inputs (e.g. poorly resolved environment
734    variables in scripts). Now it should fail more gracefully [#2052]
736  - New `configure --enable-inplace-runtime` option should set default values
737    for `--sysconfdir`, `--with-user` and `--with-group` options to match an
738    existing NUT deployment -- for users who are trying if a custom build
739    of recent codebase solves their practical issues. For "quick tests", a
740    shortcut operation `./ci_build.sh inplace` was added [#1714]
742  - State tree structure and methods (including "dstate" wrapper for common
743    driver internals) was enhanced with time-stamping of last modification
744    (setting, changing, deleting the value or some fields in an entry):
745    this allows to detect stale information in a centralized fashion [#2010]
747  - We lacked log information about changes of chroot jail (uncommon) and
748    of UID/GID (everywhere), which makes troubleshooting harder (e.g. lack
749    of access to config files or USB device nodes). Now we have it [#1694]
751  - A `NUT_DEBUG_PID` envvar (presence) support was added to add current
752    process ID to tags with debug-level identifiers. This may be useful
753    when many NUT daemons write to the same console or log file. [#2118]
755  - huawei-ups2000 is now known to support more devices, noted in docs and
756    for auto-detection [#1448, #1684]
758  - nutdrv_qx updates:
759    * a `battery_voltage_reports_one_pack` driver option was added for devices
760      which "natively" report a `battery.voltage` for a single battery pack or
761      cell, not for the whole assembly [#1279]
762    * the `voltronic_qs_protocol` should now accept both "V" (as before)
763      and newly "H" dialects, which otherwise seem interchangeable [#1623]
764    * the `armac` subdriver was enhanced to support devices with a different
765      response pattern than previously expected per initial contribution.
766      It was tested to work with Vultech V2000 and Armac PF1 series. [#1978]
768  - nutdrv_qx and blazer updates:
769    * extended default ranges for max battery voltage when guessing [#1279]
771  - sms_ser, a driver for SMS Brazil UPS Protocol 1Phase, was introduced.
772    NOTE: it may later become a subdriver under nutdrv_qx. [#2090]
774  - usbhid-ups updates:
775    * added support for `subdriver` configuration option, to select the
776      USB HID subdriver for the device manually where automatic match
777      does not suffice (e.g. new devices for which no `vendorid`/`productid`
778      pair was built into any driver, or for different-capability devices
779      with same interface chips, notably "phoenixtec/liebert" and "mge") [#1369]
780    * cps-hid subdriver now applies same report descriptor fixing logic to
781      devices with ProductID 0x0601 as done earlier for 0x0501, to get the
782      correct output voltage data [#1497]
783    * apc-hid subdriver now also supports ProductID 0x0004 [#1429]
784    * ever-hid subdriver reported a `powerfactor` without a namespace (bug
785      in 2.8.0 release), fixed to `outlet.powerfactor`
786    * the `usbhid-ups` driver should now reconnect if `libusb` returned a
787      memory allocation error [#1422] (seen as "Can't retrieve Report 0a:
788      Resource temporarily unavailable"), which can cause practical problems
789      in the field -- the driver otherwise interpreted the situation as
790      `ups.status` being `OL OFF` and cut the power supply.
791    * powercom-hid subdriver: fixed `UPS.Battery.ManufacturerDate` to map
792      to `battery.mfr.date` (not `battery.date` which is the maintenance
793      replacement date) [#1644]
794    * added `onlinedischarge_calibration` option for UPSes that report
795      `OL+DISCHRG` when they are in calibration mode [#2104]
797  - riello_usb updates:
798    * added `localcalculation` option to compute `battery.runtime` and
799      `battery.charge` if the device provides bogus values [#1692, #1685]
800      (similar to `runtimecal` in some other drivers, may be refactored
801      to that configuration and logic model in later NUT releases)
803  - powercom driver should now try harder to refresh data from device [#356]
805  - tripplite_usb driver now supports configuration of `upsid` to match the
806    specific device (not all firmware/hardware models support this) [#2075]
808  - apcupsd-ups:
809    * improvement for `POLL_INTERVAL_MIN` from PR #797 was buggy [#2007]
810    * fix to clean obsoleted readings (if any) AFTER getting new info from an
811      `apcupsd` daemon, to avoid the gap when NUT driver knows nothing [#2007]
813  - apc_modbus driver was introduced, to cover the feature gap between existing
814    NUT drivers for APC hardware and the actual USB-connected devices (or their
815    firmwares) released since roughly 2010, which deprecated standard USB HID
816    support in favor of Modbus-based protocol which is used across the board
817    (also with their network management cards). The new driver can monitor APC
818    UPS devices over TCP and Serial connections, as well as USB with a patched
819    libmodbus (check https://github.com/EchterAgo/libmodbus/commits/rtu_usb
820    for now, PR pending). [#139, #2063]
821    * For a decade until this driver got introduced, people were advised to
822      use apcupsd project as the actual program which talks to a device, and
823      NUT apcupsd-ups driver to relay information back and forth. This was a
824      limited solution due to lack of command and variable setting support,
825      as well as relaying of just some readings (just whatever apcupsd exposes,
826      further constrained by what our driver knows to re-translate), with
827      little leverage for NUT to tap into everything the device has to offer.
828      There were also issues on some systems due to packaging (e.g. marking
829      NUT and apcupsd as competing implementations of the same features) which
830      required clumsy workarounds to get both installed and running. Finally,
831      there is a small matter of long-term viability of that approach: last
832      commits to apcupsd sources were in 2017 (with last release 3.14.14 in
833      May 2016): https://sourceforge.net/p/apcupsd/svn/HEAD/tree/
835  - dummy-ups:
836     * Added an `repeater_disable_strict_start` option to disable the driver
837       exiting upon encountering any kind of error at startup (as repeater).
838       This option should allow for collective `upsdrvctl` startup despite
839       individual target UPS to be repeated or `upsd` not having come up yet.
840       [#2132]
841     * Revised detection of file path (for "dummy" mode) which misfired under
842       some conditions, and unified several implementations. [#2118]
844  - NUT for Windows:
845    * Ability to build NUT for Windows, last tackled with a branch based on
846      NUT v2.6.5 a decade ago, has been revived with the 2.8.x era codebase [#5].
847      It is known that at this time some features are not complete, for more
848      details see https://github.com/orgs/networkupstools/projects/2/views/1
849    * Cross-builds of NUT for Windows using Linux and MinGW (and many custom
850      built dependency packages, as documented in the
851      link:scripts/Windows/README.adoc[scripts/Windows/README.adoc file])
852      are now regularly tested on NUT CI farm with moderate integration via
853      custom build script `scripts/Windows/build-mingw-nut.sh` [#1489]
854    * Semi-native NUT for Windows builds with MSYS2/MinGW x64 environment are
855      now regularly tested on AppVeyor, with the same `ci_build.sh` script and
856      `Makefile` checks as used across the board for local developer builds,
857      Linux/illumos/FreeBSD/OpenBSD/... on dedicated NUT CI farm on Fosshost,
858      and MacOS on CircleCI [#1552]
860  - snmp-ups updates:
861    * Fixed detection for device agents which wrongly return the sysOID value
862      as a string instead of an OID [#1710]
863    * Clearer messages about skipping MIBs during driver initialization [#2037]
864    * IETF MIB mapping updated for data points where negative readings
865      are invalid [#1558]
866    * Added SNMP subdriver "apc-epdu-mib" for APC easy PDU support [#1674]
867    * Added SNMP subdriver "eaton-pdu-nlogic-mib" for nLogic (rebranded Eaton)
868      support [#1698]
869    * Added SNMP subdriver "hpe-pdu3-cis-mib" for HPE G2 Metered & Switched PDU
870      initial "unitary" support (no daisychain support yet); also note that due
871      to SNMP v1 implementation limitations on this device, you should prefer
872      SNMP v3 to get both read and write rights [#1713]
873    * Fixed processing loop for large SNMPv2/SNMPv3 responses where one item
874      in the middle has a type error [#1682]
875    * Better manage the slight nuances (especially in `ups.status`) between
876      Eaton UPSs, and rename mibs from `pw` to `eaton_pw_nm2`, and from
877      `pxgx_ups` to `eaton_pxg_ups` [#1715]
878    * Fixed the long standing "Warning: excessive poll failures" issue, that
879      was tied to non-existent OIDs, not well handled in some parts of the
880      driver [#1716]
881    * `baytech-mib.c` subdriver: fixed `baytech_outlet_status_info[]` set
882      of valid outlet status values [#1871]
883    * `cyberpower-mib.c` subdriver: support devices which report the shorter
884      Vendor OID as their sysOID, e.g. "CyberPower PowerPanel Personal" [#1997]
885      and support more data points including hardware status alarms [#1982]
887  - The `bestfortress` driver shutdown handling was fixed to use a non-trivial
888    default timeout [#1820]
890  - The `optiups` driver only gave accurate voltage information with 120VAC
891    models and assumed a 12V battery when calculating capacity. There is
892    a protocol command that gives a (fixed) voltage which correlates with
893    the voltage selection DIP switches on the back of the UPS, taking into
894    account whether it is a 120 or 240VAC model. Likewise, now the battery
895    capacity fix is applied globally, based on whether or not the battery
896    voltage is greater than 20V. [#2089]
898  - GPIO drivers [#1855]:
899    * Added a new category of drivers, using GPIO interface to locally connected
900      devices (currently limited to 2018+ Linux libgpiod, but its architecture
901      was designed to support more OSes with their equivalents - PRs welcome)
902    * `generic_gpio_libgpiod` driver using `libgpiod` backend was added
903      (defaults to be required on Linux, optional on other platforms)
905  - Added support for `make install` of PyNUT module and NUT-Monitor desktop
906    application [#1462, #1504]
908  - Regular CI coverage for NUT codebase enhanced with CircleCI running some
909    scenarios on MacOS, might add Windows in the future. Fixed some build
910    issues for MacOS that had crept into NUT v2.8.0 release [#1415, #1421]
912  - NUT software-only drivers (dummy-ups, clone, clone-outlet) separated from
913    serial drivers in respective Makefile and configure script options [#1446]
915  - Fixed support for common USB matching options ("vendor", "device", "bus",
916    etc.) for `riello_usb` and `richcomm_usb` [#1763] and updated man pages
917    of all USB drivers using these options to include the same description
918    [#1766]
920  - Added a "busport" USB matching option (if supported by the hardware, OS and
921    libusb on the particular deployment, it should allow to specify physical
922    port numbers on an USB hub, rather than logical "device" enumeration values,
923    and in turn -- this should be less volatile across reboots etc.) [#2043]
925  - Added an `allow_duplicates` flag for common USB matching options which
926    may help monitor several related no-name devices (although without knowing
927    reliably which one is which... better than nothing) [#1756]
929  - The `nut-scanner` program should now suggest same configuration fields as
930    those used by common USB matching options in (most of the) drivers, e.g.
931    adding "device" to the generated configuration section [#1790]
933  - Stuck drivers that do not react to `SIGTERM` quickly are now retried with
934    `SIGKILL` [#1424]
936  - Each driver should now report its `driver.state` to help readers determine
937    whether it is initializing, reconnecting, or running regular loops [#1767]
939  - Code which resolves full paths to libraries should now consider the common
940    environment variable `LD_LIBRARY_PATH` as a preferred possible override
941    to built-in paths (note that most operating systems advise against setting
942    this variable unless troubleshooting, although other systems rely on it)
943    [#805]
945  - Debug information tracing methods like `upsdebugx()` should now be less
946    limited in the sizes of messages that they can print, such as path names
947    that may be quite long. Note that the OS methods manipulating the strings,
948    and receivers such as logging systems, may still impose limits of their own.
950  - The `nut-scanner` usage and debug printouts now include the loadable library
951    search paths, to help troubleshooting especially in multi-platform builds;
952    pre-filtering of the built-in paths was introduced (to walk only existing
953    and unique directory names) [#317]
955  - The nut-scanner program was updated to fall back to loading unresolved
956    library filenames, hoping that `lt_dlopen()` implementation on the current
957    platform would find library files better [#805]
959  - Detection of `libltdl` in `configure` script updated with fallback code to
960    find it on systems that deliver the library to `/usr/local/lib` (e.g. on
961    FreeBSD) [#1577]
963  - An explicit `configure --with-nut-scanner` toggle was added, specifically
964    so that build environments requesting `--with-all` but lack `libltdl` would
965    abort and require either to install the dependency or explicitly forfeit
966    the tool (some distro packages missed it quietly in the past) [#1560]
968  - The `nut-scanner` program should now by default warn about serial numbers
969    which do not make much sense (are duplicate, empty, all same character, etc)
970    [#1810]
972  - Existing openssl-1.1.0 support added for NUT v2.8.0 release was tested to
973    be sufficient without deprecation warnings for builds against openssl-3.0.x
974    (but no real-time testing was done yet) [#1547]
976  - upslog: Added support for logging multiple devices with one call to the
977    program [#1604]
979  - Documentation to integrate NUT USB driver startup with `usb_resetter` script
980    has been contributed to `scripts/usb_resetter` (the script itself is tracked
981    externally on GitHub), along with a configuration example for Linux+systemd
982    [#1887]
984  - Some fixes applied to Solaris/illumos packaging and SMF service support
985    [#1554, #1564]
987  - Some fixes for builds on older OSes with less functional default system
988    shell interpreters - now `autogen.sh` supports a `CONFIG_SHELL` envvar
989    to inject its value into generated `configure` script [#1736]
990    * Note that you may have to install additional tools (possibly from
991      third-party FOSS packaging efforts) to prepare and build the NUT
992      codebase, and/or prefer non-default system provided implementations
993      (e.g. to use the XPG4 `grep` with `-E` support on Solaris as detailed
994      in https://github.com/networkupstools/nut/issues/1736 comments)
995    * Build environment configuration notes in link:docs/config-prereqs.txt[]
996      file refreshed to cover building of current NUT codebase in CentOS 6
997      [#1804] and Solaris 8 [#1736, #1738]
999  - `configure` script, reference init-script and packaging templates updated
1000    to eradicate `@PIDPATH@/nut` ambiguity in favor of `@ALTPIDPATH@` for the
1001    unprivileged processes vs. `@PIDPATH@` for those running as root [#1719]
1003  - `configure` script enhanced: `--with-unmapped-data-points` option allows
1004    to build SNMP and USB-HID subdrivers with entries discovered by the scripts
1005    which generated them from data walks, but developers did not rename yet
1006    to NUT mappings conforming to link:docs/nut-names.txt[] standards [#1699]
1008  - PyNUT.py version bumped to 1.5.0 with some improvements:
1009    * `ListClients()` method fixed (was broken in many ways), and is now
1010      CI-tested [#549]
1011    * `DeviceLogin()` method added (mostly as aid to CI-test `ListClients()`
1012      in a practically relevant manner, so far)
1014  - nutclient C++ library:
1015    * added `listDeviceClients()` and `deviceGetClients(dev)` to `Client`
1016      classes, and `Device::getClients()` to match PyNUT capabilities [#549]
1017    * published artifacts may include a `libnutclientstub` which is an
1018      implementation of a NUT TCP client in C++ with in-memory data store.
1020  - upsclient C library:
1021    * added support for `NUT_QUIET_INIT_SSL` environment variable to hide
1022      the infamous "Init SSL without certificate database" warning [#1662]
1024  - The `upsd.conf` listing of `LISTEN` addresses was previously inverted
1025    (the last listed address was applied first), which was counter-intuitive
1026    and fixed for this release [#2012]
1028  - The `upsd` configured to listen on IPv6 addresses should handle only
1029    IPv6 (and not IPv4-mappings) to avoid surprises and insecurity; it
1030    will now warn if a host name resolves to several addresses (and will only
1031    listen on the first hit, as before in such cases) [#2012]
1033  - A definitive behavior for `LISTEN *` directives became specified, to try
1034    handling both IPv4 and IPv6 "any" address (subject to `upsd` CLI options
1035    to only choose one, and to OS abilities). When both address families are
1036    enabled, the `upsd` data server will first try to open an IPv6 socket
1037    asking for disabled IPv4-mapped IPv6 address support (if the OS honors
1038    that), and then an IPv4 socket (which may fail if the IPv6 socket already
1039    covers it anyway); in other words, you can end up with one or two separate
1040    listening sockets. [#2012]
1042  - sstate (server state, e.g. upsd) should now "PING" drivers also if they
1043    last reported themselves as "stale" (and might later crash) so their
1044    connections would be terminated if really no longer active [#1626]
1046  - Clarified documentation in codebase according to end-user feedback [#1721,
1047    #1750 and others over time]
1049  - upsmon client changes include:
1050    * Several fixes for `upsmon` behavior [#1761, #1680...], including new
1051      ability to configure default POWERDOWNFLAG location -- packagers are
1052      encouraged to pick optimal location for their distributions (which
1053      remains mounted at least read-only late in shutdown) and a new optional
1054      POLLFAIL_LOG_THROTTLE_MAX setting [#529, #506]
1055    * Also `upsmon` should now recognize `OFF` and `BYPASS` flags in `ups.status`
1056      and report that these states begin or end. The `OFF` state usually means
1057      than an administrative action happened to power off the load, but the UPS
1058      device is still alive and communicating (USB, SNMP, etc.); corresponding
1059      `MONITOR`'ed amount of power sources are considered not being "fed" for
1060      the power value calculation purposes. The `BYPASS` state is now treated
1061      similarly to `ONBATT`: currently this UPS "feeds" its load, but if later
1062      communications fail, it is considered dead. This may have unintended
1063      consequences for devices (or NUT drivers) that do not report these modes
1064      correctly (e.g. an APC calibration routine seems to start with a few
1065      seconds of "OFF" state), so the reported status is only considered as a
1066      loss of feed if it persists for more than `OFFDURATION` seconds. [#2044,
1067      #2104]
1068    * Introduced `SHUTDOWNEXIT no` configuration toggle for systems which
1069      require a long time to stop their workload such as virtual machines.
1070      Since the disconnection of a "secondary" client is treated by the
1071      "primary" system as permission to proceed with its own shutdown and
1072      power-off for the UPS, the original (now merely default) behavior to
1073      call `SHUTDOWNCMD` and immediately exit could be counter-productive.
1074      An optional delay can also be introduced. [#2133]
1075    * Note there were other changes detailed below which impacted several NUT
1076      programs, including `upsmon`.
1078  - Extended Linux systemd support with optional notifications about daemon
1079    state (READY, RELOADING, STOPPING) and watchdog keep-alive messages [#1590]
1080    * Normally *inability* to send such notifications (e.g. lack of systemd
1081      or similar framework on the particular platform) would be reported once
1082      per daemon uptime on its console log, to help troubleshooting situations
1083      where such lack of notifications can cause automated service restarts.
1084      These messages can be hidden by setting `NUT_QUIET_INIT_UPSNOTIFY=true`
1085      environment variable in init-scripts on platforms where such frameworks
1086      are not expected. [#2136]
1088  - Extended Linux systemd units with aliases named after the daemons:
1089    `nut-server.service` as `upsd.service`, and `nut-monitor.service` as
1090    `upsmon.service` (so simple `systemctl reload upsd` can work) [#1777]
1092  - Extended driver-server socket protocol with `BROADCAST (num)` keyword,
1093    and a `NOBROADCAST` as a shortcut for `BROADCAST 0`. This allows clients
1094    to toggle whether they want to receive `send_to_all()` updates from a
1095    driver, or only answers to requests they send [#1914]
1097  - Added support for `make sockdebug` for easier developer access to the tool;
1098    also if `configure --with-dev` is in effect, it would now be installed to
1099    the configured `libexec` location. A man page was also added. [#1936]
1101  - Numerous daemons (`upsd`, `upsmon`, drivers, `upsdrvctl`, `upssched`)
1102    which accepted `-D` option for debug setting previously, now can also
1103    honour a `NUT_DEBUG_LEVEL=NUM` environment variable if no `-D` arguments
1104    were provided. Unlike those arguments, the environment variable does
1105    not enforce that daemons run in foreground mode by default [#1915]
1106    * Note that unlike some other NUT daemons, `upssched` with enabled
1107      debug does not stop reporting on `stderr`! [#1965]
1109  - A bug in `upssched` was discovered and fixed, where it ran a tight loop
1110    stressing the CPU; it was presumably introduced between NUT v2.7.4 and
1111    v2.8.0 releases [#1964, #1965]
1113  - Implemented generic support for INSTCMD and SETVAR use-cases shared by
1114    all drivers, and in particular to see and change active debug verbosity
1115    using the driver-server and server-client protocol (at higher priority
1116    than CLI or config file choices) per [#1285], e.g.
1117 ------
1118 # Set verbosity level 6:
1119 :; upsrw -s driver.debug=6 UPS
1121 # Set verbosity level 0 to disable the noise (even if debug_min is set):
1122 :; upsrw -s driver.debug=0 UPS1@localhost
1124 # Un-set the protocol override, honour CLI or config-file settings again:
1125 :; upsrw -s driver.debug=-1 remoteUPS@1.2.3.4
1126 ------
1128 and a `driver.killpower` instant command (for safety, must be unlocked by
1129    `driver.flag.allow_killpower` protocol setting or `allow_killpower`
1130    configuration flag), which is now the first choice for `driver -k`
1131    operations [#1917, #1923]
1133  - Implemented basic support for `ups.conf` reloading in NUT drivers,
1134    with a `driver.reload-with-error` instant command (more commands and
1135    signal handling may be available depending on platform), with a goal
1136    of changing inconsequential settings like `debug_min` for a running
1137    driver. This can also benefit the drivers on systems managed by real-time
1138    `nut-driver-enumerator` and for simpler changes the drivers get only
1139    reloaded and not redefined and restarted. Reload signals should also
1140    be reasonably supported with `upsdrvctl` tool. Relevant CLI options
1141    for `-c CMD` handing were added to drivers and `upsdrvctl`, although
1142    their availability may vary between operating systems [#1903, #1914, #1924]
1144  - Drivers should now accept `SIGURG` (or `SIGWINCH` on systems that lack
1145    the former) on POSIX platforms to dump their current state information
1146    and move on. Such report goes to `stdout` of the driver process (may
1147    be disconnected when background mode is used) -- this can help with
1148    troubleshooting [#1907]
1150  - Recipes and `main.c` code were enhanced to produce a `libdummy_mockdrv.la`
1151    helper library during build (not intended to be installed nor distributed),
1152    in order to facilitate creation of test programs which behave like a driver
1153    [#1855]
1155  - Further revision of public headers delivered by NUT was done, particularly
1156    to address lack of common data types (`size_t`, `ssize_t`, `uint16_t`,
1157    `time_t` etc.) in third-party client code that earlier sufficed to only
1158    include NUT headers. Sort of regression by NUT 2.8.0 (note those consumers
1159    still have to re-declare some numeric variable types used) [#1638, #1615]
1161  - The `COPYING` file was updated with licenses and attribution for certain
1162    source code files and blocks coming from the Internet originally [#1758]
1164  - The `tools/gitlog2changelog.py.in` script was revised, in particular to
1165    generate the `ChangeLog` file more consistently with different versions
1166    of Python interpreter, and without breaking the long file paths in the
1167    resulting mark-up text [#1945, #1955]
1169  - The "NUT client for VMware ESXi" project (by René Garcia) got its build
1170    recipes published on GitHub at https://github.com/rgc2000/NutClient-ESXi
1171    [#1961]
1174 Release notes for NUT 2.8.0 - what's new since 2.7.4
1175 ----------------------------------------------------
1177 NOTE: Earlier discussions (mailing list threads, GitHub issues, etc.) could
1178 refer to this change set (too long in the making) as NUT 2.7.5.
1180  - New (optional) keywords for configuration files were added,
1181    so existing NUT 2.7.x builds would not accept them if some
1182    deployments switch versions back and forth -- due to this,
1183    semantically the version was bumped to NUT 2.8.x.
1185  - Add support for openssl-1.1.0 (Arjen de Korte)
1187  - libusb-1.0 API support in addition to libusb-0.1 API [#300]
1189  - Add support for `DISABLE_WEAK_SSL=true` in upsd.conf to disable older/weaker
1190    SSL/TLS protocols and ciphers: when NUT is built against relatively recent
1191    versions of OpenSSL or NSS it will be restricted to TLSv1.2 or better.
1192    For least-surprise, currently defaults to `false` and complains in log
1193    [PR #1043]
1195  - Add support for `ALLOW_NO_DEVICE=true` (as an upsd.conf flag or environment
1196    variable passed from caller of the program), to allow starting the data
1197    server initially without any device configurations and reloading it later
1198    to apply config changes on the fly [PR #766]
1200  - Add support for `debug_min=NUM` setting (ups.conf, upsd.conf, upsmon.conf)
1201    to specify the minimum debug verbosity for daemons. This allows "in-vivo"
1202    troubleshooting of service daemons without editing init scripts or service
1203    unit definitions.
1205  - Improve support for upsdrvctl for managing of numerous device configs,
1206    including default "maxretry=3" and a "nowait" option to complete the
1207    "start of everything" mode after triggering the drivers and not waiting
1208    for them to complete initializing. This matters on systems that monitor
1209    from dozens to hundreds of devices.
1211  - Drivers support a new value for `synchronous` setting, which is the
1212    new default now: `auto`.  Initially after driver start-up this mode
1213    acts as the older default `off`, but would fall back to `on` in case
1214    the driver fails to send reports to `upsd` by overflowing the socket
1215    buffer in async mode -- so the next connections of this driver uptime
1216    would be synchronized (potentially slower, but safer -- blocking on
1217    writes to the data server).  This adaptation would primarily impact
1218    and benefit devices with many (hundreds of) data points, such as
1219    ePDUs and daisy chains. [issue #1309, PR #1315]
1221  - Daemons such as upsd, upsmon, upslog, and device drivers previously
1222    implied that enabled debugging (or upslog to stdout) means foreground
1223    running, otherwise the daemon was always sent to the background.
1224    Now there are explicit options for this (`-F`/`-B`), although default
1225    behavior is retained. This change is used for simplified service unit
1226    definitions.
1228  - Improvements for device discovery or driver "lock-picking", including
1229    general support for:
1230    * "Standalone" mode (`-s` option), to monitor a device which is not
1231      detailed or mentioned in ups.conf
1232    * `NUT_ALTPIDPATH` and `NUT_STATEPATH` environment variables to override
1233      the paths built into the driver binary [PR #473 and #507]
1234    * "Driver data dump" mode (`-d` option), to poll a device for one or
1235      few ('update_count' ) loops, report discovered values (dump the data
1236      tree in upsc-like format), and exit. This complements the `nut-scanner`
1237      for finding and identifying devices.
1239  - support for new devices:
1240    * IBM 6000 VA LCD 4U Rack UPS; 5396-1Kx (USB)
1241    * Phoenix Contact QUINT-UPS model 2320461 (Modbus)
1242    * Tripp-Lite SU3000LCD2UHV (USB; protocol 1330)
1243    * Emerson Avocent PM3000 PDU (SNMP)
1244    * HPE ePDU (SNMP)
1246  - nutdrv_qx: enhanced estimation of remaining battery runtime based
1247    on speed of voltage drop, which varies as they age [PR #1027]
1249  - nutdrv_qx: several subdrivers added or improved, including:
1250    * "snr" subdriver with USB connection, for SNR-UPS-LID-XXXX [PR #1008].
1251      Note that end-users should reference explicitly the `snr` subdriver
1252      in their `ups.conf` settings because of USB chip using the same
1253      values of VendorID/ProductID as fabula_subdriver, fuji_subdriver,
1254      and krauler_subdriver.
1255    * "hunnox" subdriver, as a dialect of earlier "fabula" [PR #638]
1256      adds support for Hunnox HNX-850 with USB connection and reported to work
1257      for Powercool, Iron Guardian, ARES devices and possibly many others from
1258      discussions linking to the pull request which introduced the driver.
1259    * "phoenixtec" subdriver for Masterguard A and E series, device series
1260      A700/1000/2000/3000(-19) and E40/60/100(-19). [PR #975]
1261    * "ablerex" subdriver provided by the OEM vendor, note that it replaces
1262      "krauler_subdriver" as default handler for VID:PID 0xffff:0x0000
1263      [PR #1135]
1264    * Legrand HID defined and handled by "krauler_subdriver" by default
1265      [PR #1075, issue #616]
1266    * add new "armac" subdriver, tested with Armac R/2000I/PSW, but should
1267      support other UPSes that work with "PowerManagerII" software from
1268      Richcomm Technologies from around 2004-2005 [PR #1239, issue #1238]
1270  - microsol-apc (starting at version 0.68 as derived from solis 0.67):
1271    adding support for newer APC Back-UPS BR hardware, such as
1272    APC Back-UPS BZ1500, BZ2200BI and BZ2200I [PR #994]
1274  - pijuice: added new i2c bus driver for PiJuice HAT, a battery UPS module
1275    for the Raspberry Pi systems [PR #730]
1277  - huawei-ups2000: added new driver for USB (Linux 5.12+ so far) and Serial
1278    RS-232 Modbus device support of Huawei UPS2000/2000A (1kVA-3kVA) series,
1279    and possibly some related FSP UPS models. [PR #954]
1281  - socomec_jbus: added new driver for modbus-based JBUS protocol over serial
1282    RS-232 for Socomec UPS (tested with a DIGYS 3/3 15kVA model, working
1283    on Linux x86-64 and Raspberry Pi 3 ARM). [PR #1313]
1285  - adelsystem_cbi: added new driver for ADELSYSTEM CBI2801224A, an all-in-one
1286    12/24Vdc DC-UPS, which supports the modbus RTU communication protocol
1287    [PR #1282]
1289  - generic_modbus: added new driver for TCP and Serial Modbus device support.
1290    The driver has been tested against PULS UPS (model UB40.241) via
1291    MOXA ioLogikR1212 (RS485) and ioLogikE1212 (TCP/IP), and configuration
1292    allows to map custom registers and addresses to NUT events [PR #1052]
1294  - genericups: added support for FTTx battery backup devices, and new signal
1295    type mappings for the contact closure pins interpretation (RB for replace
1296    battery, BYPASS for disconnected battery, and "none" or NULL for signals
1297    to ignore) [PR #1061]
1299  - add devices to HCL/DDL:
1300    * APC Back-UPS CS (USB)
1301    * CPS CP1500EPFCLCD (USB)
1302    * CPS EC350G, EC750G (USB)
1303    * CPS PR2200LCDRT2U (SNMP)
1304    * Eaton ATS 16 and 30 (SNMP)
1305    * Eaton 5E2200VA (USB)
1306    * Eaton 9PX Split Phase 6/8/10 kVA (XML/USB/SHUT)
1307    * Eaton 9PX (XML/USB/SHUT)
1308    * Eaton Ellipse PRO 650 VA (USB)
1309    * Ippon Back Comfo Pro II 650/850/1050 (USB)
1310    * Numeric Digital 800 (USB)
1311    * Opti-UPS PS1500E (USB)
1312    * Powercool 350VA to 1600VA (USB)
1314  - C++11 support in nutclient library and cppunit tests
1316  - Added C++ testing mock for TcpClient class (nutclientmem/MemClientStub:
1317    data stored in local memory) [PR #1034]
1319  - Dual Python 2 and 3 compatibility in development scripts; ability to
1320    run build activities and resulting built NUT programs on systems that
1321    do not have a binary named "python" [PR #1115 and some before it]
1323  - Added Russian translation for NUT-Monitor GUI client [PR #806]
1325  - Separated NUT-Monitor UI into two applications, NUT-Monitor-py2gtk2 and
1326    NUT-Monitor-py3qt5, suitable for two generations of Python ecosystem
1327    with their great differences; `NUT-Monitor` name is retained for wrapper
1328    script which calls one of these, such that the current system can execute
1329    [PRs #1310, #1354]
1331  - Various USB driver families: expanded device-matching with "device" in
1332    addition to "bus" and generic USB fields. This is needed to support
1333    multiple attached devices that seem identical by other fields (e.g.
1334    same vendor, same model, same USB bus, and no serial number) [PR #974]
1336  - Various USB driver families: Improved HID parsing for byte-stream to
1337    number conversions on different CPU architectures [PR #1024]
1339  - Various USB HID driver families: added support for composite devices
1340    utilizing interface greater than 0 for the UPS interface [PR #1044]
1342  - usbhid-ups:
1343    * added generic framework for fixing Report Descriptors which can be
1344      used for different manufacturers by adding code to the appropriate
1345      subdriver rather than polluting the main code with UPS specific
1346      exceptions, and applied fixes for known mistakes in (some releases
1347      of firmware for) CyberPower CPS*EPFCLCD [issue #439, PR #1245]
1348    * added `onlinedischarge` option for UPSes that report `OL+DISCHRG`
1349      when wall power is lost [PR #811]
1350    * changed detection of VendorID 0x06da handling of which is claimed
1351      by Liebert/Phoenixtec HID historically, and MGE HID (for AEG PROTECT
1352      NAS UPSes) since NUT 2.7.4, so that the higher-priority MGE subdriver
1353      would not grab each and all of the devices exposing that ID [PR #1357]
1354    * CPS HID: add input.frequency and output.frequency
1355    * OpenUPS2: only check OEM Information string once (fewer log messages)
1356    * Liebert GXT4 USB VID:PID [10AF:0000]
1357    * add battery voltage and input/output transfer voltage and frequency
1358      in Liebert/Phoenixtec HID mapping, to support PowerWalker VFI 2000 TGS
1359      better [PR #564, issue #560]
1360    * add a little delay between multicommands [PR #1228]
1361    * fix Eaton/MGE mapping for beeper handling
1362    * add IBM USB VID
1363    * add deep battery test for CyberPower OL3000RMXL2U
1364    * report the libusb version used
1365    * fixed CPU architecture dependent bitmask math issues, causing wrong
1366      numbers interpreted from wire protocol data in Big-Endian LP64 builds
1367      (SPARC64, s390x, etc.) [issue #1023, PRs #1024, #1040, #1055, #1226]
1368    * add Delta UPS Amplon R Series, tested on R1K and R3K model [PR #987]
1369    * add Delta Minuteman UPS VID/PID [PR #1230, issues #555 and #1227]
1370    * add AMETEK Powervar UPM [PR #733]
1371    * add Tripplite AVR750U (ProductID 0x3024) [PR #963]
1372    * add Arduino HID device support with new arduino-hid subdriver [PR #1044]
1373    * add new salicru-hid subdriver, tested with Salicru SPS Home 850 VA
1374      [PR #1199, issue #732]
1375    * add new ever-hid subdriver to support EVER UPS devices (Sinline RT Series,
1376      Sinline RT XL Series, ECO PRO AVR CDS Series) [PR #431]
1377    * add ability to set `battery.mfr.date` for APC HID UPS [PR #1318]
1379  - usbhid-ups / mge-shut: compute a realpower output load approximation for
1380    Eaton UPS when the needed data is not present
1382  - snmp-ups:
1383    * APC ePDU MIB support
1384    * add `input.phase.shift` variable
1385    * add configurable write-able `ondelay` (`ups.delay.start`) and `offdelay`
1386      (`ups.delay.shutdown`) as timeticks support [PR #276]
1387    * outlet groups
1388    * fix the rounding / truncation of some values
1389    * add outlet.N.name for Eaton ePDU
1390    * add input.bypass.frequency for Eaton 3ph
1391    * fix support for Eaton 2-phase ("split phase") UPS
1392    * add flag to list currently loaded MIB-to-NUT mappings
1393    * fix input.L2.voltage on Eaton G2/G3 PDU
1394    * update Eaton Aphel Revelation MIB
1395    * support Raritan Dominion PX2 PDU
1396    * support Emerson Avocent PM3000 PDU
1397    * improve ALARM flag handling
1398    * add firmware version for new HPE Network card
1399    * add ups.load, battery.charge, input.{voltage,frequency} and output.voltage
1400      for CyberPower, as well as shutdown and other instant commands
1401    * several rounds of updates for Eaton devices, including new ATS and ePDU
1402      hardware families
1403    * fixed bit mask values for flags to surely use different numbers behind
1404      logical items (inevitably changing some of those macro symbols) [PR #1180]
1406  - snmp-ups and nut-scanner should now support more SNMPv3 Auth and Priv
1407    protocols, as available at NUT build time [PRs #1165, #1172]
1409  - nut-scanner: various improvements, including:
1410    * detection of libraries at runtime
1411    * tracing information
1412    * limiting parallelism (thread count) [PRs #1158, #1164]
1414  - nut-ipmipsu: improve FreeIPMI support to build cleanly against older and
1415    newer FreeIPMI versions [PR #1179]
1417  - the powerpanel driver now also supports CyberPower OR1500LCDRTXL2U with
1418    serial cable [PR #538]
1420  - powercom driver: implement `nobt` config parameter to skip battery check
1421    on initialization/startup [PR #1256]
1423  - netxml-ups:
1424    * Report calibration status
1425    * Fix for erroneous battery info (MGEXML/0.30) [PR #1069]
1427  - solis: various improvements and fixes
1429  - liebert-esp2: Correct battery V scaling, update docs, implement split-phase
1430    unit support [PR #412]
1432  - tripplite: the "Tripp-Lite SmartUPS driver" as tested with SMART2200NET
1433    learned to discover the firmware generation and some device features,
1434    and in particular to manage power separately on one or two outlet groups
1435    [PR #1048]
1437  - tripplite_usb: updated to recognize the "3005" protocol [PR #584]
1439  - libnutclient: introduce getDevicesVariableValues() to improve performances
1440    when querying many devices (up to 15 times faster)
1442  - nut-driver-enumerator: introduced a script for Linux systemd and
1443    Solaris/illumos SMF to inspect current NUT configuration in ups.conf
1444    file and generate service management instances for each currently
1445    tracked power device. Also introduced services to monitor the NUT
1446    configuration and react to editions of this file, mostly intended
1447    for deployments that do massive monitoring of dynamically changing
1448    farms of power devices.
1450  - Fix File descriptors leaks by upsmon and upssched (SELinux errors)
1452  - systemd support improvements:
1453    * POWEROFF_WAIT
1454    * reload support for upsd
1455    * Deliver systemd-tmpfiles config to pre-create runtime locations
1456      [PR #1037 for Issue #1030]
1457    * Update units with SyslogIdentifier=%N for better logging [PR #1054]
1459  - upsrw: display the variable type beside ENUM / RANGE
1461  - Added `PROTVER` as alias to `NETVER` to report the protocol version in use.
1462    Note that NUT codebase itself does not use this value and handles commands
1463    and reported errors individually [issue #1347]
1465  - Implement status tracking for instant commands (instcmd) and variables
1466    settings (setvar): this allows to get the actual execution status from the
1467    driver, and is available in libraries and upscmd / upsrw [PR #659]
1469  - Add support for extra parameter for instant commands, both in library and
1470    in upscmd
1472  - dummy-ups can now specify `mode` as a driver argument, and separates the
1473    notion of `dummy-once` (new default for `*.dev` files that do not change)
1474    vs. `dummy-loop` (legacy default for `*.seq` and others) [issue #1385]
1476  - new protocol variables:
1477    * `input.phase.shift`
1478    * `outlet.N.name`
1479    * `outlet.N.type`
1480    * `battery.voltage.cell.max`, `battery.voltage.cell.min`
1481    * `battery.temperature.cell.max`, `battery.temperature.cell.min`
1482    * `battery.status`
1483    * `battery.capacity.nominal`
1484    * `battery.date.maintenance` (and clarified purpose of `battery.date`)
1485    * `battery.packs.external` (and clarified purpose of `battery.packs`)
1486    * `experimental.*` namespace introduced [PR #1046] to facilitate
1487      introduction of NUT drivers and their data points for which we do
1488      not yet have concepts, or which the original driver contributors
1489      did not map well per suitable NUT standards: this allows to balance
1490      having those drivers available in the project vs. least surprise
1491      for when the explicitly experimental names are changed to something
1492      stable and standardized.
1493    * Proposed to track Date and Time values (still as "opaque strings")
1494      preferably in representations compatible to ISO-8601/RFC-3339 [PR #1076]
1495      (standards update; changes to actual codebase to be applied in the future)
1496    ** New routine to convert a US formatted date string "MM/DD/YYYY" to an
1497       ISO 8601 Calendar date "YYYY-MM-DD" was added to snmp-ups.c [PR #1078]
1499  - Master/Slave terminology was deprecated in favor of Primary/Secondary
1500    modes of `upsmon` client:
1501    * Respective keywords in the configuration files (`upsd.users` and
1502      `upsmon.conf`) are supported as backwards-compatible settings,
1503      but the obsoleted values are no longer documented.
1504    * Protocol keyword support was similarly updated, with `upsmon` now
1505      first trying to elevate privileges with `PRIMARY <ups>` request,
1506      and falling back to `MASTER <ups>` just in case it talks to an
1507      older build of an `upsd` server.
1508    * For the principle of least surprise, NUT codebase still exposes the
1509      `net_master()` (as handler for `MASTER` net command) in header and
1510      C code for the sake of existing linked binaries, and returns the
1511      `OK MASTER-GRANTED` line to the older client that invoked it.
1512    * Newly introduced `net_primary()` (as handler for `PRIMARY` net command)
1513      calls the exact same application logic, but returns `OK PRIMARY-GRANTED`
1514      line to the client.
1515    * Python binding updated to handle both cases, as the only found in-tree
1516      protocol consumer of the full-line text.
1517    * For more details see issue #840 and several pull requests referenced
1518      from it, and discussions on NUT mailing lists.
1520  - Build fixes:
1521    * In general, numerous fixes were applied to ensure portability and avoid
1522      warnings (fixing a number of real bugs that caused them); CI was extended
1523      to keep the codebase free of those types of warnings which we have got
1524      rid of, requiring builds to succeed cleanly in several dozen combinations
1525      of compiler versions, C standard revisions (C99 upwards, though on many
1526      OSes with GNU99+ extensions), operating systems and CPU architectures.
1527    * Public CI introduced to automatically test every contribution (PR) and
1528      resulting increment of main NUT codebase, including Travis CI and LGTM.com
1529      services, and a Jenkins farm on virtual hardware donated by Fosshost.org;
1530      this augments testing earlier provided for some branches by Buildbot.
1531    * Added cppunit testing with valgrind for the C++ client library
1532    * Make targets added for shell script syntax checks for helper and service
1533      scripts
1534    * Make targets added for spellcheck and for maintenance of the dictionary,
1535      including incremental spellcheck to only parse recently edited text files
1536    * The AsciiDoc detection has been reworked to allow NUT to be built from
1537      source without requiring asciidoc/a2x (using pre-built man pages from
1538      the distribution tarball, for instance)
1539    * Makefile contents rearranged for more resilient out-of-tree and in-tree
1540      builds beside those made from the root workspace directory
1541    * Makefiles are tested with GNU Make and BSD Make to ensure portable recipes
1542    * More use of `pkg-config` to detect dependencies at configure time, as
1543      well as fail-safe detection of presence of pkg-config (and its macros)
1544      to survive and build without it too
1545    * "slibtool" pedantic nuances now supported, allowing an alternative to
1546      GNU libtool
1547    * Build scripts updated to remove obsoleted calls to cleanly work with
1548      autoconf-2.70 releases in 2020 (also works with 2.69 which was the
1549      earlier release since 2012)
1550    * Dynamic library loading used in certain programs and use-cases improved,
1551      especially for 64-bit vs 32-bit builds on multiple-bitness OSes
1552    * Logging routines like `upsdebugx()` were refactored as macros so there
1553      is slightly less overhead when logging is disabled [PRs #685 and #1100]
1554    * Numerous classes of compilation warnings eradicated, many of those being
1555      potential issues with implicit data type conversions and varied numeric
1556      type width, signedness, string buffer size, uninitialized variables or
1557      structure fields; some more in progress
1558    * Several logical errors found and fixed during this walk over codebase.
1559    * Cases where compilers were overly zealous and particular code was written
1560      the way wit was intentionally, including some comparisons that help with
1561      different-bitness builds but indeed seem superfluous in a certain single
1562      bitness, were commented and encased in pragmas to disable the warnings
1563    * Basic coding style (indentations, lack of trailing white space) applied
1564      per developer guide, but not automatically enforced/checked yet.
1566  - Due to changes needed to resolve build warnings, mostly about mismatching
1567    data types for some variables, some structure definitions and API signatures
1568    of several routines had to be changed for argument types, return types,
1569    or both. Primarily this change concerns internal implementation details
1570    (may impact update of NUT forks with custom drivers using those), but a
1571    few changes also happened in header files installed for builds configured
1572    `--with-dev` and so may impact `upsclient` and `nutclient` (C++) consumers.
1573    At the very least, binaries for those consumers should be rebuilt to remain
1574    stable with NUT 2.8.0 and not mismatch int-type sizes and other arguments.
1576  - As usual, more bugfixes, cleanup and improvements, on both source code
1577    and documentation.
1580 Release notes for NUT 2.7.4 - what's new since 2.7.3
1581 ----------------------------------------------------
1583  - New class of device supported: ATS - Automatic Transfer Switch are now
1584    supported in NUT. Eaton ATS are supported, and APC ones should be too. Users
1585    are welcomed to test and provide feedback
1587  - NUT command and variable naming scheme:
1588    * Document battery.charger.status, which will in time replace the historic
1589      CHRG and DISCHRG flags published in ups.status
1590    * Many extensions to support outlets groups, thresholds / alarms (ambient,
1591      input, output, outlet and outlet.group)
1593  - support for new devices:
1594    * AEG PROTECT B / NAS
1595    * APC ATS AP7724 (should be supported)
1596    * Asium P700
1597    * Eaton ATS
1598    * Eaton 5E 1100iUSB
1599    * Eaton E Series DX UPS 1-20 kVA
1600    * Eaton Powerware 9125-5000g
1601    * Electrys UPS 2500
1602    * Fideltronic INIGO Viper 1200
1603    * Legrand Keor Multiplug
1604    * LYONN CTB-800V
1605    * Micropower LCD 1000
1606    * NHS Laser Senoidal 5000VA
1607    * Sweex model P220
1608    * TS Shara
1609    * Various APCUPSD-controlled APC devices
1611  - snmp-ups:
1612    * Improve automatic detection algorithm
1613    * Provide access to Net-SNMP timeout and retries
1614    * Proper handling of integer RW variables
1615    * Implement support for alarms, through ups.alarm and outlet.n.alarm
1616    * Improve log/debug output trace
1617    * Fix loss of precision when setting values, using upsrw
1618    * Support for outlets group management
1619    * Many improvements and simplification
1620    * Add support for Tripplite units using IETF mib
1621    * Improve communication staleness detection and recovery
1622    * Add devices MAC address publication
1623    * Register values enumerations, when available
1624    * Many improvements and fixes to the SNMP subdriver creation script
1626  - Eaton:
1627    * 3ph SNMP:
1628      Many improvements to Powerware / XUPS MIB, for data and commands
1629      Add support for Eaton Power Xpert Gateway UPS Card
1630      Improve support for temperature and humidity, including low / high values
1631      Alarms handling
1632    * ePDU (G2 and G3):
1633      Improve support for ambient sensor, including thresholds and dry contacts
1634      Outlet groups handling, including data, thresholds, settings and commands
1635      Alarms handling
1636    * XML/PDC (netxml-ups):
1637      Fix Eaton XML published data
1638      Add some settings (R/W flags) on ambient thresholds
1640  - bcmxcp_usb: improvements for device claiming and multi-packets responses
1642  - dummy-ups: allow any variable to be modified
1644  - libnutclient: Fix for reads when the socket was closed by NUT server
1646  - macosx-ups:
1647    * fix for 10.10 (Yosemite), v1.1
1648    * gracefully handle disconnection of UPS (return "data stale")
1650  - nutdrv_atcl_usb: point to nutdrv_qx (fuji) for 0001:0000
1652  - nutdrv_qx:
1653    * Add new 'sgs' USB subdriver to support TS Shara units
1654    * various improvements and simplification, to the code and documentation
1656  - nut-ipmipsu: improve FreeIPMI support
1658  - nut-scanner:
1659    * Don't depend on development libraries, by looking at some known paths,
1660      including the one provided through --libdir, to find the correct libraries
1661    * Fix a crash on a 2nd call to libnutscan with SNMP method
1663  - powercom: fix the processing of input and output voltage for KIN units
1665  - solis:
1666    * many improvements and cleanup
1667    * resync with end-of-packet character
1668    * fixes for Microsol Back-Ups BZ1200-BR
1670  - tripplitesu: Fix initialization when tripplite firmware is buggy (for
1671    Tripplite SU1000RT2U and possibly more)
1673  - usbhid-ups:
1674    * various minor improvements
1675    * support for Eaton UPS with dual HID report descriptor in HID Parser
1676    * handle missing USB strings in APC code
1678  - SSL support through Mozilla NSS: Rework the NSS tests to ensure that NSS is
1679    actually installed and usable for enabling SSL support in NUT
1681  - Augeas support: Augeas lens for ups.conf was updated to add various missing
1682    global directives and ups fields
1684  - scripts/systemd/nut-server.service.in: Restore systemd relationship since it
1685    was preventing upsd from starting whenever one or more drivers, among several,
1686    was failing to start
1688  - Fix UPower device matching for recent kernels, since hiddev* devices now have
1689    class "usbmisc", rather than "usb"
1691  - Network protocol information: default to type NUMBER for variables that are
1692    not flagged as STRING . This point is subject to improvements or change in
1693    the next release 2.7.5.  Refer to link:docs/net-protocol.txt[] for more
1694    information
1696  - As usual, more bugfixes, cleanup and improvements, on both source code
1697    and documentation.
1700 Release notes for NUT 2.7.3 - what's new since 2.7.2
1701 ----------------------------------------------------
1703  - reverted POWERDOWNFLAG to /etc/killpower as in 2.6.5 (packagers may want to
1704    put this in another filesystem, though)
1706  - configure/make fixes for `systemdsystemunitdir`
1708  - apcsmart: fix command set parsing for protocol version 4 (e.g. Smart-UPS
1709    RT 10000 XL)
1711  - upslog: SIGUSR1 forces an immediate log entry
1713  - riello_usb/_ser: USB interface claim fix; improved error handling
1715  - usbhid-ups: add support for OpenUPS2 (PID: D005), Liebert GXT3 (PID: 0008)
1716    APC AP9584 Serial->USB kit (PID: 0000), and some Powercom models
1717    (PID: 0001). Fixed scaling for Cyberpower 0764:0501.
1719  - USB core: do not call usb_set_altinterface(0) by default
1721  - nutdrv_qx:
1722    * added fabula, fuji USB and Voltronic-QS-HEX subdrivers
1723    * add bestups subdriver to supersede the old standalone bestups driver
1725  - NUT Monitor: added FreeDesktop AppData file (including screenshots)
1727  - renamed udev rules file to 62-nut-usbups.rules (permissions fix)
1729  - added AIX packaging
1731  - asem: added a driver for the UPS in ASEM PB1300 embedded PCs
1733  - solis: updated to support APC Microsol units sold in Brazil
1735  - tripplite_usb:
1736    * updated to use dv/dq charge calculation for all models (also
1737      exposes battery_min and battery max as configuration variables)
1738    * added binary 3005 protocol support (such as for SMART500RT1U)
1740  - genericups: better debugging while parsing the cable description flags
1742  - all drivers: a new 'synchronous' driver flag is available for very verbose
1743    units, such as some ePDUs
1745  - Eaton:
1746    * Add support for EnergySaving features for Eaton UPSs (HID USB/SHUT and
1747      XCP USB/serial)
1748    * Fix and complete Eaton ePDUs G2/G3 support
1749    * ABM (Advanced Battery Monitoring) support through battery.charger.status
1750      in HID (USB and SHUT), XCP (USB and serial) and SNMP (Powerware XUPS MIB)
1752  - support for new devices:
1753    * APC Back-UPS 1200BR and Back-UPS BZ2200BI-BR (Microsol)
1754    * ASEM SPA PB1300 UPS
1755    * Belkin Regulator PRO-USB
1756    * Cyber Power Systems Value 1500ELCD-RU
1757    * EUROCASE EA200N 2000VA
1758    * Fideltronik LUPUS 500
1759    * Flight Technic & International (FTUPS) FT-1000BS and FT-1000BS(T)
1760    * Grafenthal PR-3000-HS
1761    * JAWAN JW-UPSLC02
1762    * Lacerda New Orion 800VA
1763    * Mecer ME-1000-WTU
1764    * NHS Sistemas de Energia Expert C Online 6000/8000/10000
1765    * NHS Sistemas de Energia Expert S Online 6000/8000/10000
1766    * Powercom BNT-xxxAP (USB product id: 0001)
1767    * Rucelf UPOII-3000-96-EL
1768    * Tripp Lite OMNIVSINT800
1769    * Voltronic Power Apex 1KVA and Imperial 1KVA
1772 Release notes for NUT 2.7.2 - what's new since 2.7.1
1773 ----------------------------------------------------
1775  - This release is the second interim release of the 2.7 testing series.
1777  - libupsclient had undefined references related to functions of libcommon.
1778    This issue was reported on Debian (bug #731156) and is now fixed
1780  - support for new devices:
1781    * CABAC UPS-1700DV2
1782    * Eaton Powerware 3105
1783    * Emerson Network Power Liebert PSI 1440
1784    * MicroDowell B.Box LP 500
1785    * Numeric Digital 800 plus
1786    * OptiUPS VS 575C
1787    * Tripp Lite SU10KRT3/1X
1789  - FreeDesktop Hardware Abstraction Layer (HAL) support was removed.
1791  - nutdrv_atcl_usb: new driver for 'ATCL FOR UPS'
1793  - al175: re-introduced this driver (actually, it was in 2.7.1)
1795  - upsdrvctl now provides retry options for upsdrvctl and driver(s)
1797  - snmp-ups: add support for XPPC-MIB and Tripp Lite SU10KRT3/1X.
1798    Also fix erroneous status in HP/Compaq SNMP MIB (with the most recent HP
1799    firmware (1.76); improved various MIBs (APC, HP/Compaq, ...)
1801  - nutdrv_qx: add new 'fallback' Q1 subdriver, with minimal 'Q1' support.
1802    General improvements on all subdrivers.
1804  - mge-shut: partially revert PnP/RTS change, for initializing the
1805    communication with the UPS. Note that nut-scanner similar function was
1806    not modified however.
1808  - FreeBSD DEVD support: generate devd.conf files for USB UPSes
1809    This adds a --with-devd-dir=PATH option to ./configure
1811  - The NUT website was moved to a standalone website. A separate code
1812    repository and source archive are now available.
1814  - As usual, more bugfixes, cleanup and improvements, on both source code
1815    and documentation.
1818 Release notes for NUT 2.7.1 - what's new since 2.6.5
1819 ----------------------------------------------------
1821 NOTE: There was no public NUT 2.7.0 release.
1823  - This release is an interim release, part of the testing series, and the
1824    first release after the transition from Subversion to Git.
1825    The last release (2.6.5) is almost a year old. A lot of work has
1826    been done, but a good amount remains to achieve 2.8.0 goals.
1827    Please read the link:UPGRADING.adoc[] notes.
1829  - Added support for SSL via the Mozilla NSS library, in addition to the
1830    existing OpenSSL support.
1832  - Added a new driver, nutdrv_qx, for Megatec/Qx devices. This driver will
1833    eventually replace the blazer_ser and blazer_usb drivers. In particular, it
1834    adds support for Voltronic Power devices.
1836  - Increased USB_TIMEOUT to standards-compliant 5.000 seconds in most drivers.
1837    This should reduce the number of timeouts on low-speed USB 1.1 devices.
1839  - The jNut Java source has been split into a separate GitHub repository.
1841  - Added many devices to the HCL. Of particular note are many Tripp Lite USB
1842    HID PDC models which were tested against NUT by Tripp Lite.
1844  - Reworked some visual elements of the HCL. The output is better tailored for
1845    graphical and text-only browsers, but suggestions are welcome for additional
1846    accessibility enhancements.
1848  - Also increased timeouts and added redundant commands to improve reliability
1849    of mge-utalk driver.
1851  - Added the apcupsd-ups driver to interoperate with apcupsd installations.
1853  - Added documentation on creating subdrivers for snmp-ups and nutdrv_qx.
1855  - Added new drivers for the Riello UPS product line (riello_ser/riello_usb).
1857  - Many improvements to the BCM/XCP drivers have been merged in. This includes
1858    an improved data reception loop, and additional mappings.
1860  - Added a few variables to the Powercom HID mappings.
1862  - Updated the apcsmart driver, and renamed the previous driver to apcsmart-old.
1864  - Fixed the battery percentage calculation in the bestfcom driver.
1866  - libnutclient has been added as a C++ alternative to libupsclient.
1868  - Packaging files for Solaris and HP-UX (sponsored by Eaton)
1870  - Fix shutdown of Eaton HID, using usbhid-ups and mge-shut
1872  - usbhid-ups: final fix for APC Back UPS ES.  APC Back UPS ES devices have
1873    buggy firmware, and this version does not cause a regression. The max_report
1874    variable should be set automatically based on the USB identification values.
1875    * UPDATE: known as `maxreport` flag for `usbhid-ups` driver, and as a
1876      `max_report_size` setting in code, as of NUT v2.8.2 release.
1878  - nut-scanner: fix crash
1880  - IPMI support can handle more different versions of FreeIPMI
1882  - Support power supplies scan over the network
1883    nut-scanner can now scan for power supplies with IPMI over LAN.
1884    This is currently limited to IPMI 1.5 only
1886  - Implement a framework to spell check documentation source files,
1887    using Aspell. This includes an interactive build target (make
1888    spellcheck-interactive), and an automated one (make spellcheck),
1889    mainly for QA / Buildbot purpose. Note that a base NUT dictionary
1890    is also available (link:docs/nut.dict[]), providing a glossary of
1891    terms related to power devices and management
1893  - Improve systemd integration
1895  - snmp-ups: Fixed a crash on outlet management, and added delta_ups MIB
1896    support. Also fixed mappings for upsBypassVoltage, upsBypassCurrent, and
1897    upsBypassPower in three-phase IETF MIB.
1900 Release notes for NUT 2.6.5 - what's new since 2.6.4
1901 ----------------------------------------------------
1903  - This release fixes an important regression in upssched:
1904    any upssched.conf command that takes a second argument resulted in
1905    a defective frame sent to the parent process. Thus, the command was
1906    not executed (report and patch from Oliver Schonefeld)
1908  - Website hosting: free NUT from Eaton website hosting
1909    +
1910    +
1911    NUT website (https://www.networkupstools.org) is no longer hosted by Eaton.
1912    Arnaud Quette (NUT project leader) has taken over NUT hosting on his own,
1913    to give NUT back some independence.
1914    +
1915    +
1916    This effort is also part of a logic to stop crediting Eaton for
1917    contributions from others (especially Arnaud Quette, as an individual).
1918    The new hosting service is located, as for Arnaud's blog
1919    (http://arnaud.quette.fr) on Gandi servers, using PaaS.
1920    +
1921    +
1922    This will allow more flexibility and automation of the release process.
1924  - macosx-ups: new OS X Power Sources meta-driver
1925    * Mac OS X provides UPS status information in a format similar to
1926      what is shown for laptop batteries. This driver will convert that
1927      information into a format compatible with NUT (Charles Lepple).
1929  - support for new devices:
1930    * Eaton ePDU Switched
1931    * Online Zinto A (USB ID 0x06da:0x0601)
1932    * REDi Blazer 400VA / 600VA / 800VA
1933    * UNITEK Alpha650ipF and Alpha650ipE (USB ID 0x0f03:0x0001)
1935  - mge-shut driver has been replaced by a new implementation (newmge-shut).
1936    In case of issue with this new version, users can revert to oldmge-shut.
1937    UPDATE: oldmge-shut was dropped between 2.7.4 and 2.8.0 releases.
1939  - First NUT virtualization package: NUT now supports integration with
1940    VMware ESXI 5.0, through a native VIB package. This is, for the time
1941    being, an external effort from René Garcia (refer to the Download section
1942    on NUT website). But work is underway to improve this integration, and
1943    include it in the NUT source tree
1945  - IPMI support (nut-ipmipsu driver and nut-scanner): prepare for supporting
1946    API changes in upcoming FreeIPMI versions 1.1.x and 1.2.x.
1948  - snmp-ups now supports high precision values for APC, and more variables
1950  - the NUT variables and commands namespace has been fixed and
1951    completed, with the known and used variables that were missing.
1953  - more bugfixes, cleanup and improvements, on both source code and
1954    documentation.
1957 Release notes for NUT 2.6.4 - what's new since 2.6.3
1958 ----------------------------------------------------
1960  - This release fixes an important vulnerability in upsd
1961    (CVE-2012-2944: upsd can be remotely crashed)
1962    +
1963    +
1964    NUT server (upsd), from versions 2.4.0 to 2.6.3, are exposed to
1965    crashes when receiving random data from the network.
1966    +
1967    +
1968    This issue is related to the way NUT parses characters,
1969    especially from the network. Non printable characters were missed
1970    from strings operation (such as strlen), but still copied to the
1971    buffer, causing an overflow.
1972    +
1973    +
1974    Thus, fix NUT parser, to only allow the subset of ASCII charset from
1975    `Space` to `~`
1976    (Reported by Sebastian Pohle, Alioth bug #313636, CVE-2012-2944)
1977    +
1978    +
1979    A separate patch, which applies to any faulty version, is also available:
1980    http://trac.networkupstools.org/projects/nut/changeset/3633
1981    +
1982    +
1983    For more information, refer to the Common Vulnerabilities and Exposures:
1984    http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2012-2944
1986  - A static source code analysis has been done by Michal Hlavinka from RedHat,
1987    using Coverity (12 issues fixed).
1989  - Add new "LIST CLIENTS" and "NETVER" commands to NUT network protocol.
1990    "NETVER" allows to retrieve the Network protocol version, while
1991    "LIST CLIENTS" provides the list of clients connected to a device.
1992    Refer to the developer guide, "Network protocol information" section for
1993    more information.
1995  - Support of ranges of values for writable variables has been added, to
1996    complete the existing enumerated values mechanism. This will start to
1997    appear in some drivers soon, beginning with Eaton. Refer to the developer
1998    guide, "Creating a new driver..." section for more information.
2000  - PyNUT.py has been updated to version 1.2.2, adding support for
2001    LIST CLIENTS, FSD, HELP and VER (Rene Martín Rodríguez)
2003  - support for new devices:
2004    * AEG Power Solutions PROTECT HOME
2005    * more APC SNMP cards
2006    * ATEK Defensor range
2007    * all Borri models
2008    * all COVER ENERGY SA
2009    * CyberPower OR700LCDRM1U, PR6000LCDRTXL5U and CP1000PFCLCD
2010    * Dell UPS Network Management Card
2011    * Dynamix 1000VA USB
2012    * Eaton Management Card Contact (ref 66104)
2013    * EVER POWERLINE RT / 11 / 31 and DUO II Pro
2014    * GE Digital Energy GT Series 1000-3000 VA
2015    * Gtec models
2016    * all recent HP serial / USB UPS (G2, G3 and R/T models, ) and HP UPS
2017      Management Module
2018    * Ippon INNOVA RT
2019    * KOLFF BLACK NOVA
2020    * Lexis X-power Tigra 1kVA
2021    * Microline C-Lion Innova
2022    * Online Yunto YQ450
2023    * PowerShield Defender 1200VA
2024    * PowerWalker Online VFI LCD, Line-Interactive VI LCD and Line-Interactive VI
2025    * Riello Netman Plus 102 SNMP Card
2026    * Tripp-Lite OMNISMART500
2028  - apcsmart has received some fixes to work better on Mac OS X, and in general
2030  - bcmxcp has improved support for battery status, and better supports
2031    PW9120 units
2033  - bestfortress has improved Best Fortress LI675VA support
2035  - blazer_ser and blazer_usb now try to automatically estimate high and low
2036    voltages, to be able to calculate battery charge; support for online
2037    Innova UPS (T, RT and 3/1 T) has been added; Best UPS support has been
2038    improved, to prepare for superseding bestups driver
2040  - bestups has also received some care, though users are encouraged to switch
2041    to blazer_ser, since bestups will soon be deprecated.
2043  - newmge-shut has been heavily improved.  However, replacement of the
2044    current mge-shut has been postponed to the next release, due to the CVE
2045    issue.
2047  - oneac 0.80 improves support for all families of Oneac (EG, ON, OZ and OB),
2048    including more data and instant commands (Bill Elliot).
2050  - usbhid-ups: for Eaton devices, ups.start.auto is now automatically adjusted
2051    for shutdown.{return,stayoff} to behave as expected; Liebert firmwares with
2052    incorrect exponents have also been addressed.
2054  - snmp-ups now provides support for UPS shutdown, based on usbhid-ups
2055    mechanisms (composite commands and fallback). Composite commands are also
2056    supported now. This means, for example, that if 'shutdown.return' is not
2057    supported, a combination of 'load.off' + 'load.on' may be used;
2058    Actual validity of instant commands is now tested before commands addition;
2059    Eaton/MGE MIB has been cleaned and completed; 3-phases support has been
2060    added to Socomec Netvision MIB; HP/Compaq MIB has been completed, with
2061    thresholds, nominal values and more commands.
2063  - nut-scanner now also has libupsclient has a weak runtime dependency; more
2064    docs and bugfixes have also happened.
2066  - Provide an Uncomplicated Firewall (UFW) profile (nut.ufw.profile)
2068  - Riello protocols have been officially published in NUT protocols library:
2069    https://www.networkupstools.org/ups-protocols.html#_riello
2071  - Duplicate instances of upsd / upsmon are now detected upon startup
2073  - NUT variables namespace has been completed with missing variables and
2074    commands that are already known and standard
2076  - upslog now comes with a companion file, for logrotate configuration
2078  - more devices embed NUT for power protection, now including Thecus NAS range
2080  - more bugfixes, cleanup and improvements, on both source code and
2081    documentation, with a good bunch from Greg A. Woods.
2084 Release notes for NUT 2.6.3 - what's new since 2.6.2
2085 ----------------------------------------------------
2087  - nut-scanner is now more portable, and provides more coherent option names.
2088    IPMI support has also been added, to discover local power supplies.
2089    This version brings weak runtime dependencies in libnutscan, which allows to
2090    compile nut-scanner with all options and to run according to the available
2091    dependencies (USB, SNMP, IPMI, ...).
2093  - libnutscan now provides pkg-config support and the needed header files are
2094    distributed. Some documentation is also available in the developer guide and
2095    manual pages have been updated and completed.
2097  - support for new devices:
2098    * Cyber Power Systems with SNMP RMCARD (100, 201, 202 and 301)
2099    * Dynamix 650VA USB
2100    * LDLC UPS-1200D
2101    * Tecnoware UPS ERA LCD 0.65
2102    * Powercom BNT-xxxAP (USB ID 0d9f:0004)
2103    * Various USB devices using UPSilon 2000 software
2105  - apcsmart has received minor correction.
2107  - bcmxcp_usb now handles disconnection issues and reconnection mechanism.
2109  - blazer_usb enables again inclusion of buggy USB Device and Vendor IDs in
2110    udev rules file; language ID support has been added for USB units from
2111    LDLC, Dynamix and other no names.
2113  - nut-ipmipsu has also received some improvements.
2115  - snmp-ups has fixed outlets reported current in aphel_genesisII MIB;
2116    MGE 3 phases handles better low battery condition; support for Cyber Power
2117    Systems with SNMP RMCARD has been added; support of the newer Eaton ePDUs
2118    has been improved.
2120  - upsd doesn't anymore fail to start if at least one of the listening
2121    interface is available. This is needed on systems where either IPv4 or IPv6
2122    is disabled, and no explicit LISTEN directive has been specified.
2124  - Avahi support is now automatically enabled, upon detection
2126  - jNut (NUT Java interface) adds device discovery support, through a
2127    nut-scanner wrapper; jNutWebAPI, a HTTP/JSON web service interface, has
2128    also been added to interact with upsd and nut-scanner.
2130  - Base files for HPUX packaging have been added. This is still a work in
2131    progress.
2133  - Compilation on IBM AIX has been fixed (namespace conflict with ctypes).
2135  - more bugfixes, cleanup and improvements, on both source code and
2136    documentation.
2139 Release notes for NUT 2.6.2 - what's new since 2.6.1
2140 ----------------------------------------------------
2142  - NUT can now monitor power supply units (PSU) in servers, through IPMI, using
2143    the new experimental 'nut-ipmipsu' driver. Users are encouraged to test it,
2144    and send feedback and debug output to the development mailing list.
2145    This requires GNU FreeIPMI (0.8.5 or higher) development package or files.
2146    Thanks goes to Al Chu, FreeIPMI project leader, for his help during this
2147    development.
2149  - NUT now provides a tool, called 'nut-scanner', to discover supported devices,
2150    both local and remote. nut-scanner will help to ease the configuration step,
2151    and power infrastructure discovery.
2152    +
2153    +
2154    This development, sponsored by Eaton, supports the following methods:
2155    * USB,
2156    * SNMP,
2157    * XML/HTTP (from Eaton),
2158    * NUT servers, using the classic connect or Avahi / mDNS methods.
2159    +
2160    +
2161    IPMI support will be added in the next release.
2162    +
2163    +
2164    A separate library, called 'libnutscan', is also available to provide these
2165    feature. Future NUT releases will provides binding for the supported
2166    languages (Perl, Python and Java).
2168  - NUT now provides a Java interface called 'jNut'.
2169    This development, sponsored by Eaton, is currently limited to the client
2170    interface. But it will be broaden to device discovery and configuration in
2171    the future.
2172    +
2173    +
2174    For more info, refer to nut/scripts/java/README, or the developer guide
2175    (chapter 'Creating new client'). Javadoc documentation is also provided,
2176    along with Java archives (.jar) in the Download section.
2178  - support for new devices:
2179    * Eaton 3S
2180    * Cyber Power Systems CP1000AVRLCD
2181    * various APC models equipped with APC AP9618 management card, including
2182      APC Smart-UPS RT XL
2183    * Orvaldi 750 / 900SP
2184    * POWEREX VI 1000 LED
2185    * PowerWalker VI 850 LCD
2186    * SVEN Power Pro+ series (USB ID ffff:0000)
2188  - A regression has been fixed in udev rules file. This previously caused
2189    permission issues to owners of some USB devices.
2191  - Avahi support has been added, for NUT mDNS publication, through a static
2192    service file (nut/scripts/avahi/nut.service).
2194  - usbhid-ups has had Eaton completion: some features have been improved, such
2195    as 'output.voltage.nominal'; 3S Eco control support has been added, along
2196    with battery.runtime.low and end of battery life (life cycle monitoring)
2197    support; new measurements for 5 PX are also supported now (outlet power
2198    factor, power, real power and current).
2200  - apcsmart has been updated to support more variables and features; the
2201    previous driver is however still available as 'apcsmart-old', in case of
2202    issues.
2204  - bcmxcp now supports per outlet startup and shutdown delays setting; shutdown
2205    delay is also used, when available, for outlet.n.shutdown.return instead of
2206    the default 3 seconds.
2208  - snmp-ups.c has a new initialization method, that uses sysObjectID, which is
2209    a pointer to the preferred MIB of the device, to detect supported devices.
2210    This speeds up even more init stage and should render void the use of 'mib'
2211    option. SNMP v3 session initialization has also been fixed, and Eaton PDU
2212    support has been completed.
2214  - Initial support has been added for systemd, the System and Service Manager
2215    from RedHat.
2217  - The chapter 'NUT configuration management with Augeas' of the developer guide
2218    has received some completion: a complete Python Augeas example code is now
2219    provided.
2221  - Finally, after years of dedication to NUT, Arjen de Korte is now retired.
2222    Sincere thanks to you Arjen from us all.
2225 Release notes for NUT 2.6.1 - what's new since 2.6.0
2226 ----------------------------------------------------
2228  - the various recent USB regressions have been definitely fixed.
2230  - NUT now propose a variable to expose UPS efficiency (ups.efficiency).
2231    Eaton 5 PX already uses it.
2233  - the Perl module from Gabor Kiss (rewritten from Kit Peters') is now
2234    distributed with NUT source code.
2236  - support for new devices:
2237    * Eaton Ellipse ECO, Powerware 9140, Eaton 5 PX, and ambient sensor
2238      on Eaton ePDU managed
2239    * GE EP series
2240    * Inform Sinus SS 210
2241    * IPAR Mini Energy ME 800
2242    * Mustek Yukai PowerMust 1000 USB
2243    * Numeric 3000 SW
2244    * SVEN Power Pro+ series (recent models)
2245    * Vivaldi EA200 LED
2247  - liebert-esp2: Improved Liebert ESP II support, including UPS shutdown
2248    (poweroff), 1 and 3-phase input and output variables, and most
2249    input / output / bypass / nominal variables. There is also a fix for the
2250    USB to serial cable (Farkas Levente and Spiros Ioannou).
2252  - powercom has improved PowerCom BNT 1500A and BNT-other support, along with
2253    driver documentation and code conformance to the NUT rules (Keven L. Ates).
2255  - apcsmart has more improved UPS poweroff support and options (Michal Soltys).
2257  - blazer has also seen some improvements.
2259  - usbhid-ups has completed a bit supported variables for APC and Eaton / MGE.
2261  - on the quality assurance side, Eaton has worked on fixing a few
2262    non-conformance issues, like C++ style comments and warnings, using
2263    a newly developed verification tool (Prachi Gandhi).
2265  - fix remaining references to LIBSSL_LDFLAGS, instead of LIBSSL_LIBS,
2266    which cause unresolved symbol on libupsclient users (Fabrice Coutadeur).
2268  - the website has now a better support for Internet Explorer 6.
2270  - graphic illustrations, used for the Features page on the website Features
2271    and chapter of the user manual, have been refreshed (courtesy of Eaton).
2273  - more bugfixes, cleanup and improvements, on both source code and
2274    documentation.
2277 Release notes for NUT 2.6.0 - what's new since 2.4.3
2278 ----------------------------------------------------
2280 NOTE: Per original semantic versioning, there were no public NUT 2.5.x releases.
2282  - the main focus of this release is the complete documentation revamping,
2283    using AsciiDoc. This includes a new website, user manual, developer guide,
2284    packager guide and manual pages, available in various formats (single and
2285    multiple pages HTML, and PDF at the moment).
2286    +
2287    +
2288    Be sure to check the `--with-doc` option help of `configure` script, and
2289    link:docs/configure.txt[] for more information.
2291  - Add Augeas support, to provide easy NUT configuration management, through
2292    tools and development APIs. For more information, refer to the developer
2293    guide, or link:scripts/augeas/README.adoc[] in the source directory.
2295  - support for new devices:
2296    * APC 5G
2297    * Eaton PowerWare 5119 RM (smart mode using upscode2 driver)
2298    * Eaton Best Ferrups (using older ConnectUPS card)
2299    * Eaton 9395 (serial interface)
2300    * Eaton ConnectUPS X / BD / E Slot
2301    * HP T1000 INTL
2302    * HP T1500 INTL
2303    * HP T750 G2
2304    * HP R1500 G2 INTL
2305    * iDowell iBox UPS
2306    * Tripp Lite SmartOnline SU1000XLA
2307    * Tripp Lite Smart1000LCD
2308    * and some more USB/HID devices IDs
2309    * CyberPower CP1500AVRLCD and CP1350AVRLCD
2310    * PowerWalker Line-Interactive VI 1400
2311    * Rocketfish RF-1000VA / RF-1025VA
2313  - usbhid-ups has better support for shutting down APC SmartUPS RM series,
2314    and finally fix the "buffer size" issue, which was breaking some
2315    devices data retrieval, or truncating some data on others.
2317  - snmp-ups now support SNMP v3 and its security parameters. IETF MIB support
2318    has also been extended.
2320  - fix dummy-ups simulation driver status handling bug, and add the
2321    capability to remove exposed variables on the fly.
2323  - the belkin driver now support control commands and status reporting
2324    for beeper and battery test.
2326  - the powerpanel driver supports more older CyberPower units.
2328  - mge-utalk, upscode2, blazer and liebert-esp2 have also received some
2329    care, and been improved.
2331  - NUT-Monitor and the PyNUT client module have been updated to 1.3,
2332    adding more features like automatic connection to the first local device
2333    and i18n support.
2335  - improve configure time dependencies checking and processing.
2337  - improve older Unix systems support (HP-UX, AIX, ...) for missing functions.
2339  - refresh and improve USB helper files (udev and UPower).
2341  - more generation automation: the ChangeLog file is now generated
2342    automatically at distribution time, along with the files needed for
2343    the website hardware compatibility list.
2345  - SSL support has also received some improvements.
2347  - tcp-wrapper now allows hostnames in /etc/hosts.allow too (not only IPv4
2348    and/or IPv6 addresses).
2350  - many bugfixes, cleanup and improvements.
2353 Release notes for NUT 2.4.3 - what's new since 2.4.2
2354 ----------------------------------------------------
2356  - this is a bugfix release that only solves the regression on IPv6 activation.
2359 Release notes for NUT 2.4.2 - what's new since 2.4.1
2360 ----------------------------------------------------
2362  - the general USB support has been vastly improved, including many bug
2363    fixes, better OS support, new features and devices.
2365  - NUT now talks to Solar Controller Devices with the new ivtscd driver.
2367  - the snmp-ups driver supports more PDU, with a smaller disk footprint.
2369  - apcsmart supports more older SmartUPS and Matrix units.
2371  - the bestfortress driver is resurrected.
2373  - the virtual driver has been renamed to 'clone'.
2375  - the netxml-ups driver has received some care.
2377  - various debugging and development improvements have been done, around
2378    driver output; dummy-ups with more interaction and scripting and the
2379    device-recorder.sh script.
2381  - the build system has received many bugfixes and improvements.
2383  - the UPower (previously known as DeviceKit-power) rules file is now
2384    generated by NUT.
2386  - support for new devices:
2387    * Apollo 1000A and 1000F
2388    * various Baytech RPC
2389    * old Best Power Fortress
2390    * Cyber Power Systems PR3000E, CP 1500C and OR2200LCDRM2U
2391    * all the new Dell UPS range (serial, USB and network)
2392    * Eaton E Series NV and DX UPS, and Powerware 9130
2393    * older HP T500 and T750, newer T750 INTL (USB) and R1500 G2 (serial)
2394    * Inform Informer Compact 1000VA
2395    * many serial and USB devices from Ippon, like Back Comfo Pro,
2396      Smart Power Pro and Smart Winner
2397    * IVT SCD series
2398    * Liebert GXT2-3000RT230 and PowerSure PSA
2399    * Mustek PowerMust 424 / 636 / 848 USB
2400    * all new PowerCOM USB devices with HID PDC interface
2401    * Tripp-Lite INTERNETOFFICE700, SMART700USB and ECO550UPS
2402    * UPSonic DS-800 (USB)
2405 Release notes for NUT 2.4.1 - what's new since 2.4.0
2406 ----------------------------------------------------
2408  - the microdowell driver has appeared to support various MicroDowell Enterprise
2409    units (see the "new devices" list below).
2411  - support for new devices:
2412    * MicroDowell Enterprise B8, B10, N8, N11, N15, N20,
2413      N22, N30, N40, N50, N60 and HiBox ST.
2415  - NUT-Monitor now better handles the ups.status field, and has switched to
2416    version 1.1.
2418  - the situation of the build toolchain has been fixed, with regard to the
2419    "make clean" target and the wrongly removed generated USB files. This broke
2420    further configure call.
2423 Release notes for NUT 2.4.0 - what's new since 2.2.2
2424 ----------------------------------------------------
2426 NOTE: Per original semantic versioning, there were no public NUT 2.3.x releases.
2428  - preliminary support for Power Distribution Units (PDUs): NUT can now support
2429    PDUs, either natively (ie using NUT snmp-ups driver), or through a binding to
2430    the Powerman daemon. The list of supported PDUs is already quite long,
2431    including:
2432    * Eaton ePDUs (Managed and Monitored),
2433    * some Aphel models,
2434    * some Raritan PDUs,
2435    * and the whole list of Powerman supported devices:
2436      http://powerman.sourceforge.net/supported.html
2438  - support for new devices:
2439    * the various PDUs cited above
2440    * Chloride Desk Power 650
2441    * Cyber Power Systems Value 400E/600E/800E (USB models)
2442    * Delta GES602N
2443    * Digitus DN-170020
2444    * the whole Eaton ranges (mostly composed of MGE Office Protection Systems
2445      and Powerware units) including BladeUPS
2446    * Forza Power Technologies SL-1001
2447    * HP PowerTrust 2997A
2448    * HP R/T 2200 G2
2449    * Infosec XP 1000 and XP 500
2450    * Ippon Back Power Pro (serial and USB)
2451    * Kebo 1200D/D Series
2452    * Liebert PowerSure Personal XT
2453    * MGE Office Protection Systems Protection Station
2454    * Neus 400va and 600va
2455    * Phasak 400VA and 600VA
2456    * Plexus 500VA
2457    * Powercom Black Knight PRO / King PRO and Imperial
2458    * PowerKinetics BlackOut Buster
2459    * Sweex 1000 USB
2460    * UNITEK Alpha 500
2461    * WinPower CPM-800
2463  - NUT now embeds Python client support through the PyNUTClient module and the
2464    NUT-Monitor application. Both are from David Goncalves, and are still
2465    available from http://www.lestat.st.
2466    For more information, refer to link:scripts/python/README.adoc[].
2468  - the dummy-ups driver now supports a "repeater" mode. This allows it to act as
2469    a NUT client, and to forward data. This can be useful for supervision and
2470    load sharing purposes.
2472  - tcp-wrappers support has been added to the upsd server, to grant users access
2473    by source IP for commands that require to be logged into the server. This
2474    replaces the previous internal implementation (ACL in upsd.conf).
2476  - the nut.conf file has been introduced to standardize startup configuration
2477    across the various systems.
2479  - NUT now ships a bash completion function for 'upsc' command
2480    (scripts/misc/nut.bash_completion). Simply copy it to /etc/bash_completion.d
2482  - many internal changes to improve maintainability, while lowering the
2483    maintenance cost (thus allowing developers to focus on what matters: the
2484    code!). Examples of this are:
2485    - the USB information automatic extraction to generate the various USB helper
2486      files,
2487    - the upsdrv_info_t structure to track more driver information, and remove
2488      the need for the upsdrv_banner() function
2489    - common USB code refactoring, as it is done for the serial functions.
2491  - tons of bugfixes, cleanup and improvements to make NUT stronger than ever!
2494 Release notes for NUT 2.2.2 - what's new since 2.2.1
2495 ----------------------------------------------------
2497  - support for new devices: APC BACK-UPS XS LCD, Atlantis Land,
2498    Mustek Powermust Office 650, Oneac XAU models, Powerware PW5115 and
2499    PW9120 (USB), Nitram Elite 2005
2501  - Integrated Power Management (NUT HAL integration) has reached a
2502    major milestone: it is now the most advanced UPS integration into
2503    Power Management layer known in existing OSs. It has received many
2504    corrections and improvements, and allows to PowerOff the UPS at the
2505    end of a power cycle (which is the most important feature, not
2506    supported on other systems).
2507    The various files are now installed into the correct location.
2509  - the usbhid-ups driver has received attention. Most notably, the
2510    shutdown handling has been reworked, and support for MGE UPS SYSTEMS
2511    3 phases units has been added.
2513  - snmp-ups now supports MGE* Environment Sensor (ref 66 846).
2514    The ambient.temperature reporting has also been fixed for units
2515    other than APC.
2517  - the netxml-ups driver has appeared to support MGE* network HTTP/XML
2518    cards.
2520  - NUT now distributes by default the shared version of libupsclient
2521    (version 1.0.0), and use this for the provided clients (upsmon, upsc,
2522    upsrw, upscmd). This is part of an effort to reduce NUT's footprint,
2523    both on disk and in memory.
2525  - powerpanel has reach a new step toward the replacement of nitram and
2526    cpsups drivers. The final step is scheduled for NUT 2.4.
2528  - many changes, cleanup and fixes to the NUT core and various drivers.
2531 Release notes for NUT 2.2.1 - what's new since 2.2.0
2532 ----------------------------------------------------
2534  - support for new devices:
2535    * all MGE Office Protection Systems units
2536    * Advice TopGuard 2000
2537    * Belkin F6H375-USB
2538    * Dynamix UPS1700D
2539    * Effekta RM2000MH,
2540    * Jageson Technology Jasuny USPS
2541    * Powercom SMK-1500A and SXL-1500A
2542    * PowerWalker Line-Interactive VI 400/800 and 600
2543    * Powerware 9110
2544    * UNITEK Alpha 2600
2545    * UPSonic CXR1000
2546    * some vintage serial APC UPSs
2548  - the usbhid-ups driver has been improved, and fixed in many areas, through
2549    a backport of the development (trunk) version.
2551  - the udev rules, for Linux hotplug support of the USB UPSs, has been
2552    updated to support kernel newer than 2.6.22.
2554  - the megatec and megatec_usb drivers have also been backported from the
2555    development (trunk) version.
2557  - the client development files have also received some care:
2558    the upsclient pkg-config file has been fixed, and the upsclient.h
2559    file allows older NUT clients to continue using the UPSCONN structure.
2562 Release notes for NUT 2.2.0 - what's new since 2.0.5
2563 ----------------------------------------------------
2565 NOTE: Per original semantic versioning, there were no public NUT 2.1.x releases.
2567  - The new build infrastructure, using automake, is now used.
2568    This has major impact on the compilation and installation procedures,
2569    and thus on the NUT packaging.
2570    For more information, refer to link:UPGRADING.adoc[] and packaging/debian/ for
2571    an example of migration.
2573  - NUT now provides support for FreeDesktop Hardware Abstraction Layer
2574    (HAL) which brings full Plug And Play experience to USB UPS owners.
2575    For more information, refer to link:docs/nut-hal.txt[].
2577  - support for new devices:
2578    * Ablerex 625L
2579    * ActivePower 400VA, 2000VA;
2580    * Belkin Home Office F6H350-SER, F6H500-SER, F6H650-SER
2581    * Belkin Office Series F6C550-AVR
2582    * Belkin Universal UPS F6C100-UNV (USB), F6C1100-UNV (USB),
2583      F6C1200-UNV (USB), F6H350deUNV (serial),
2584      F6H350ukUNV (serial), F6H650ukUNV (serial)
2585    * Compaq R3000h
2586    * Cyber Power Systems PR2200
2587    * Dynex DX-800U
2588    * Geek Squad GS1285U
2589    * Krauler UP-M500VA
2590    * Mecer ME-2000
2591    * MGE UPS SYSTEMS Ellipse MAX
2592    * Online Zinto D
2593    * PowerTech SMK-800
2594    * SVEN Power Pro+ series
2595    * Power Smart RM 2000
2596    * Tripp-Lite SmartOnline SU1500RTXL2ua, smart2200RMXL2U.
2598  - added IPv6 support,
2600  - the newmge-shut driver has appeared. This one uses the same HID core
2601    as usbhid-ups, but communicate over a serial link. It will eventually
2602    replace the current mge-shut driver.
2604  - client commands (upsc, upsrw and upscmd): hostname is now optional,
2605    and defaults to "localhost"
2607  - many drivers have been improved and have received bug fixes:
2608    powerpanel, megatec, megatec_usb, safenet, tripplite_usb, gamatronic,
2610  - the hotplug and udev scripts, in charge of setting the right
2611    permissions on the USB devices, are now installed automatically
2612    when appropriate.
2614  - more generally, the NUT core and documentation, including the manpages,
2615    have been improved and updated.
2618 Release notes for NUT 2.0.5 - what's new since 2.0.4
2619 ----------------------------------------------------
2621 This release is a backport of the development version.  Many changes
2622 have already been backported previously.  Thus it is more a
2623 synchronization release, though it includes many bugfixes and support
2624 for new models.
2626  - support for new devices:
2627    * APC Smart-UPS with 6TI firmware
2628    * Belkin Small Enterprise F6C1500-TW-RK
2629    * Compaq R3000 XR, R5500 XR
2630    * Cyber Power 550SL, 725SL, 685AVR, 800AVR, 1200AVR, AE550
2631    * Eltek
2632    * Inform GUARD
2633    * Microsol Rhino
2634    * Opti-UPS PowerES 420E
2635    * PowerMan RealSmart, BackPro
2636    * Powerware PW9315 3-phase
2637    * SOLA 305
2638    * Tripp-Lite SMART550USB, SMART2200RMXL2U, OMNI1000LCD, OMNI900LCD,
2639      OMNI650LCD, 1500 LCD, AVR550U
2640    * Viewsonic PowerES 420E
2642  - bcmxcp: added 3-phase support
2644  - megatec: better hardware support, more instant commands
2646  - mge-hid: support more instant commands
2648  - newhidups: fixed APC and Tripp Lite bugs, various memory bugs,
2649    improved report buffering, improved Solaris support, added
2650    '-x explore' option for easy diagnosis of new devices
2652  - solis: shutdown programming, support new cables, Solaris support
2654  - tripplite_usb: updated SMARTPRO support, fixed OL/OB reporting,
2655    better error handling, some memory bugs
2657  - new dummy-ups driver simulator
2659  - added HTML interface for access to CGI scripts
2662 Release notes for NUT 2.0.4 - what's new since 2.0.3
2663 ----------------------------------------------------
2665  - The newhidups critical bug (segmentation fault) has been fixed. It has
2666    also received some more care, like bugfixes and new models support and
2667    enhancement for Solaris.
2668    [Peter Selinger and Arnaud Quette]
2670  - A bug has been fixed in NUT core to support resuming from suspend-to-disk.
2671    This should also fix other similar issues, like time synchronization
2672    through the NTP - Network Time Protocol.
2673    [Arjen de Korte]
2675  - The mge-shut driver now better detects the Low Battery status, support
2676    new models and fixes some wrong status and data. It also fixes some
2677    issue where the UPS wasn't restarting (refer to mge-shut manpage).
2678    [Arnaud Quette]
2680  - The genericups custom configuration through ups.conf is working again
2681    [Arjen de Korte]
2683  - The genericups driver type 22 also support CyberPower 725SL
2684    (and maybe others SL models)
2685    [David Kaufman]
2687  - The new megatec driver, which will replace a bunch of drivers by nut 2.2
2688    (refer to link:docs/megatec.txt[] and link:UPGRADING.adoc[]) has been
2689    backported from the trunk (Development tree). The powermust driver has
2690    also received some attention.
2691    [Carlos Rodrigues]
2693  - The new rhino driver was added to support Microsol Rhino UPS hardware
2694    The solis has also been improved for Solaris compatibility, and
2695    internal / external shutdown programming. solis can now save external
2696    shutdown programming to ups, and support new cables for solis 3
2697    [Silvino B. Magalhães]
2699  - Several fixes and improvements have been made to upsrw, upsset,
2700    cpsups, tripplite_usb and the FAQ.
2701    [Arjen de Korte and Charles Lepple]
2704 Release notes for NUT 2.0.3 - what's new since 2.0.2
2705 ----------------------------------------------------
2707  - The recent and major newhidups changes have been backported from the
2708    Development tree. It now:
2709    - supports models from MGE UPS SYSTEMS, APC and Belkin. Mustek and Unitek
2710      units are also recognized for development purpose,
2711    - handles better device reopening, after a disconnection,
2712    - handles multiple devices, with several parameters to find the right UPS.
2713    [Peter Selinger, Charles Lepple and Arnaud Quette]
2715  - The bcmxcp_usb driver has been added to support Powerware USB units.
2716    [Wolfgang Ocker and Kjell Claesson]
2718  - The tripplite_usb driver has been added to support Tripp Lite USB units.
2719    [Charles Lepple]
2721  - The sec driver is back as gamatronic
2722    [Gamatronic, Nadav Moskovitch]
2724  - The genericups driver has received official care from Gamatronic
2725    to add support for the Gamatronic UPS with alarm interface.
2726    [Gamatronic, Nadav Moskovitch]
2728  - The powermust driver now supports Soyntec Sekury C 500 and C 800 units.
2729    [Hanno Borns]
2731  - The mge-shut driver has received a bit of attention too, and enhance
2732    ups.model retrieval for some specific case (release 0.65)
2734  - The drivers don't change to the "statepath" directory anymore at
2735    initialization time if called using -k. This avoid unneeded
2736    failure to poweroff the UPS if /var is already unmounted.
2737    [Gaspar Bakos]
2739  - The belkinunv driver now supports Belkin F6C1100-UNV
2740    [Dave Breiland]
2742  - The isbmex driver has been upgraded to version 0.05, which fixes
2743    various errors in formulas, add shutdown capability and revert
2744    back baudrate to B9600 (instead of B2400), as it broke the
2745    communication
2746    [Ricardo Martinezgarza]
2748  - The support of Sysgration UPGUARDS Pro650 in fentonups has
2749    been fixed
2750    [Simon J. Rowe]
2752  - The packaging files for Red Hat have received various fixes
2753    [Thomas Jarosch]
2755  - The solis driver has been fixed to avoid a naming collision and
2756    compile on Solaris
2757    [PaweÅ‚ Kierdelewicz]
2759  - The snmp-ups driver has corrected the problem when exposing
2760    certain time data.
2763 Release notes for NUT 2.0.2 - what's new since 2.0.1
2764 ----------------------------------------------------
2766  - the newhidups USB driver has been improved a lot and is no more
2767    experimental. It also now has a basic APC support, which will
2768    soon replace the legacy hidups driver.
2770  - The mge-utalk driver has improved its support for old units.
2772  - The mge-shut driver has been improved for restart/shutdown
2773    sequences which was previously blocking the serial port.
2775  - The general MGE support has been added Pulsar EXtreme C / EX RT,
2776    Comet EX RT, Pulsar SV, Pulsar PSX, Ellipse Office and NOVA AVR USB.
2778  - The genericups driver now supports Generic RUPS 2000, AEC MiniGuard
2779    UPS 700 (using Megatec M2501 cable), and Powerware 3110.
2780    [Nick Barnes, Paul Andreassen]
2782  - The powermust driver now supports SquareOne Power QP1000, Mustek
2783    PowerMust 1400VA Plus and 2000VA USB.
2784    [Carlos Rodrigues]
2786  - The fentonups driver has been enhanced and now supports Sysgration
2787    UPGUARDS Pro650.
2788    [Michel Bouissou, Simon J. Rowe]
2790  - The cpsups driver now supports MicroDowell B.Box BP 500/750/1000/1500.
2791    [Armin Diehl]
2793  - The snmp-ups driver now supports Socomec SNMP devices (Netvision MIB),
2794    and Powerware ConnectUPS SNMP cards.
2795    [Thanos Chatziathanassiou, Olli Salvia]
2797  - The bcmxcp driver is back with support for Powerware UPSs.
2798    [Tore Ã˜rpetveit, Kjell Claesson]
2800  - The cyberpower driver now supports CyberPower 1000AVR.
2801    [Dave Huang]
2803  - The new solis driver supports Microsol units: Solis 1.0, 1.5,
2804    2.0 and 3.0.
2805    [Silvino B. Magalhaes]
2807  - The apcsmart driver has fixed APC600 support.
2809  - The etapro driver fixes brokenness due to ser_get_line use
2810    [Marek Michalkiewicz]
2812  - The new upscode2 driver supports Fiskars, Compaq and Powerware
2813    devices.
2814    [Niels Baggesen, Havard Lygre]
2816  - The tripplite driver has fixed a battery charge bug
2817    [Cedric Tefft]
2820 Release notes for NUT 2.0.1 - what's new since 2.0.0
2821 ----------------------------------------------------
2823  - The bestuferrups driver has been forked into the new bestfcom driver
2824    which has better handling of the inverter status alarm messages and
2825    more.
2826    [Kent Hill]
2828  - Mustek UPS support returns with two drivers which have overlapping
2829    coverage: mustek and powermust.
2830    [powermust: Carlos Rodrigues, mustek: Martin Hajduch]
2832  - Additional CyberPower Systems hardware is supported with the new
2833    cpsups driver.  Three recognized models are the CPS1500AVR,
2834    CPS1100VA, and OP500TE.
2835    [Walt Holman, Brad Sawatzky]
2837  - The genericups driver can now generate staleness warnings in
2838    specific cases where the UPS provides a way to test for its
2839    presence.  See the "CON" setting in ups.conf for more details.
2840    [stan / saticed.me.uk]
2842  - Documentation for monitoring a Back-UPS RS 500 on a system without
2843    USB ports has been added to the cables directory.
2844    [Martin Edlman]
2846  - The everups driver now supports types 73-76 (NET 700/1000/1400/500-DPC)
2847    [hunter]
2849  - The new metasys driver supports Meta System models: Line,
2850    HF Millennium, HF Top Line, ECO Network, ECO, Ally HF, Megaline
2851    [BlaXwan]
2853  - The ippon driver now allows user-defined settings for the delay
2854    before switching off, and the delay before powering on.
2855    [Yuri Elizarov]
2857  - The victronups driver is now at version 0.1.9, which adds many
2858    instant commands: calibration control, battery and front panel tests,
2859    and bypass control.
2860    [Gert Lynge]
2862  - The tripplite driver has received a major overhaul to bring it up to
2863    working condition for the 2.0 tree, including code cleanups, several
2864    new variables, commands, and user-definable parameters.  See
2865    ChangeLog for more.
2866    [Nicholas J Kain]
2868  - The mge-utalk driver has been upgraded to version 0.81, which fixes
2869    the lack of read-write variables and loss of sync on models which
2870    don't support restoring settings.
2871    [Arnaud Quette]
2873  - The Micro Ferrups model RE is now supported by the bestuferrups
2874    driver.  The driver will also now read the ambient temperature and
2875    will no longer constantly report the data as stale.
2876    [Tim Thompson]
2878  - The fentonups driver's init sequence has been reworked to work better
2879    with some hardware, including a fix to the parser code.
2880    [MLH]
2882  - A workaround has been added to the hidups driver to avoid variables
2883    which are stuck by calling HIDIOCINITREPORT in every poll.
2884    [Stuart D. Gathman]
2886  - SOLA 610 UPS hardware and others which do not support the ID command
2887    may now be monitored by the bestups driver after forcing ID= in
2888    ups.conf.
2889    [Jason White]
2891  - "pollinterval" is now available via driver.parameter for consistency.
2892    [Arnaud Quette]
2894  - The mge-shut and newhidups drivers, along with the supporting
2895    hidparser/libhid code have received many updates, including lowering
2896    USB bandwidth consumption, driver unbinding (only in Linux), code
2897    cleanups, and more which can be seen in the ChangeLog file.
2898    [Arnaud Quette]
2900  - The fentonups driver now recognizes several more Megatec protocol
2901    units:
2902    * SuperPower HP360, Hope-550 [Denis Zaika]
2903    * Unitek Alpha 1000is        [Antoine Cuvellard]
2905  - Some variables like uc_sigmask were renamed to avoid clashes with
2906    symbols on systems like HP/UX.
2908  - All man pages have been reworked to switch literal "-" characters to
2909    hyphens or "\-" as appropriate.
2910    [Shaul Karl]
2912  - upssched's CANCEL events were broken following the change to
2913    text-based socket messages in 1.5 and have been fixed.
2914    [Steven Schoch]
2916  - Calls to varargs functions with raw strings from the config files
2917    without an intervening "%s" have been fixed in upsmon, upssched,
2918    snmp-ups and upsd.
2919    [Ulf Harnhammar]
2922 Release notes for NUT 2.0.0 - what's new since 1.4.x
2923 ----------------------------------------------------
2925  - The new naming scheme for variables and commands (introduced in 1.4)
2926    is now mandatory.  The 1.4 tree supported both the old (STATUS) and
2927    the new (ups.status) as a transitional release, and now that time is
2928    over.
2929    +
2930    +
2931    This means that 2.0 is generally smaller than 1.4 code, since the
2932    interim compatibility hacks have been removed.
2934  - New serial handling code has been added, with greatly simplified
2935    operations.  The old mess involving repeated calls to sigaction,
2936    alarm, and read has been condensed to a select-read loop.
2937    +
2938    +
2939    This change allows drivers which don't do any serial communications
2940    at all (hidups, snmp-ups) to drop that baggage, so they are a bit
2941    smaller when compiled.
2943  - The drivers now recognize "chroot=' and 'user=' in the global section
2944    of ups.conf.  This means you don't have to use -r and -u when
2945    starting upsdrvctl.
2947  - upsmon now supports the -K argument to check for the presence of the
2948    POWERDOWNFLAG file.  If it exists and contains the magic string, then
2949    upsmon will exit(EXIT_SUCCESS).  Otherwise, it will
2950    exit(EXIT_FAILURE).
2951    +
2952    +
2953    This feature can be used to simplify shutdown scripts, since now you
2954    don't have to keep the script in sync with the upsmon.conf.
2956  - Many small things like signed value comparisons, int vs. size_t and
2957    proper use of const/struct were fixed throughout the source.  These
2958    were mostly for correctness, but a few potential bugs involving very
2959    big or very small numbers were fixed at the same time.
2961  - The access control system in upsd.conf has been reworked and
2962    simplified.  Since access levels have become meaningless in recent
2963    releases, the new system is just ACCEPT <acl> or REJECT <acl>.
2964    +
2965    +
2966    If you are upgrading from a previous version of the software, you
2967    will have to edit your upsd.conf to use this method.  See
2968    the link:UPGRADING.adoc[] file for more details.
2970  - The build process now halts when make fails in one of the
2971    subdirectories.
2972    [Petter Reinholdtsen, Charles Lepple]
2974  - Helper data for using upsclient via pkgconfig is now created if
2975    pkgconfig is detected when configure runs.
2976    [Arnaud Quette]
2978  - The polling interval in drivers may now be set with 'pollinterval'
2979    in ups.conf.
2980    [Gabriel Faber]
2982  - Blazer UPS equipment is now supported with the blazer driver.
2983    [Phil Hutton]
2985  - Energizer USB UPS hardware is now supported on Linux with a new
2986    experimental driver.
2987    [Viktor T. Toth]
2989  - The newhidups driver has been merged as the first step towards
2990    portable USB UPS support.  This will eventually replace the old
2991    Linux-only hidups driver.  The newhidups driver is tagged
2992    experimental since it is under active development.
2993    [Arnaud Quette, Charles Lepple]
2995  - The newapc driver has been renamed to apcsmart, replacing the old
2996    driver with that name. If you used the newapc driver, be sure to
2997    delete the old binary and fix your ups.conf.
2999  - The apcsmart driver now supports asynchronous notification data
3000    from the hardware, which means it can wake up as soon as something
3001    happens.  This affects the OL/OB/LB/RB data in ups.status, and
3002    generally reduces the latency in dispatching status changes by a few
3003    seconds.
3005  - The apcsmart driver can now support quirky hardware which does not
3006    provide the usual listing of valid command characters.  This feature
3007    is necessary to monitor new models like the APC CS 350 and old ones
3008    like the Matrix 5000.  It also now has sdtype=4 to handle the strange
3009    shutdown behavior on the CS series.
3011  - The belkin driver now works around broken firmware version 001,
3012    avoiding a lengthy delay at startup.  It also implements the shutdown
3013    sequence differently, and should actually work on more hardware now.
3015  - The bestups driver has been slowed down to play nicer with the
3016    hardware, and is much more reliable as a result.  Among other things,
3017    it should always detect the UPS on the first try, meaning no more
3018    "dot dot dot" when it starts.
3020  - The cyberpower driver is no longer tagged experimental, and now
3021    supports powering off the load.  It also supports battery tests via
3022    instcmds.
3024  - Effekta MT 2000 RM hardware is now supported by the fentonups driver.
3025    [Christoph Moar]
3027  - The new safenet driver supports UPS hardware that uses the protocol
3028    of the same name.  This includes models from many manufacturers,
3029    including Fairstone, Fenton, Gemini, Powerwell, Repotec, Soltec and
3030    Sweex.  See the README or driver.list for the full details.
3031    [Arjen de Korte]
3033  - The genericups driver now has type 20 to monitor the Powerware 5119
3034    RM.  See http://lists.exploits.org/ups/Oct2003/00052.html.
3035    [Daniel Thompson]
3037  - The belkinunv driver has been added to allow monitoring Belkin
3038    Universal UPS hardware.
3039    [Peter Selinger]
3041  - Cyber Power Systems 1100AVR hardware which has a different protocol
3042    than the existing binary type (supported by 'cyberpower') is now
3043    supported by the experimental cyberpower1100 driver.
3044    [Walt Holman]
3046  - upsdrvctl now returns success or failure information in the exit
3047    code.  Any failure during a requested operation will result in a
3048    nonzero value (specifically EXIT_FAILURE).
3051 Release notes for NUT 1.4.0 - what's new since 1.2.x
3052 ----------------------------------------------------
3054  - The drivers and upsd now communicate over Unix domain sockets instead
3055    of state files, shared memory, or state files with mmap.  This change
3056    makes many things possible, including the new dynamic variable and
3057    command naming scheme described below.
3058    +
3059    +
3060    There is a new development tool called sockdebug in the server
3061    directory for debugging driver-server communications on the sockets.
3063  - The old static variable scheme has been replaced by a new dynamic
3064    implementation.  Vague names have been turned into meaningful names
3065    that fit into an organized system.  UTILITY is now input.voltage.
3066    OUTVOLT is now output.voltage.
3067    +
3068    +
3069    This also applies to the names of instant commands.  BTEST1 is
3070    test.battery.start, and BTEST0 is test.battery.stop.
3071    +
3072    +
3073    The old names are still supported for compatibility with older
3074    clients.  This compatibility mode will be maintained throughout
3075    the 1.4 series, and will be gone by the release of 2.0.  Users
3076    with older clients are encouraged to upgrade their software
3077    during this time.
3079  - The network protocol has been expanded to handle these new names.
3080    Older functions which only apply to the old names will continue to
3081    be supported through the 1.4 series.
3083  - The drivers and server (upsd) can now change their user ids and
3084    chroot themselves with the new -u and -r arguments.  This lets you
3085    create a "chroot jail" with the bare minimum components.
3086    +
3087    +
3088    This technique is used to provide a higher degree of security.  If
3089    someone exploited upsd to get a shell somehow, they would be stuck
3090    in the jail.
3092  - upssched now explicitly confirms reception of timer commands before
3093    exiting.  This was done to avoid a race where one process would
3094    exit right when another one was starting.  The second one would
3095    believe its command had been handled when it had been lost.
3097  - upslog has been reworked to use standard getopt parsing to provide
3098    the monitoring settings.  The old way of specifying arguments is
3099    still supported for backwards compatibility.
3100    +
3101    +
3102    upslog has also been changed to only parse the format string once,
3103    rather than doing it every time through the loop.  This should
3104    provide a minuscule drop in CPU utilization.
3106  - Usernames are now required in upsmon and upsd.  This means that you
3107    must add a username to your MONITOR lines in upsmon.conf and then
3108    create a matching user in upsd.users.
3109    +
3110    +
3111    Installations from the 1.2 era probably already used usernames, so
3112    this mostly affects those from 1.0 and before.
3114  - Drivers are now pinged regularly by upsd when they aren't posting
3115    updates about the UPS status.  This provides another check in the
3116    data validation process.  If upsd fails to get a response within
3117    a few seconds, the UPS will be marked stale.
3119  - A few minor memory leaks were discovered with valgrind and squashed.
3121  - upsstats now reuses connections to upsd when cycling through multiple
3122    entries in the hosts.conf.  This makes things a bit faster and
3123    avoids some of the noise in the syslog.
3124    +
3125    +
3126    This only applies to entries that are adjacent.  To take advantage
3127    of this feature, you may have to rearrange them per example below.
3128    +
3129    +
3130    Connection reuse for nonadjacent entries may be considered in the
3131    future.
3132 ----
3133         MONITOR ups-1@host-1 ...
3134         MONITOR ups-1@host-2 ...
3135         MONITOR ups-2@host-2 ...
3136         MONITOR ups-3@host-3 ...
3137 ----
3139  - upsd now warns about insecure configuration files at startup.
3140    These files (upsd.conf, upsd.users, and the certfile) should
3141    only be readable by upsd.  Never make them world-readable.
3143  - The programs no longer print "shutting down" when they are just
3144    exiting.  This was changed to avoid confusion about the term, since
3145    "shutting down" has a special meaning in UPS software.
3147  - Signal handlers no longer do any significant amount of work.  Some of
3148    the programs used to do numerous things in there, raising concerns
3149    about reentrancy.  They now set flags and allow the main loop to do
3150    the actual work from there.
3152  - A bug in upsmon where NOTIFYFLAG settings could be ignored was fixed.
3154  - Group handling has been changed.  configure no longer accepts
3155    --with-group, and the programs no longer setgid() to a hardcoded
3156    value.  They now setgid() to the primary group of whatever the
3157    user value may be.
3158    +
3159    +
3160    This may be compiled in with --with-user as before, and many programs
3161    accept -u to override it at runtime.
3163  - The state path is no longer created during 'make install'.  Users
3164    are now expected to create it themselves.  This removes a lot of
3165    evil complexity from the build and install sequences.
3167  - upsd no longer implements the DROP access command, as it
3168    could confuse the clients by getting them out of sync.  DROP is now
3169    implemented as DENY, which sends an error message.  If you use DROP,
3170    you should change it to DENY rather than relying on this
3171    compatibility measure.
3173  - The belkin driver no longer reports OFF and OL at the same time.
3175  - The bestups driver no longer sleeps during polls, which makes it
3176    more responsive to things like instant commands.
3178  - The cyberpower driver now has much better hardware detection code
3179    and no longer freezes at startup under some conditions.  It also now
3180    supports the shutdown function.  Instant commands for shutdowns and
3181    battery tests were also added.
3183  - The dummyups testing driver has been removed.  The dummycons testing
3184    driver can do everything that dummyups once did and much more.
3185    dummycons is also now built by default for easier testing.
3187  - The newapc driver has been reworked to take advantage of the new
3188    internal driver state functions.  Some variables without an obvious
3189    purpose were dropped.
3191  - The newapc driver now sends all five bytes when using sdtype 1.
3192    Previously it didn't send the entire string, and it didn't work.
3193    [Don Lewis]
3195  - The hidups driver has been expanded to allow for setting variables,
3196    a shutdown sequence, and more.
3197    [Arnaud Quette]
3199  - The mge-utalk driver had trouble establishing communications in
3200    some cases due to the RTS line being set.  This has been fixed.
3201    +
3202    +
3203    The mge-shut driver has been added to the tree, and has replaced
3204    the older mge-ellipse driver.
3205    [Arnaud Quette, Philippe Marzouk]
3207  - Outlet-level control has been defined in the variable tree, and will
3208    be added to drivers where the hardware supports it.  This can be
3209    used to shut down some components earlier than others to prolong
3210    your runtime on battery.
3211    +
3212    +
3213    This is supported in the mge-shut driver now, and may show up in
3214    others before long.
3215    [Arnaud Quette]
3217  - KIN-2200AP hardware is now recognized by the powercom driver.
3218    This change may also support other KIN-xxxxAP equipment.
3219    [Preston A. Elder]
3221  - The 1.1kVA UPS is now supported by the bestuferrups driver.  This
3222    driver was also changed to allow easy addition of more models
3223    in the future.
3224    [Bob Apodaca]
3226  - The fentonups driver can now handle devices which implement the
3227    "I" detection differently, and now supports the Giant/WELI 500
3228    as a result.
3229    [Joon Guillen]
3231  - The serial number of the UPS being monitored can now be specified
3232    with serial= in ups.conf in the genericups driver.
3233    [Shaul Karl]
3235  - The newapc driver now sends ESC to break out of menus when the
3236    initial detection fails.  Some new APC models have interactive menus
3237    on the serial port, and the driver couldn't handle them before.
3239  - The snmp-ups driver now reports ambient temperature and humidity
3240    data for APC equipment.  It also now supports the shutdown.reboot and
3241    shutdown.reboot.graceful commands.
3242    [Dmitry Frolov]
3244  - The list of supported variables and commands in the snmp-ups driver
3245    has been expanded.
3246    [Arnaud Quette, J.W. Hoogervorst]
3248  - Various drivers now report bypass mode with the BYP status word.
3249    [Arnaud Quette]
3251  - Energy Sistem equipment is now supported with the esupssmart driver.
3252    [Antonio Trujillo Coronado]
3254  - The Tripp-Lite SU series (SmartOnline) is supported with the new
3255    tripplitesu driver.
3256    [Allan Hessenflow]
3258  - The HP PowerTrust A2994A is now recognized by the hp driver.
3259    [Jan Sporbeck]
3261  - Many drivers were cleaned up to perform basic sanity checks on the
3262    status data before using it.
3264  - An explicit cleanup function has been added to the driver core to
3265    ensure that all dynamic resources are freed before exiting.  This
3266    is part of the larger process to check for memory leaks and other
3267    bad things.
3268    [Arnaud Quette]
3270  - upsd now provides variable descriptions from an auxiliary file.
3271    This file is optional, which allows for a smaller memory footprint.
3272    It can also be edited for localization or other customizations.
3274  - upsimage and upsstats can now render BATTVOLT data.
3275    [Andrew R. Ghali]
3277  - String handling has been cleaned up throughout the tree.  Calls to
3278    functions like strcpy and strcat were either replaced with other
3279    (range-checking) functions or were rewritten to avoid it.
3281  - Many compile-time defaults may now be overridden at runtime.  In
3282    the environment NUT_CONFPATH and NUT_STATEPATH may be used.
3283    upsdrvctl has been changed to execve to pass these along to the
3284    drivers.  ups.conf now supports driverpath=, and upsd.conf supports
3285    DATAPATH.
3286    [Bryan Henderson]
3288  - The configure --with-gd switches now actually do something useful
3289    when gd has been installed outside the default search directories.
3290    [Patrik Schindler]
3292  - The inline keyword is now handled properly on systems which do not
3293    support it or have it specified as another name.  This was breaking
3294    compiles on some systems.
3295    [Petter Reinholdtsen]
3298 Release notes for NUT 1.2.2 - what's new since 1.2.1
3299 ----------------------------------------------------
3301  - The snmp-ups driver has been upgraded and expanded.  It now supports
3302    multiple MIBs, meaning it can handle RFC 1628, APCC, and MGE
3303    equipment.  You can pick the right one with "mibs=" in ups.conf.
3304    +
3305    +
3306    Support for setting variable and instant commands is also available.
3307    [Arnaud Quette and Dmitry Frolov]
3309  - The powernet driver has been upgraded.  It now supports more
3310    variables, has cleaner logging, and may now be considered stable.
3311    [Dmitry Frolov]
3313  - The hidups driver now supports physical port IDs.  This avoids most
3314    of the problems where the hiddev* names can jump around too easily.
3315    It will now stay in the same place as long as you keep it plugged
3316    into the same physical port.  See the ChangeLog file for more details.
3317    [David Brownell]
3319  - The hidups driver now also supports the MFR variable on APC
3320    Back-UPS ES equipment.
3321    [Jonathan A. Davis]
3323  - The sms driver has been updated to version 0.70.
3324    [Marcio Gomes]
3326  - The bestups driver now recognizes Best Power Axxium Rackmount
3327    equipment.
3328    [Ales Casar]
3330  - The liebert driver now uses O_NONBLOCK, and should now work
3331    consistently on OpenBSD as a result.
3332    [Alex Cichowski]
3334  - The liebert driver also now uses debouncing logic on the status
3335    lines.  It was possible to get false readings that would start a
3336    shutdown or just annoy users with excessive onbatt/online notify
3337    messages.  The new code forces the status to settle down for 3 polls
3338    before accepting the new value.
3339    +
3340    +
3341    This means that very short power events may not be detected.  The
3342    alternative is having your machine shut down just because it decided
3343    to wiggle over to OB LB for a few seconds.
3345  - upsmon has had the disconnect logic fixed so the "communications
3346    lost" (COMMBAD) notify will actually go out when the connection
3347    fails.
3348    [Steve Monett]
3350  - upssched now uses a lock file to prevent a race where two could
3351    start at the same time.  The second upssched would "win", and the
3352    first one would be unreachable.  This had the side-effect of not
3353    being able to cancel timers on the first one.
3354    +
3355    +
3356    If you use upssched, you must define the LOCKFN directive when
3357    upgrading to this version, or it will not work.
3358    [Gaspar Bakos]
3360  - The packaging and scripts for Red Hat systems have been updated.
3361    [Antonino Albanese]
3363  - upsd is now a bit more lenient about access levels in the
3364    'numlogins' check, which is what caused the problem in upsmon
3365    (next item).
3367  - upsmon no longer gets stuck in slavesync() when upsd is configured
3368    to drop certain queries.  This usually happened at the worst
3369    possible time: in the middle of a shutdown.
3370    [John David Garza]
3372  - The upsclient functions now do more sanity checking on data from
3373    upsd so a short read won't return garbage to the callers.
3375  - upsset now works properly with ENUM/VARTYPE values for multiple
3376    UPSes on a single upsd.
3377    [Dmitry Frolov]
3379  - Various portability fixes for building on SGI were applied.
3380    [Andrea Suatoni]
3382  - upsd no longer tries to reference a deleted client structure if the
3383    client disconnects at the wrong time.  Previously, it tried to use
3384    that pointer after the sendback() function had already failed on
3385    write and deleted the client.  This could cause upsd to segfault
3386    depending on what areas were accessed.
3387    [Patrik Schindler]
3390 Release notes for NUT 1.2.1 - what's new since 1.2.0
3391 ----------------------------------------------------
3393  - The sms driver is back, with support for Microlink Manager III
3394    hardware. [Marcio Gomes]
3396  - Fideltronik Ares Series hardware is now supported as genericups
3397    type 19.  [Tomek Orzechowski and Arkadiusz Mikiewicz]
3399  - The drivers no longer silently drop instant commands or set commands
3400    from upsd that happen to get fragmented in transit.
3401    [linux@horizon.com]
3403  - The old multilink driver is back with a new name: liebert.  It
3404    supports Liebert UPStation GXE hardware with the contact-closure
3405    cable.  This is currently an experimental driver as there is no
3406    way to power down the load.
3408  - configure now picks up the right flags for gd automatically if gd
3409    2.0.8 or higher is installed.  This greatly simplifies the CGI build
3410    process for most users.
3412  - Shutdowns on FreeBSD using the genericups driver should work again.
3413    [Petri Riihikallio]
3416 Historic releases
3417 -----------------
3419 More ancient history is not covered in detail here.
3421 You can see link:docs/history.txt[] for more details.