NUTDRV_QX(8)
============

NAME
----

nutdrv_qx - Driver for Q* protocol serial and USB based UPS equipment


SYNOPSIS
--------

*nutdrv_qx* -h

*nutdrv_qx* -a 'UPS_NAME' ['OPTIONS']

NOTE: This man page only documents the hardware-specific features of the
*nutdrv_qx* driver. For information about the core driver, see
linkman:nutupsdrv[8].


SUPPORTED HARDWARE
------------------

The protocol originates from Mega System Technologies, Inc. in Taiwan
and was used by numerous vendors, as well as evolved over time, growing
both in features and nuance incompatibilities. NUT documentation usually
refers to this large family of similar dialects as the 'Megatec Q*' or
'Megatec Qx' protocol family.

The *nutdrv_qx* driver is known to work with various UPSes from
'Armac', 'Blazer', 'Energy Sistem', 'Fenton Technologies', 'General Electric',
'Gtec', 'Hunnox', 'Masterguard', 'Mustek', 'Powercool', 'Voltronic Power',
'SKE' (rebranded by many, many -- have I said many? -- others...

Long story short: if your UPS came with a software called 'Viewpower',
chances are high that it works with this driver with one of the
<<_extra_arguments,'voltronic*' protocols or with the 'mecer' one>>),
and many others.

NOTE: Due to historical reasons, two important tunables of this driver are
somewhat inconveniently named *protocol* (for the Qx dialect) and *subdriver*
(for USB to serial link conversion). Other multi-dialect drivers refer to their
dialect modules as *subdrivers*, and actually the modular source code of
`nutdrv_qx` also does.

NOTE: Due to the amount of supported Qx dialects, and the time it takes
to query for relevant combinations of commands and wait for a reply or
absence thereof, in order to detect hardware/firmware support of some
particular way for the driver to communicate with the device, automatic
`nutdrv_qx` driver initialization may take about a minute.
It is recommended to store the detected and reported `protocol` and/or
`subdriver` values into your linkman:ups.conf[5] file to speed up later
driver start-ups and avoid possible service timeouts.

The <<_internet_resources,NUT compatibility table>> lists all the known
supported models. Keep in mind, however, that other models not listed
there may also be supported, but haven't been tested or reported back.

All devices with a serial interface and many with a USB interface are
supported.


EXTRA ARGUMENTS
---------------

You may need to override or provide defaults for some values, depending on the make and model of your UPS.

The following are the ones that most likely will need changing (see linkman:ups.conf[5]):

*ondelay =* 'value'::
Time to wait before switching on the UPS (seconds).
This value is truncated to units of 60 seconds.
+
Note that a value below 3 minutes, may cause earlier firmware versions to not switch on automatically, so it defaults to 3 minutes (i.e. 180 seconds).
+
This option provides a default value for *ups.delay.start* that will then be used by the driver in the automatic shutdown sequence (i.e. calling the driver with the *-k* option, calling linkman:upsdrvctl[8] with the *shutdown* option or when the +FSD+ flag is set and linkman:upsmon[8] enters its shutdown sequence): however you can change this value `on the fly' for the actual session, only for the use with instant commands, setting *ups.delay.start* with linkman:upsrw[8].

*offdelay =* 'value'::
Time to wait before shutting down the UPS (seconds).
This value is truncated to units of 6 seconds (less than 60 seconds) or 60 seconds (more than 60 seconds).
Defaults to 30 seconds.
+
This option provides a default value for *ups.delay.shutdown* that will then be used by the driver in the automatic shutdown sequence (i.e. calling the driver with the *-k* option, calling linkman:upsdrvctl[8] with the *shutdown* option or when the +FSD+ flag is set and linkman:upsmon[8] enters its shutdown sequence): however you can change this value "on the fly" for the actual session, only for the use with instant commands, setting *ups.delay.shutdown* with linkman:upsrw[8].

*stayoff*::
If you set stayoff in linkman:ups.conf[5] when FSD arises the UPS will call a *shutdown.stayoff* shutting down after *ups.delay.shutdown* seconds and won't return (see <<_known_problems,KNOWN PROBLEMS>>), otherwise (standard behaviour) the UPS will call *shutdown.return* shutting down after *ups.delay.shutdown* seconds and then turn on after *ups.delay.start* seconds (if mains meanwhile returned).

*protocol =* 'string'::
Skip autodetection of the protocol to use and only use the one specified.
Supported values: 'bestups', 'gtec', 'hunnox', 'innovart31', 'innovart33', 'innovatae', 'masterguard', 'mecer', 'megatec', 'megatec/old', 'mustek', 'q1', 'q2', 'q6', 'voltronic', 'voltronic-axpert', 'voltronic-qs', 'voltronic-qs-hex' and 'zinto'.
+
Run the driver program with the `--help` option to see the exact list of
`protocol` values it would currently recognize.
+
Note that if you end up using the 'q1' protocol, you may want to give a try to the 'mecer', 'megatec' and 'zinto' ones setting the <<old-blazer-protocols-options,*novendor*/*norating* flags>> (only one, or both).

*pollfreq =* 'num'::
Set polling interval for full updates, in seconds, to reduce the message traffic.
Between two polling requests, the driver will do 'quick polls' dealing just
with *ups.status* at an interval specified by the *pollinterval* driver option
(details in linkman:ups.conf[5]).
The default value is 30 (in seconds).

If your UPS doesn't report either *battery.charge* or *battery.runtime* you may want to add the following ones in order to have guesstimated values:

*default.battery.voltage.high =* 'value'::
Maximum battery voltage that is reached after about 12 to 24 hours charging.
If you want the driver to report a guesstimated *battery.charge*, you need to specify this (see <<_battery_charge_guesstimation,BATTERY CHARGE GUESSTIMATION>>).

*default.battery.voltage.low =* 'value'::
Minimum battery voltage just before the UPS automatically shuts down.
If you want the driver to report a guesstimated *battery.charge*, you need to specify this (see <<_battery_charge_guesstimation,BATTERY CHARGE GUESSTIMATION>>).

*default.battery.voltage.nominal =* 'value'::
*override.battery.voltage.nominal =* 'value'::
Some devices show a wrong nominal battery voltage (or none at all), so you may need to override or set a default value.

*override.battery.packs =* 'value'::
Some devices "natively" report just a part of the total battery voltage
(see also *battery_voltage_reports_one_pack* below).
+
For instance, if *battery.voltage.nominal* is 24 V, but it reports
a *battery.voltage* of around 2 V, the number of *battery.packs* to
correct this reading would be 12.
+
The driver will attempt to detect this number automatically, but if
this fails somehow, you may want to override this value.
+
Note that this is primarily useful for "guesstimation" of `battery.charge`
and/or `battery.runtime` (with `runtimecal` setting), if those readings are
not provided by the device directly.

*battery_voltage_reports_one_pack*::
Some devices "natively" report just report a part of the total battery voltage
(see also *override.battery.packs* above, if that value is not reported by the
device or properly guessed by the driver otherwise).
+
If this flag is set, most of the subdrivers (except those which know about
more complicated device-specific nuances, currently: *ablerex*, *masterguard*
and *voltronic-qs-hex*) adjust their ultimately reported *battery.voltage*
value as a multiple of *battery.packs* and "native" *battery.voltage*).
+
Note this is primarily useful for consistent diagnostics and graphing of the
numbers, and should not impact the "guesstimation" of `battery.charge` and/or
`battery.runtime` -- so rather a cosmetic adjustment, than critical.

*runtimecal =* 'value,value,value,value'::
Parameter used in the (optional) runtime estimation.
This takes two runtimes at different loads.
Typically, this uses the runtime at full load and the runtime at half load.
For instance, if your UPS has a rated runtime of 240 seconds at full load and 720 seconds at half load, you would enter
+
    runtimecal = 240,100,720,50
+
The first load should always be higher than the second.
If you have values available for loads other than 100 and 50 % respectively, you can use those too, but keep them spaced apart as far as reasonably possible.
Just don't get too close to no load (prediction of runtime depends more on idle load for the battery then).

*chargetime =* 'value'::
The time needed to fully recharge the battery after being fully discharged.
If not specified, the driver defaults to 43200 seconds (12 hours).
Only used if *runtimecal* is also specified.

*idleload =* 'value'::
Minimum battery load used by the driver to estimate the runtime.
If not specified, the driver defaults to 10%.
Only used if *runtimecal* is also specified.


BESTUPS, INNOVART31, INNOVART33, INNOVATAE, MECER, MEGATEC, MEGATEC/OLD, MUSTEK, Q1, Q2, Q6, VOLTRONIC-QS, VOLTRONIC-QS-HEX, ZINTO PROTOCOLS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*ignoresab*::
Some UPSes incorrectly report the `Shutdown Active' bit as always on, consequently making the driver believe the UPS is nearing a shutdown (and, as a result, ups.status always contains +FSD+... and you know what this means).
Setting this flag will make the driver ignore the `Shutdown Active' bit.


[[old-blazer-protocols-options]]
MECER, MEGATEC, MEGATEC/OLD, MUSTEK, ZINTO PROTOCOLS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*ondelay*::
The acceptable range is +0..599940+ seconds.

*offdelay*::
The acceptable range is +12..600+ seconds.

*norating*::
Some UPSes will lock up if you attempt to read rating information from them.
Setting this flag will make the driver skip this step.

*novendor*::
Some UPSes will lock up if you attempt to read vendor information from them.
Setting this flag will make the driver skip this step.


BESTUPS PROTOCOL
~~~~~~~~~~~~~~~~

*ondelay*::
The acceptable range is +60..599940+ seconds.

*offdelay*::
The acceptable range is +12..5940+ seconds.

*pins_shutdown_mode =* 'value'::
Set https://www.networkupstools.org/protocols/sola.html#_shutdown_set_command[shutdown mode functionality of Pin 1 and Pin 7] on the UPS DB9 communication port (Per Best Power's EPS-0059) to 'value' [+0..6+].


MASTERGUARD PROTOCOL
~~~~~~~~~~~~~~~~~~~~

*slave_addr =* 'value'::
Make the claim function verify it's talking to the specified 'slave address' (*ups.id*).
Safeguard against talking to the wrong one of several identical UPSes on the same USB bus.
Note that when changing *ups.id* (through linkman:upsrw[8]) the driver will continue to talk to the UPS with the new 'slave address', but won't claim it again on restart until the *slave_addr* parameter is adjusted.


INNOVART31, INNOVART33, INNOVATAE, Q1, Q2, Q6 PROTOCOLS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*ondelay*::
The acceptable range is +0..599940+ seconds.

*offdelay*::
The acceptable range is +12..600+ seconds.


Q2, Q6 PROTOCOLS
~~~~~~~~~~~~~~~~

*nooutstats*::
Some UPSes don't support `WA` command which returns output load stats. Using this flag will make the driver ignore these requests.


VOLTRONIC-QS, VOLTRONIC-QS-HEX PROTOCOLS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*ondelay*::
The acceptable range is +60..599940+ seconds.

*offdelay*::
The acceptable range is +12..540+ seconds.


VOLTRONIC-AXPERT PROTOCOL
~~~~~~~~~~~~~~~~~~~~~~~~~

NOTE: This protocol is currently largely experimental, many features may
be only exposed in specially configured builds of the NUT driver program.

*reset_to_default*::
Reset capability options and their limits to safe default values

*bypass_alarm*::
Alarm (BEEP!) at Bypass Mode [enabled/disabled]

*battery_alarm*::
Alarm (BEEP!) at Battery Mode [enabled/disabled]


VOLTRONIC PROTOCOL
~~~~~~~~~~~~~~~~~~

The following options are supported only by the 'voltronic' protocol.
Not all of them are available on all the UPSes supported by this protocol.

*ondelay*::
The acceptable range is +0..599940+ seconds.

*offdelay*::
The acceptable range is +12..5940+ seconds.

*battery_number =* 'value'::
Set number of batteries that make a pack to 'value' [+1..9+].
This setting will change the charge and runtime estimation reported by the UPS.

*output_phase_angle =* 'value'::
Changes output phase angle to the provided value [+000+, +120+, +180+, +240+]°.


UPS CAPABILITY SETTINGS
^^^^^^^^^^^^^^^^^^^^^^^

*reset_to_default*::
Reset capability options and their voltage and frequency limits to safe default values.
(*Doable only when the UPS is in Standby Mode*)
+
Note that setting this option will reset also *ups.start.auto*, *battery.protection*, *battery.energysave*, *ups.start.battery*, *outlet.0.switchable*, *input.transfer.high*, *input.transfer.low*, *input.frequency.high* and *input.frequency.low*.

These UPSes can be fine-tuned to suit your needs enabling or disabling the following options (the driver should tell you which one the UPS is capable of on startup: the settable ones will be reported either are 'enabled' or 'disabled' in the logs):

*alarm_control =* 'string'::
Enable or disable alarm (BEEP!) [+enabled+/+disabled+].
Settable also `on the fly' with *beeper.enable* and *beeper.disable* instant commands.

*bypass_alarm =* 'string'::
Enable or disable alarm (BEEP!) at Bypass Mode [+enabled+/+disabled+].

*battery_alarm =* 'string'::
Enable or disable alarm (BEEP!) at Battery Mode [+enabled+/+disabled+].

*bypass_when_off =* 'string'::
Enable or disable bypass when the UPS is Off [+enabled+/+disabled+].
If enabled, AC will directly provide power to connected devices when the UPS is off.

*bypass_forbidding =* 'string'::
Enable or disable Bypass Forbidding [+enabled+/+disabled+].
If enabled, the UPS will not transfer to bypass mode under any condition.

*converter_mode =* 'string'::
Enable or disable Converter Mode [+enabled+/+disabled+].
When input frequency is within 40 Hz to 70 Hz, the UPS can be set at a constant output frequency, 50 Hz or 60 Hz.
The UPS will still charge battery under this mode.

*eco_mode =* 'string'::
Enable or disable ECO Mode [+enabled+/+disabled+].
When input voltage/frequency are within acceptable range, the UPS will bypass voltage to output for energy saving.
PFC and INVERTER are still active at this mode.
Settable also "on the fly" with *bypass.start* and *bypass.stop* instant commands.

*advanced_eco_mode =* 'string'::
Enable or disable Advanced ECO Mode [+enabled+/+disabled+].
When input voltage/frequency are within acceptable range, the UPS will bypass voltage to output for energy saving.
PFC and INVERTER are off at this mode.

*battery_open_status_check =* 'string'::
Enable or disable Battery Open Status Check [+enabled+/+disabled+].
If enabled, when the UPS is turned on, it will check if the battery is connected or not.

*site_fault_detection =* 'string'::
Enable or disable site fault detection [+enabled+/+disabled+].
If enabled, the UPS will beep when the input neutral and hot wires are reversed.

*constant_phase_angle =* 'string'::
Enable or disable Constant Phase Angle Function (output and input phase angles are not equal) [+enabled+/+disabled+].

*limited_runtime_on_battery =* 'string'::
Enable or disable limited runtime on battery mode [+enabled+/+disabled+].


BYPASS MODE VOLTAGE/FREQUENCY LIMITS
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

Variables to fine-tune voltage and frequency limits for Bypass mode.
These limits are reset to safe default values by *reset_to_default*.

If AC voltage and frequency are within acceptable range, Bypass mode will be used (If the UPS is capable of and it's enabled).

Since these values are device-specific, if your UPS support them, you will get their settable limits printed in the logs on startup.

*max_bypass_volt =* 'value'::
Maximum voltage for Bypass Mode (V).

*min_bypass_volt =* 'value'::
Minimum voltage for Bypass Mode (V).

*max_bypass_freq =* 'value'::
Maximum frequency for Bypass Mode (Hz).

*min_bypass_freq =* 'value'::
Minimum frequency for Bypass Mode (Hz).


OPTIONS SPECIFIC FOR P31 UPSES
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The following options are available only on P31 UPSes.

*work_range_type =* 'string'::
Device grid working range for P31 UPSes [+Appliance+/+UPS+].


TESTING
^^^^^^^

This protocol comes with a couple of functions that are not enabled by default because of the lack of knowledge of some part of the communication protocol used by these UPSes by your friendly neighborhood developer.
Since these functions are supposed to be queries to the UPS for some kind of information, they _should_ not make your UPS go boom.
So if you are brave enough to risk your UPS and attached devices' life to help the developers, this will be very appreciated.
*Do it at your own risk*.

*testing*::
If invoked the driver will exec also commands that still need testing.


SERIAL INTERFACE ONLY
~~~~~~~~~~~~~~~~~~~~~

*cablepower =* 'string'::
By default the driver will set DTR and clear RTS ('normal').
If you find that your UPS isn't detected or the communication with the UPS is unreliable, you may try if clear DTR and set RTS ('reverse'), set DTR and RTS ('both') or clear DTR and RTS ('none') improves this situation.


USB INTERFACE ONLY
~~~~~~~~~~~~~~~~~~

include::nut_usb_addvars.txt[]

*subdriver =* 'string'::
Select a serial-over-USB subdriver to use.
You have a choice between *ablerex*, *armac*, *cypress*, *fabula*, *fuji*, *gtec*, *hunnox*, *ippon*, *krauler*, *phoenix*, *phoenixtec*, *sgs* and *snr*.
+
Run the driver program with the `--help` option to see the exact list of
`subdriver` values it would currently recognize.
+
NOTE: When using this option, it is mandatory to also specify the *vendorid*
and *productid* matching parameters.

*langid_fix =* 'value'::
Apply the language ID workaround to the *krauler* subdriver.
This is mandatory for some devices to work (LDLC, Dynamix and others).
You must provide *value* (+0x409+ or +0x4095+), according to your device entry in NUT hardware compatibility list (HCL).

*noscanlangid*::
If this flag is set, don't autoscan valid range for langid.


IMPLEMENTATION NOTES
^^^^^^^^^^^^^^^^^^^^

*'armac' subdriver*::
The Armac communication subdriver reproduces a communication protocol used by
an old release of "PowerManagerII" software, which doesn't seem to be Armac
specific: its banner is "2004 Richcomm Technologies, Inc. Dec 27 2005 ver 1.1."
Maybe other Richcomm UPSes would work with this -- maybe better than with
the older standalone `richcomm_usb` driver.

*'fabula' subdriver*::
This subdriver, meant to be used with the 'megatec' protocol, does *not* support the various *test.battery* commands.
Plus, the *shutdown.return* command ignores the values set in 'ups.delay.start'/*ondelay* and makes the UPS turn on the load as soon as power is back.

*'gtec' subdriver*::
Currently, the Gtec specific support is only known to work with USB devices
(tested with a Gtec ZP120N), and was not seen with Serial port.
+
This mode is not automatically detected, and should be enabled manually in
your 'ups.conf', e.g.:
+
----
[gtec-ups]
    driver = "nutdrv_qx"
    port = "auto"
    subdriver = "gtec"
    protocol = "gtec"
----
+
Other subdrivers and protocol implementations (including linkman:blazer_usb[8])
sort of work, but both have two problems:
+
* They use the simple "Q1" query, which doesn't report the result of
  the latest battery test.
  - For some reason the UPS reports normal battery voltage even when
    the battery is completely disconnected.
    So you won't know the battery is dead until a power failure.
  - This driver sends the more advanced "Q4" request instead.
    Here the answer includes status letters with more information
    than the Q1 binary flags, including battery status.
* USB reply is read in 8-byte chunks, which causes the UPS to disconnect
  from USB. The UPS reconnects in a second, but it still breaks the
  initialization of `nutdrv_qx`, where the query is sent twice in a
  short time (unlike `blazer_usb`).
  - The solution is simple: read the whole reply at once.

*'hunnox' subdriver*::
This protocol subdriver is closely related to 'fabula' one, with a few tweaks for devices not directly supported by that driver.

*'fuji' subdriver*::
This subdriver, meant to be used with the 'megatec' protocol, does *not* support the *shutdown.stayoff* and *load.off* commands.
Plus, the *shutdown.return* command ignores the values set in 'ups.delay.start'/*ondelay* and makes the UPS turn on the load as soon as power is back.

*'krauler' subdriver*::
This subdriver, meant to be used with the 'megatec' protocol, does *not* support the shutdown commands, i.e.: *shutdown.return*, *shutdown.stayoff* and *load.off*.

*'snr' subdriver*::
This subdriver, meant to be used with the 'megatec' protocol, does *not* support the shutdown commands, i.e.: *shutdown.return*, *shutdown.stayoff* and *load.off*.


UPS COMMANDS
------------

This driver supports some instant commands (see linkman:upscmd[8]):

*beeper.toggle*::
Toggle the UPS beeper.
(Not available on some hardware)

*load.on*::
Turn on the load immediately.
(Not available on some hardware)

*load.off*::
Turn off the load immediately (see <<_known_problems,KNOWN PROBLEMS>>).

*shutdown.return*::
Turn off the load and return when power is back.
Uses the timers defined by *ups.delay.start* and *ups.delay.shutdown*.

*shutdown.stayoff*::
Turn off the load and remain off (see <<_known_problems,KNOWN PROBLEMS>>).
Uses the timer defined by *ups.delay.shutdown*.

*shutdown.stop*::
Stop a shutdown in progress.

*test.battery.start.deep*::
Perform a long battery test.
(Not available on some hardware)

*test.battery.start.quick*::
Perform a quick (10 second) battery test.

*test.battery.stop*::
Stop a running battery test.
(Not available on some hardware)


BESTUPS, INNOVART31, INNOVART33, INNOVATAE, MECER, MEGATEC, MEGATEC/OLD, MUSTEK, Q1, Q2, Q6, ZINTO PROTOCOLS
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

*test.battery.start* 'value'::
Perform a battery test for the duration of 'value' seconds (truncated to 60 seconds) [+60..5940+].


MASTERGUARD PROTOCOL
~~~~~~~~~~~~~~~~~~~~

*clear.fault.record*::
Clear fault/error record

*beeper.enable*::
Enable the UPS beeper.

*beeper.disable*::
Disable the UPS beeper.

*test.battery.start.low*::
Perform a battery test until the battery charge is low.
+
The difference between the "battery test until battery low" and "deep battery
test" is that the latter is actually a battery calibration test and needs some
preconditions to be met, i.e. the load must be between 30% and 100% and the
starting battery capacity is greater than 99%.
+
The "Battery test until battery low" can be started anytime.
+
Feature was tested on Masterguard A1000 and A2000 units.

*test.battery.start* 'value'::
Perform a battery test for the duration of 'value' seconds (truncated to 60 seconds) [+0..5940+].
This value is truncated to units of 6 seconds (less than 60 seconds) or 60 seconds (more than 60 seconds).

*bypass.start*::
Put the UPS in bypass mode

*bypass.stop*::
Take the UPS in normal mode


VOLTRONIC POWER P98 UNITS (WITH MECER PROTOCOL)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

*test.battery.start* 'value'::
Perform a battery test for the duration of 'value' seconds (truncated to 60 seconds) [+12..5940+].
This value is truncated to units of 6 seconds (less than 60 seconds) or 60 seconds (more than 60 seconds).


VOLTRONIC PROTOCOL
~~~~~~~~~~~~~~~~~~

The following instant commands are available for the 'voltronic' protocol.
Not all of them are available on all the UPSes supported by this protocol.

*beeper.enable*::
Enable the UPS beeper.

*beeper.disable*::
Disable the UPS beeper.

*test.battery.start* 'value'::
Perform a battery test for the duration of 'value' seconds [+12..5940+].
This value is truncated to units of 6 seconds (less than 60 seconds) or 60 seconds (more than 60 seconds).

*outlet.1.load.off*::
Turn off outlet 1 load immediately.

*outlet.1.load.on*::
Turn on outlet 1 load immediately.

*outlet.2.load.off*::
Turn off outlet 2 load immediately.

*outlet.2.load.on*::
Turn on outlet 2 load immediately.

*outlet.3.load.off*::
Turn off outlet 3 load immediately.

*outlet.3.load.on*::
Turn on outlet 3 load immediately.

*outlet.4.load.off*::
Turn off outlet 4 load immediately.

*outlet.4.load.on*::
Turn on outlet 4 load immediately.

*bypass.start*::
Put the UPS in ECO Mode.

*bypass.stop*::
Take the UPS out of ECO Mode.


BATTERY CHARGE GUESSTIMATION
----------------------------

Due to popular demand, this driver will report a guesstimated *battery.charge* and optionally *battery.runtime*, provided you specified a couple of the <<_extra_arguments,EXTRA ARGUMENTS>> listed above.

If you specify both *battery.voltage.high* and *battery.voltage.low* in linkman:ups.conf[5], but don't enter *runtimecal*, it will guesstimate the state of charge by looking at the battery voltage alone.
This is not reliable under load, as this only gives reasonably accurate readings if you disconnect the load, let the battery rest for a couple of minutes and then measure the open cell voltage.
This just isn't practical if the power went out and the UPS is providing power for your systems.

                         battery.voltage - battery.voltage.low
    battery.charge =  ------------------------------------------ x 100 %
                      battery.voltage.high - battery.voltage.low

There is a way to get better readings without disconnecting the load but this requires one to keep track on how much (and how fast) current is going in and out of the battery.
If you specified the *runtimecal*, the driver will attempt to do this.
Note however, that this heavily relies on the values you enter and that the UPS must be able to report the load as well.
There are quite a couple of devices that report 0 % (or any other fixed value) at all times, in which case this obviously doesn't work.

The driver also has no way of determining the degradation of the battery capacity over time, so you'll have to deal with this yourself (by adjusting the values in *runtimecal*).
Also note that the driver guesses the initial state of charge based on the battery voltage, so this may be less than 100 %, even when you are certain that they are full.
There is just no way to reliably measure this between 0 and 100 % full charge.

This is better than nothing (but not by much).
If any of the above calculations is giving you incorrect readings, you are the one that put in the values in linkman:ups.conf[5], so don't complain with the author.
If you need something better, buy a UPS that reports *battery.charge* and *battery.runtime* all by itself without the help of a NUT driver.


NOTES FOR THE PREVIOUS USER OF MEGATEC DRIVERS
----------------------------------------------

The *nutdrv_qx* driver having replaced the megatec ones, some configuration changes may be required by users switching to *nutdrv_qx*.

Part of this, the following megatec options, in linkman:ups.conf[5], have to be changed:

*battvolts*::
You need to use 'default.battery.voltage.high' and 'default.battery.voltage.low'

*dtr* and *rts*::
You need to use 'cablepower'

*ignoreoff*::
This parameter can simply be discarded, since it was a wrong understanding of the specification.


NOTES FOR THE PREVIOUS USER OF BLAZER DRIVERS
---------------------------------------------

The *nutdrv_qx* driver having replaced the blazer ones, some configuration changes may be required by users switching to *nutdrv_qx*.

Part of this, the following blazer options, in linkman:ups.conf[5], have to be changed:

*ondelay*::
While the previous blazer drivers expected minutes, the new *nutdrv_qx* driver wants seconds.

The following instant command has also been changed:

*test.battery.start* 'value'::
While the old blazer drivers expected a 'value' in minutes, the *nutdrv_qx* driver wants a 'value' in seconds.


NOTES FOR THE PREVIOUS USER OF BESTUPS DRIVER
---------------------------------------------

The *nutdrv_qx* driver having replaced the bestups one, some configuration changes may be required by users switching to *nutdrv_qx*.

Part of this, the following bestups options, in linkman:ups.conf[5], are no longer supported by this driver:

*nombattvolt*::
*battvoltmult*::
See <<_battery_charge_guesstimation,BATTERY CHARGE GUESSTIMATION>>.

*ID*::
Discarded.


NOTES FOR THE PREVIOUS USER OF VOLTRONIC DRIVERS
------------------------------------------------

The *nutdrv_qx* driver having replaced the voltronic ones, some configuration changes may be required by users switching to *nutdrv_qx*.

Part of this, the following voltronic options, in linkman:ups.conf[5], have to be changed:

*ondelay*::
While the previous voltronic drivers expected minutes, the new *nutdrv_qx* driver wants seconds.
It no longer defaults to 0 minutes but to 3 minutes (i.e. 180 seconds) for compatibility with the users switching from the old blazer drivers.

*battnumb*::
This option has been renamed to *battery_number*.

The following options are no longer supported by this driver, you can now change them more conveniently "on the fly" calling linkman:upsrw[8] with the appropriate NUT variable -- provided that your UPS supports them.

[horizontal]
*battpacks*:: -> *battery.packs*
+
Set number of battery packs in parallel [+1..99+].
This setting will change the charge and runtime estimation reported by the UPS.

*battlow*:: -> *battery.voltage.low*
+
Set minimum battery voltage just before the UPS automatically shuts down.
This setting will change the charge and runtime estimation reported by the UPS.

*auto_reboot*:: -> *ups.start.auto*
+
Enable or disable auto reboot [+enabled+/+disabled+].
If enabled, the UPS will auto recover when AC power returns.

*battery_protection*:: -> *battery.protection*
+
Enable or disable battery deep discharge protection [+enabled+/+disabled+].

*energy_saving*:: -> *battery.energysave*
+
Enable or disable Green power function [+enabled+/+disabled+].
If enabled, for energy saving, the UPS will auto off when there is no load.

*cold_start*:: -> *ups.start.battery*
+
Enable or disable Cold Start [+enabled+/+disabled+].
If enabled, the UPS can be turned on also if AC is not connected to the UPS.

*outlet_control*:: -> *outlet.0.switchable*
+
Enable or disable programmable outlets control at battery mode [+enabled+/+disabled+].
If enabled, the UPS will cut off programmable outlets after backup time (set through *outlet.*{*1*,*2*,*3*,*4*}**.delay.shutdown**) arrives.
If disabled, the UPS will provide continuous power to programmable outlets until the battery is running out.

*max_eco_volt*:: -> *input.transfer.high*
+
Maximum voltage for ECO Mode (V).
If AC voltage is within acceptable range, ECO mode will be used (If the UPS is capable of and it's enabled).

*min_eco_volt*:: -> *input.transfer.low*
+
Minimum voltage for ECO Mode (V).
If AC voltage is within acceptable range, ECO mode will be used (If the UPS is capable of and it's enabled).

*max_eco_freq*:: -> *input.frequency.high*
+
Maximum frequency for ECO Mode (Hz).
If AC frequency is within acceptable range, ECO mode will be used (If the UPS is capable of and it's enabled).

*min_eco_freq*:: -> *input.frequency.low*
+
Minimum frequency for ECO Mode (Hz).
If AC frequency is within acceptable range, ECO mode will be used (If the UPS is capable of and it's enabled).

*outlet1_delay*:: -> *outlet.1.delay.shutdown*
+
Delay time before programmable outlet 1 shuts down the load when on battery mode [+0..59940+] (seconds).

*outlet2_delay*:: -> *outlet.2.delay.shutdown*
+
Delay time before programmable outlet 2 shuts down the load when on battery mode [+0..59940+] (seconds).

*outlet3_delay*:: -> *outlet.3.delay.shutdown*
+
Delay time before programmable outlet 3 shuts down the load when on battery mode [+0..59940+] (seconds).

*outlet4_delay*:: -> *outlet.4.delay.shutdown*
+
Delay time before programmable outlet 4 shuts down the load when on battery mode [+0..59940+] (seconds).

*batt_type*:: -> *battery.type*
+
Battery type (for P31 UPSes only) [+Li+/+Flooded+/+AGM+].


KNOWN PROBLEMS
--------------

Some UPS commands aren't supported by all models.
In most cases, the driver will send a message to the system log when the user tries to execute an unsupported command.
Unfortunately, some models don't even provide a way for the driver to check for this, so the unsupported commands will silently fail.

Both the *load.off* and *shutdown.stayoff* instant commands are meant to turn the load off indefinitely.
However, some UPS models don't allow this.

Some models report a bogus value for the beeper status (will always be 'enabled' or 'disabled').
So, the *beeper.toggle* command may appear to have no effect in the status reported by the driver when, in fact, it is working fine.

The temperature and load value is known to be bogus in some models.


MASTERGUARD UNITS
~~~~~~~~~~~~~~~~~

The driver is supposed to support both "new" A series (A700/1000/2000/3000 and their -19 cousins) and E series (E60/100/200) but was tested only on A due to lack of E hardware.


VOLTRONIC-AXPERT UNITS
~~~~~~~~~~~~~~~~~~~~~~

This protocol supports Voltronic Power Axpert inverters, based on P30 protocol
(used e.g. in photovoltaic equipment, often paired with an UPS charged by the
solar panels).

The code is currently largely experimental, with data point and command names
not aligned with concepts that are part of NUT standard vocabulary (this many
of them are prefixed with `experimental.` namespace). In fact,  many features
may be only exposed in specially configured builds of the NUT driver program.


VOLTRONIC-QS UNITS
~~~~~~~~~~~~~~~~~~

Both *load.off* and *shutdown.stayoff* instant commands are known to work as expected (i.e. turn the load off indefinitely) only if mains is present, otherwise, as soon as mains returns the load will be powered.

After issuing a *shutdown.return* instant command, the UPS won't wait *ondelay* before powering on the load, provided the following conditions are met:

- if the load has been previously (no matter how long before) powered off through *load.off*/*shutdown.stayoff* _and_ powered on through *load.on*/*shutdown.stop* _and_
- if AC wasn't cut after issuing the *load.off*/*shutdown.stayoff* (i.e. the UPS didn't turn itself off) _and_
- if there's a power outage after issuing the *shutdown.return* command

In this case, as soon as mains returns the load will be powered.


VOLTRONIC-QS-HEX UNITS
~~~~~~~~~~~~~~~~~~~~~~

*shutdown.return*, *load.off*, and *shutdown.stayoff* instant commands are known to work as expected only if mains is present, otherwise, as soon as mains returns the load will be powered.


UPS WARNINGS (VOLTRONIC PROTOCOL)
---------------------------------

The UPSes supported by 'voltronic' protocol report warnings through a 64bit flag (bit1bit2...bit63bit64) where 1 means that a warning arose, while 0 means no warning.
Since more than one warning at a time can be signaled, and because of the limited space in the ups.alarm variable, if the length of the warnings exceeds that of ups.alarms variable, they will be reported as bits.
If you want to know the explanation of that bit you can either watch the log or see the next table (unlisted bits equal to unknown warnings).

.UPS Warnings for 'voltronic' UPSes
[cols="5,95",options="autowidth,header",frame="topbot",grid="rows",align="center",caption=""]
|====
|#	|Corresponding Warning
|1	|Battery disconnected
|2	|Neutral not connected
|3	|Site fault
|4	|Phase sequence incorrect
|5	|Phase sequence incorrect in bypass
|6	|Input frequency unstable in bypass
|7	|Battery overcharged
|8	|Low battery
|9	|Overload alarm
|10	|Fan alarm
|11	|EPO enabled
|12	|Unable to turn on UPS
|13	|Over temperature alarm
|14	|Charger alarm
|15	|Remote auto shutdown
|16	|L1 input fuse not working
|17	|L2 input fuse not working
|18	|L3 input fuse not working
|19	|Positive PFC abnormal in L1
|20	|Negative PFC abnormal in L1
|21	|Positive PFC abnormal in L2
|22	|Negative PFC abnormal in L2
|23	|Positive PFC abnormal in L3
|24	|Negative PFC abnormal in L3
|25	|Abnormal in CAN-bus communication
|26	|Abnormal in synchronous signal circuit
|27	|Abnormal in synchronous pulse signal circuit
|28	|Abnormal in host signal circuit
|29	|Male connector of parallel cable not connected well
|30	|Female connector of parallel cable not connected well
|31	|Parallel cable not connected well
|32	|Battery connection not consistent in parallel systems
|33	|AC connection not consistent in parallel systems
|34	|Bypass connection not consistent in parallel systems
|35	|UPS model types not consistent in parallel systems
|36	|Capacity of UPSs not consistent in parallel systems
|37	|Auto restart setting not consistent in parallel systems
|38	|Battery cell over charge
|39	|Battery protection setting not consistent in parallel systems
|40	|Battery detection setting not consistent in parallel systems
|41	|Bypass not allowed setting not consistent in parallel systems
|42	|Converter setting not consistent in parallel systems
|43	|High loss point for frequency in bypass mode not consistent in parallel systems
|44	|Low loss point for frequency in bypass mode not consistent in parallel systems
|45	|High loss point for voltage in bypass mode not consistent in parallel systems
|46	|Low loss point for voltage in bypass mode not consistent in parallel systems
|47	|High loss point for frequency in AC mode not consistent in parallel systems
|48	|Low loss point for frequency in AC mode not consistent in parallel systems
|49	|High loss point for voltage in AC mode not consistent in parallel systems
|50	|Low loss point for voltage in AC mode not consistent in parallel systems
|51	|Warning for locking in bypass mode after 3 consecutive overloads within 30 min
|52	|Warning for three-phase AC input current unbalance
|53	|Warning for a three-phase input current unbalance detected in battery mode
|54	|Warning for Inverter inter-current unbalance
|55	|Programmable outlets cut off pre-alarm
|56	|Warning for Battery replace
|57	|Abnormal warning on input phase angle
|58	|Warning!! Cover of maintain switch is open
|62	|EEPROM operation error
|====


AUTHORS
-------

* Daniele Pezzini <hyouko@gmail.com>
* Arnaud Quette <arnaud.quette@gmail.com>
* John Stamp <kinsayder@hotmail.com>
* Peter Selinger <selinger@users.sourceforge.net>
* Arjen de Korte <adkorte-guest@alioth.debian.org>
* Alexander Gordeev <lasaine@lvk.cs.msu.su>
* Edgar Fuß <ef@math.uni-bonn.de>


SEE ALSO
--------

linkman:blazer_ser[8],
linkman:blazer_usb[8],
linkman:nutupsdrv[8],
linkman:ups.conf[5],
linkman:upsc[8],
linkman:upscmd[8],
linkman:upsdrvctl[8],
linkman:upsmon[8],
linkman:upsrw[8]


Internet Resources:
~~~~~~~~~~~~~~~~~~~

* The NUT (Network UPS Tools) home page: https://www.networkupstools.org/
* The NUT HCL: https://www.networkupstools.org/stable-hcl.html
