From 340260e3aa7a75d49292c7c4a87221a2fb7dfade Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 11 Feb 2026 09:41:53 +0100 Subject: [PATCH 1/8] Introduce upsstats-modern-list.html.sample.in upsstats-modern-single.html.sample.in [#3316] Co-Authored-by: Author: jawz101 Signed-off-by: Jim Klimov --- NEWS.adoc | 4 +- conf/.gitignore | 2 + conf/Makefile.am | 4 +- conf/hosts.conf.sample | 8 + conf/upsstats-modern-list.html.sample.in | 175 ++++++++++++++++ conf/upsstats-modern-single.html.sample.in | 221 +++++++++++++++++++++ configure.ac | 2 + data/htmlcgi/header.html.in | 11 + docs/nut.dict | 17 +- 9 files changed, 440 insertions(+), 4 deletions(-) create mode 100644 conf/upsstats-modern-list.html.sample.in create mode 100644 conf/upsstats-modern-single.html.sample.in diff --git a/NEWS.adoc b/NEWS.adoc index e18dc2bc09..23b9f8f38d 100644 --- a/NEWS.adoc +++ b/NEWS.adoc @@ -344,7 +344,7 @@ several `FSD` notifications into one executed action. [PR #3097] - `upsset` should now recognize `RANGE NUMBER` and `NUMBER` types. [#3164] - - `upsstats` tool updates: + - `upsstats` CGI tool updates: * Now has JSON output mode via `?json` (or `&json`) CGI query parameter. New `@TREELINK_JSON@` keyword added and HTML templates updated to expose these JSON documents when browsing. [issue #2524, PRs #3171, #3249] @@ -357,7 +357,7 @@ several `FSD` notifications into one executed action. [PR #3097] [issue #3252, PR #3249] * (Experimental) Custom templates other than `upsstats{,-single}.html` can now be specified as CGI parameters, if locally permitted via `hosts.conf`. - [issue #2524, PR #3304] + Modern-looking templates were provided. [issues #2524, #3316, PR #3304] - `upssched` tool updates: * Previously in PR #2896 (NUT releases v2.8.3 and v2.8.4) the `UPSNAME` and diff --git a/conf/.gitignore b/conf/.gitignore index b65c1e01a2..fb8a2fe90d 100644 --- a/conf/.gitignore +++ b/conf/.gitignore @@ -2,3 +2,5 @@ /upssched.conf.sample /upsstats-single.html.sample /upsstats.html.sample +/upsstats-modern-single.html.sample +/upsstats-modern-list.html.sample diff --git a/conf/Makefile.am b/conf/Makefile.am index 0bd66744b7..a3f49f9a6a 100644 --- a/conf/Makefile.am +++ b/conf/Makefile.am @@ -11,7 +11,8 @@ SECFILES_GENERATED = upsmon.conf.sample PUBFILES_STATIC = nut.conf.sample PUBFILES_GENERATED = upssched.conf.sample CGIPUB_STATIC = hosts.conf.sample upsset.conf.sample -CGIPUB_GENERATED = upsstats.html.sample upsstats-single.html.sample +CGIPUB_GENERATED = upsstats.html.sample upsstats-single.html.sample \ + upsstats-modern-list.html.sample upsstats-modern-single.html.sample SECFILES = $(SECFILES_STATIC) $(SECFILES_GENERATED) @@ -31,6 +32,7 @@ nodist_conf_examples_DATA = $(SECFILES_GENERATED) $(PUBFILES_GENERATED) \ SPELLCHECK_SRC = $(dist_sysconf_DATA) \ upssched.conf.sample.in upsmon.conf.sample.in \ + upsstats-modern-list.html.sample.in upsstats-modern-single.html.sample.in \ upsstats.html.sample.in upsstats-single.html.sample.in # NOTE: Due to portability, we do not use a GNU percent-wildcard extension. diff --git a/conf/hosts.conf.sample b/conf/hosts.conf.sample index ef9fb8b525..3dec950898 100644 --- a/conf/hosts.conf.sample +++ b/conf/hosts.conf.sample @@ -51,6 +51,10 @@ # and contain `.htm` in the file name. # # CUSTOM_TEMPLATE_LIST +# +# Examples: +# +# CUSTOM_TEMPLATE_LIST "upsstats-modern-list.html" # ----------------------------------------------------------------------- # @@ -59,3 +63,7 @@ # configuration directory and contain `.htm` in the file name. # # CUSTOM_TEMPLATE_SINGLE +# +# Examples: +# +# CUSTOM_TEMPLATE_SINGLE "upsstats-modern-single.html" diff --git a/conf/upsstats-modern-list.html.sample.in b/conf/upsstats-modern-list.html.sample.in new file mode 100644 index 0000000000..a701f1d993 --- /dev/null +++ b/conf/upsstats-modern-list.html.sample.in @@ -0,0 +1,175 @@ +@NUT_UPSSTATS_TEMPLATE default@ + + + + + + +@TEMPC@ + + + +@UPSSTATSPATH upsstats.cgi@EXEEXT@@ +@UPSIMAGEPATH upsimage.cgi@EXEEXT@@ + + + + + + + + @REFRESH@ + Network UPS Tools: Overview + + + + +
+
+
+

Network UPS Tools

+
System Overview
+
+
@DATE %a %b %d %X %Z %Y@
+
+ +
+ + + + + + + + + + + + + + + + + @FOREACHUPS@ + + + + + + + + + + + + + + + + + + + @ENDFOR@ + +
SystemModelStatusBatteryInputOutputLoadTempRuntimeDetails
@VAR ups.model@@STATUS@@IFSUPP battery.charge@@VAR battery.charge@ %@ENDIF@ + @IFSUPP input.L2-L3.voltage@ + @VAR input.L1-L2.voltage@ V
@VAR input.L2-L3.voltage@ V
@VAR input.L3-L1.voltage@ V + @ELSE@ + @IFSUPP input.L2-N.voltage@ + @VAR input.L1-N.voltage@ V
@VAR input.L2-N.voltage@ V
@VAR input.L3-N.voltage@ V + @ELSE@ + @IFSUPP input.voltage@ + @VAR input.voltage@ V + @ENDIF@ +
+ @IFSUPP output.L2-L3.voltage@ + @VAR output.L1-L2.voltage@ V
@VAR output.L2-L3.voltage@ V
@VAR output.L3-L1.voltage@ V + @ELSE@ + @IFSUPP output.L2-N.voltage@ + @VAR output.L1-N.voltage@ V
@VAR output.L2-N.voltage@ V
@VAR output.L3-N.voltage@ V + @ELSE@ + @IFSUPP output.voltage@ + @VAR output.voltage@ V + @ENDIF@ +
+ @IFSUPP output.L2.power.percent@ + L1: @VAR output.L1.power.percent@%
L2: @VAR output.L2.power.percent@%
L3: @VAR output.L3.power.percent@% + @ELSE@ + @IFSUPP output.L2.realpower.percent@ + L1: @VAR output.L1.realpower.percent@%
L2: @VAR output.L2.realpower.percent@%
L3: @VAR output.L3.realpower.percent@% + @ELSE@ + @IFSUPP ups.load@ + @VAR ups.load@ % + @ENDIF@ +
+ @IFSUPP ups.temperature@ + @UPSTEMP@ @DEGREES@ + @ELSE@ + @IFSUPP battery.temperature@ + @BATTTEMP@ @DEGREES@ + @ENDIF@ + @IFSUPP battery.runtime@@RUNTIME@@ENDIF@
+ +
+ JSON + Valid CSS! + Valid HTML 4.01 Strict +
+ +
+
+ + diff --git a/conf/upsstats-modern-single.html.sample.in b/conf/upsstats-modern-single.html.sample.in new file mode 100644 index 0000000000..a0c786a663 --- /dev/null +++ b/conf/upsstats-modern-single.html.sample.in @@ -0,0 +1,221 @@ +@NUT_UPSSTATS_TEMPLATE single@ + + + + + + +@TEMPC@ + + + +@UPSSTATSPATH upsstats.cgi@EXEEXT@@ +@UPSIMAGEPATH upsimage.cgi@EXEEXT@@ + + + + + + + @REFRESH@ + @HOSTDESC@ : @VAR ups.model@ + + + + +
+
+

Network UPS Tools

@HOSTDESC@ - @VAR ups.model@
+
@DATE %a %b %d %X %Z %Y@
+
+ +
+ + +
+
+
Battery
+
+ @IFSUPP battery.charge@ +
+
+
+
Charge
+
+
@VAR battery.charge@ %
+
+
+
100
50
0
+
+
+ @ENDIF@ + @IFSUPP battery.voltage@ +
+
+
+
Voltage
+
+
@VAR battery.voltage@ V
+
+
+
30
20
10
+
+
+ @ENDIF@ +
+
+ +
+
Line Voltage
+
+ @IFSUPP input.voltage@ +
+
+
+
Input
+
+
@VAR input.voltage@ V
+
+
+ @ENDIF@ + @IFSUPP output.voltage@ +
+
+
+
Output
+
+
@VAR output.voltage@ V
+
+
+
160
110
60
+
+
+ @ENDIF@ +
+
+ +
+
Load
+
+ @IFSUPP ups.load@ +
+
+
+
@VAR ups.load@ %
+
+
+
100
50
0
+
+
+ @ENDIF@ +
+
+ + @IFSUPP ambient.temperature@ +
+
Environment
+
+
+
+
Temp
+
+
@VAR ambient.temperature@ °
+
+
+
50
0
+
+
+
+
+ @ENDIF@ +
+
+ +
@TREELINK_JSON Device data as JSON@ | @TREELINK Device data as HTML table@ + Valid CSS + Valid HTML 4.01 Strict
+ +
+ + + diff --git a/configure.ac b/configure.ac index da1730b8eb..f894b2b766 100644 --- a/configure.ac +++ b/configure.ac @@ -7069,6 +7069,8 @@ AC_CONFIG_FILES([ conf/upssched.conf.sample conf/upsstats.html.sample conf/upsstats-single.html.sample + conf/upsstats-modern-list.html.sample + conf/upsstats-modern-single.html.sample data/htmlcgi/header.html data/htmlcgi/Makefile data/Makefile diff --git a/data/htmlcgi/header.html.in b/data/htmlcgi/header.html.in index a1ab596bd0..496209c7b6 100644 --- a/data/htmlcgi/header.html.in +++ b/data/htmlcgi/header.html.in @@ -26,6 +26,17 @@ Network UPS Tools Statistics + + + Settings diff --git a/docs/nut.dict b/docs/nut.dict index bd547c6438..2daac39636 100644 --- a/docs/nut.dict +++ b/docs/nut.dict @@ -1,4 +1,4 @@ -personal_ws-1.1 en 3660 utf-8 +personal_ws-1.1 en 3675 utf-8 AAC AAS ABI @@ -1582,6 +1582,7 @@ addr addrange addvar addvars +ade adelsystem adkorte adm @@ -1719,6 +1720,7 @@ bcdDevice bcm bcmxcp bd +bdf belkin belkinunv bestfcom @@ -2110,11 +2112,13 @@ extradata faa fabula facto +fafc failmode failover fallthrough fasttrack fatalx +fbbf fc fcb fcntl @@ -2422,6 +2426,7 @@ ktrace kvm labcd lan +lang langid lasaine launchd @@ -2616,6 +2621,7 @@ middleware mincharge mingw minicol +minmax minruntime mins minva @@ -2755,6 +2761,7 @@ notransferoids novendor nowait nowarn +nowrap np nspr nss @@ -3042,6 +3049,7 @@ rex rexx rf rfc +rgba rh richcomm riello @@ -3320,6 +3328,7 @@ sysutils sysvinit tagname targetArchitecture +tbody tcflush tcgetattr tcl @@ -3345,6 +3354,7 @@ tgt tgtsize tgz th +thead timeframe timehead timername @@ -3365,6 +3375,8 @@ topFrame topbot tport transactional +translateX +translateY treemode tripplite tripplitesu @@ -3551,9 +3563,11 @@ verifySourceSig versa versioned versioning +vh victron victronups vid +viewport vin vio virsh @@ -3570,6 +3584,7 @@ vscode vsnprintf vsnprintfcat vt +vw wDescriptorLength waitbeforereconnect wakeup From 632464685e528b92b3ce98783f4ff101a16c177c Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 11 Feb 2026 12:04:37 +0100 Subject: [PATCH 2/8] conf/upsstats-modern-*.in: reduce kilobytage by dropping most of indentation [#3316] Should also help comparing with legacy templates and between these two. Signed-off-by: Jim Klimov --- conf/upsstats-modern-list.html.sample.in | 284 ++++++++-------- conf/upsstats-modern-single.html.sample.in | 370 ++++++++++----------- 2 files changed, 327 insertions(+), 327 deletions(-) diff --git a/conf/upsstats-modern-list.html.sample.in b/conf/upsstats-modern-list.html.sample.in index a701f1d993..a5bf619f62 100644 --- a/conf/upsstats-modern-list.html.sample.in +++ b/conf/upsstats-modern-list.html.sample.in @@ -22,154 +22,154 @@ - + - - - @REFRESH@ - Network UPS Tools: Overview - + + +@REFRESH@ +Network UPS Tools: Overview +
-
-
-

Network UPS Tools

-
System Overview
-
-
@DATE %a %b %d %X %Z %Y@
-
- -
- - - - - - - - - - - - - - - - - @FOREACHUPS@ - - - - - - - - - - - - - - - - - - - @ENDFOR@ - -
SystemModelStatusBatteryInputOutputLoadTempRuntimeDetails
@VAR ups.model@@STATUS@@IFSUPP battery.charge@@VAR battery.charge@ %@ENDIF@ - @IFSUPP input.L2-L3.voltage@ - @VAR input.L1-L2.voltage@ V
@VAR input.L2-L3.voltage@ V
@VAR input.L3-L1.voltage@ V - @ELSE@ - @IFSUPP input.L2-N.voltage@ - @VAR input.L1-N.voltage@ V
@VAR input.L2-N.voltage@ V
@VAR input.L3-N.voltage@ V - @ELSE@ - @IFSUPP input.voltage@ - @VAR input.voltage@ V - @ENDIF@ -
- @IFSUPP output.L2-L3.voltage@ - @VAR output.L1-L2.voltage@ V
@VAR output.L2-L3.voltage@ V
@VAR output.L3-L1.voltage@ V - @ELSE@ - @IFSUPP output.L2-N.voltage@ - @VAR output.L1-N.voltage@ V
@VAR output.L2-N.voltage@ V
@VAR output.L3-N.voltage@ V - @ELSE@ - @IFSUPP output.voltage@ - @VAR output.voltage@ V - @ENDIF@ -
- @IFSUPP output.L2.power.percent@ - L1: @VAR output.L1.power.percent@%
L2: @VAR output.L2.power.percent@%
L3: @VAR output.L3.power.percent@% - @ELSE@ - @IFSUPP output.L2.realpower.percent@ - L1: @VAR output.L1.realpower.percent@%
L2: @VAR output.L2.realpower.percent@%
L3: @VAR output.L3.realpower.percent@% - @ELSE@ - @IFSUPP ups.load@ - @VAR ups.load@ % - @ENDIF@ -
- @IFSUPP ups.temperature@ - @UPSTEMP@ @DEGREES@ - @ELSE@ - @IFSUPP battery.temperature@ - @BATTTEMP@ @DEGREES@ - @ENDIF@ - @IFSUPP battery.runtime@@RUNTIME@@ENDIF@
- -
- JSON - Valid CSS! - Valid HTML 4.01 Strict -
- -
+
+
+

Network UPS Tools

+
System Overview
+
+
@DATE %a %b %d %X %Z %Y@
+
+ +
+ + + + + + + + + + + + + + + + +@FOREACHUPS@ + + + + + + + + + + + + + + + + + + +@ENDFOR@ + +
SystemModelStatusBatteryInputOutputLoadTempRuntimeDetails
@VAR ups.model@@STATUS@@IFSUPP battery.charge@@VAR battery.charge@ %@ENDIF@ +@IFSUPP input.L2-L3.voltage@ +@VAR input.L1-L2.voltage@ V
@VAR input.L2-L3.voltage@ V
@VAR input.L3-L1.voltage@ V +@ELSE@ +@IFSUPP input.L2-N.voltage@ +@VAR input.L1-N.voltage@ V
@VAR input.L2-N.voltage@ V
@VAR input.L3-N.voltage@ V +@ELSE@ +@IFSUPP input.voltage@ +@VAR input.voltage@ V +@ENDIF@ +
+@IFSUPP output.L2-L3.voltage@ +@VAR output.L1-L2.voltage@ V
@VAR output.L2-L3.voltage@ V
@VAR output.L3-L1.voltage@ V +@ELSE@ +@IFSUPP output.L2-N.voltage@ +@VAR output.L1-N.voltage@ V
@VAR output.L2-N.voltage@ V
@VAR output.L3-N.voltage@ V +@ELSE@ +@IFSUPP output.voltage@ +@VAR output.voltage@ V +@ENDIF@ +
+@IFSUPP output.L2.power.percent@ +L1: @VAR output.L1.power.percent@%
L2: @VAR output.L2.power.percent@%
L3: @VAR output.L3.power.percent@% +@ELSE@ +@IFSUPP output.L2.realpower.percent@ +L1: @VAR output.L1.realpower.percent@%
L2: @VAR output.L2.realpower.percent@%
L3: @VAR output.L3.realpower.percent@% +@ELSE@ +@IFSUPP ups.load@ +@VAR ups.load@ % +@ENDIF@ +
+@IFSUPP ups.temperature@ +@UPSTEMP@ @DEGREES@ +@ELSE@ +@IFSUPP battery.temperature@ +@BATTTEMP@ @DEGREES@ +@ENDIF@ +@IFSUPP battery.runtime@@RUNTIME@@ENDIF@
+ +
+JSON +Valid CSS! +Valid HTML 4.01 Strict +
+ +
diff --git a/conf/upsstats-modern-single.html.sample.in b/conf/upsstats-modern-single.html.sample.in index a0c786a663..8c08add367 100644 --- a/conf/upsstats-modern-single.html.sample.in +++ b/conf/upsstats-modern-single.html.sample.in @@ -25,195 +25,195 @@ "http://www.w3.org/TR/html4/strict.dtd"> - - - @REFRESH@ - @HOSTDESC@ : @VAR ups.model@ - + + +@REFRESH@ +@HOSTDESC@ : @VAR ups.model@ +
-
-

Network UPS Tools

@HOSTDESC@ - @VAR ups.model@
-
@DATE %a %b %d %X %Z %Y@
-
- -
- - -
-
-
Battery
-
- @IFSUPP battery.charge@ -
-
-
-
Charge
-
-
@VAR battery.charge@ %
-
-
-
100
50
0
-
-
- @ENDIF@ - @IFSUPP battery.voltage@ -
-
-
-
Voltage
-
-
@VAR battery.voltage@ V
-
-
-
30
20
10
-
-
- @ENDIF@ -
-
- -
-
Line Voltage
-
- @IFSUPP input.voltage@ -
-
-
-
Input
-
-
@VAR input.voltage@ V
-
-
- @ENDIF@ - @IFSUPP output.voltage@ -
-
-
-
Output
-
-
@VAR output.voltage@ V
-
-
-
160
110
60
-
-
- @ENDIF@ -
-
- -
-
Load
-
- @IFSUPP ups.load@ -
-
-
-
@VAR ups.load@ %
-
-
-
100
50
0
-
-
- @ENDIF@ -
-
- - @IFSUPP ambient.temperature@ -
-
Environment
-
-
-
-
Temp
-
-
@VAR ambient.temperature@ °
-
-
-
50
0
-
-
-
-
- @ENDIF@ -
-
- -
@TREELINK_JSON Device data as JSON@ | @TREELINK Device data as HTML table@ - Valid CSS - Valid HTML 4.01 Strict
+
+

Network UPS Tools

@HOSTDESC@ - @VAR ups.model@
+
@DATE %a %b %d %X %Z %Y@
+
+ +
+ + +
+
+
Battery
+
+@IFSUPP battery.charge@ +
+
+
+
Charge
+
+
@VAR battery.charge@ %
+
+
+
100
50
0
+
+
+@ENDIF@ +@IFSUPP battery.voltage@ +
+
+
+
Voltage
+
+
@VAR battery.voltage@ V
+
+
+
30
20
10
+
+
+@ENDIF@ +
+
+ +
+
Line Voltage
+
+@IFSUPP input.voltage@ +
+
+
+
Input
+
+
@VAR input.voltage@ V
+
+
+@ENDIF@ +@IFSUPP output.voltage@ +
+
+
+
Output
+
+
@VAR output.voltage@ V
+
+
+
160
110
60
+
+
+@ENDIF@ +
+
+ +
+
Load
+
+@IFSUPP ups.load@ +
+
+
+
@VAR ups.load@ %
+
+
+
100
50
0
+
+
+@ENDIF@ +
+
+ +@IFSUPP ambient.temperature@ +
+
Environment
+
+
+
+
Temp
+
+
@VAR ambient.temperature@ °
+
+
+
50
0
+
+
+
+
+@ENDIF@ +
+
+ +
@TREELINK_JSON Device data as JSON@ | @TREELINK Device data as HTML table@ + +
From ad00bd73bb1f9b8ff87be61f731cd7b8ed27e7f5 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 11 Feb 2026 18:54:49 +0100 Subject: [PATCH 3/8] conf/upsstats-modern-*.in: align with legacy templates [#3316] Notably variations about three-phase inputs/outputs. Signed-off-by: Jim Klimov --- conf/upsstats-modern-list.html.sample.in | 89 +++++-- conf/upsstats-modern-single.html.sample.in | 295 +++++++++++++++++++-- docs/nut.dict | 4 +- 3 files changed, 346 insertions(+), 42 deletions(-) diff --git a/conf/upsstats-modern-list.html.sample.in b/conf/upsstats-modern-list.html.sample.in index a5bf619f62..7ae7c3b444 100644 --- a/conf/upsstats-modern-list.html.sample.in +++ b/conf/upsstats-modern-list.html.sample.in @@ -2,8 +2,8 @@ @@ -106,17 +108,46 @@ color: var(--bg); @FOREACHUPS@ @HOSTLINK@ -@VAR ups.model@ + + +@IFSUPP device.model@ +@VAR device.model@ +@ELSE@ +@VAR ups.model@ +@ENDIF@ + + @STATUS@ @IFSUPP battery.charge@@VAR battery.charge@ %@ENDIF@ +@IFSUPP input.L2-L3.voltage@ +@IFBETWEEN input.transfer.low input.transfer.high input.L1-L2.voltage@ +@IFBETWEEN input.transfer.low input.transfer.high input.L2-L3.voltage@ +@IFBETWEEN input.transfer.low input.transfer.high input.L3-L1.voltage@ + +@ELSE@ +@IFSUPP input.L2-N.voltage@ +@IFBETWEEN input.transfer.low input.transfer.high input.L1-N.voltage@ +@IFBETWEEN input.transfer.low input.transfer.high input.L2-N.voltage@ +@IFBETWEEN input.transfer.low input.transfer.high input.L3-N.voltage@ + +@ELSE@ +@IFBETWEEN input.transfer.low input.transfer.high input.voltage@ +@ELSE@ + +@ENDIF@ + @IFSUPP input.L2-L3.voltage@ -@VAR input.L1-L2.voltage@ V
@VAR input.L2-L3.voltage@ V
@VAR input.L3-L1.voltage@ V +L1-L2: @VAR input.L1-L2.voltage@ V
+L2-L3: @VAR input.L2-L3.voltage@ V
+L3-L1: @VAR input.L3-L1.voltage@ V @ELSE@ @IFSUPP input.L2-N.voltage@ -@VAR input.L1-N.voltage@ V
@VAR input.L2-N.voltage@ V
@VAR input.L3-N.voltage@ V +L1-N: @VAR input.L1-N.voltage@ V
+L2-N: @VAR input.L2-N.voltage@ V
+L3-N: @VAR input.L3-N.voltage@ V @ELSE@ @IFSUPP input.voltage@ @VAR input.voltage@ V @@ -125,10 +156,14 @@ color: var(--bg); @IFSUPP output.L2-L3.voltage@ -@VAR output.L1-L2.voltage@ V
@VAR output.L2-L3.voltage@ V
@VAR output.L3-L1.voltage@ V +L1-L2: @VAR output.L1-L2.voltage@ V
+L2-L3: @VAR output.L2-L3.voltage@ V
+L3-L1: @VAR output.L3-L1.voltage@ V @ELSE@ @IFSUPP output.L2-N.voltage@ -@VAR output.L1-N.voltage@ V
@VAR output.L2-N.voltage@ V
@VAR output.L3-N.voltage@ V +L1-N: @VAR output.L1-N.voltage@ V
+L2-N: @VAR output.L2-N.voltage@ V
+L3-N: @VAR output.L3-N.voltage@ V @ELSE@ @IFSUPP output.voltage@ @VAR output.voltage@ V @@ -137,10 +172,14 @@ color: var(--bg); @IFSUPP output.L2.power.percent@ -L1: @VAR output.L1.power.percent@%
L2: @VAR output.L2.power.percent@%
L3: @VAR output.L3.power.percent@% +L1: @VAR output.L1.power.percent@%
+L2: @VAR output.L2.power.percent@%
+L3: @VAR output.L3.power.percent@% @ELSE@ @IFSUPP output.L2.realpower.percent@ -L1: @VAR output.L1.realpower.percent@%
L2: @VAR output.L2.realpower.percent@%
L3: @VAR output.L3.realpower.percent@% +L1: @VAR output.L1.realpower.percent@%
+L2: @VAR output.L2.realpower.percent@%
+L3: @VAR output.L3.realpower.percent@% @ELSE@ @IFSUPP ups.load@ @VAR ups.load@ % @@ -157,7 +196,8 @@ L1: @VAR output.L1.realpower.percent@%
L2: @VAR output.L2.realpower.percent@% @IFSUPP battery.runtime@@RUNTIME@@ENDIF@ -@TREELINK@ + +@TREELINK@ @TREELINK_JSON@ @ENDFOR@ @@ -167,6 +207,7 @@ L1: @VAR output.L1.realpower.percent@%
L2: @VAR output.L2.realpower.percent@% JSON Valid CSS! Valid HTML 4.01 Strict +

Network UPS Tools upsstats @ESCAPED_TEMPLATE_VERSION@

diff --git a/conf/upsstats-modern-single.html.sample.in b/conf/upsstats-modern-single.html.sample.in index 8c08add367..7b3dc68beb 100644 --- a/conf/upsstats-modern-single.html.sample.in +++ b/conf/upsstats-modern-single.html.sample.in @@ -2,7 +2,7 @@
-

Network UPS Tools

@HOSTDESC@ - @VAR ups.model@
+
+

Network UPS Tools

+
@HOSTDESC@ - +@IFSUPP device.model@ +@VAR device.model@ +@ELSE@ +@VAR ups.model@ +@ENDIF@ +on @HOST@
+
@DATE %a %b %d %X %Z %Y@
@@ -124,6 +199,8 @@ h1 { margin: 0; font-size: 1.5rem; color: var(--green); }
@ENDIF@ + + @IFSUPP battery.voltage@
@@ -140,9 +217,59 @@ h1 { margin: 0; font-size: 1.5rem; color: var(--green); }
+
Line Voltage
+@IFSUPP input.L2-L3.voltage@ +
+
+ +
+
Input L1-L2
+
+
@VAR input.L1-L2.voltage@ V
+
+ +
+
Input L2-L3
+
+
@VAR input.L2-L3.voltage@ V
+
+ +
+
Input L3-L1
+
+
@VAR input.L3-L1.voltage@ V
+
+ +
+@ELSE@ +@IFSUPP input.L2-N.voltage@ + +
+
+ +
+
Input L1-N
+
+
@VAR input.L1-N.voltage@ V
+
+ +
+
Input L2-N
+
+
@VAR input.L2-N.voltage@ V
+
+ +
+
Input L3-N
+
+
@VAR input.L3-N.voltage@ V
+
+ +
+@ELSE@ @IFSUPP input.voltage@
@@ -153,6 +280,73 @@ h1 { margin: 0; font-size: 1.5rem; color: var(--green); }
@ENDIF@ + +@IFSUPP output.L2-L3.voltage@ +
+
+ +
+
Output L1-L2
+
+
@VAR output.L1-L2.voltage@ V
+
+
+
160
110
60
+
+ +
+
Output L2-L3
+
+
@VAR output.L2-L3.voltage@ V
+
+
+
160
110
60
+
+ +
+
Output L3-L1
+
+
@VAR output.L3-L1.voltage@ V
+
+
+
160
110
60
+
+ +
+@ELSE@ +@IFSUPP output.L2-N.voltage@ +
+
+ +
+
Output L1-N
+
+
@VAR output.L1-N.voltage@ V
+
+
+
160
110
60
+
+ +
+
Output L2-N
+
+
@VAR output.L2-N.voltage@ V
+
+
+
160
110
60
+
+ +
+
Output L3-N
+
+
@VAR output.L3-N.voltage@ V
+
+
+
160
110
60
+
+ +
+@ELSE@ @IFSUPP output.voltage@
@@ -172,6 +366,70 @@ h1 { margin: 0; font-size: 1.5rem; color: var(--green); }
Load
+@IFSUPP output.L2.power.percent@ +
+ +
+
Load L1
+
+
@VAR output.L1.power.percent@ %
+
+
+
100
50
0
+
+ +
+
Load L2
+
+
@VAR output.L2.power.percent@ %
+
+
+
100
50
0
+
+ +
+
Load L3
+
+
@VAR output.L3.power.percent@ %
+
+
+
100
50
0
+
+ +
+@ELSE@ +@IFSUPP output.L2.realpower.percent@ +
+ +
+
Load L1
+
+
@VAR output.L1.realpower.percent@ %
+
+
+
100
50
0
+
+ +
+
Load L2
+
+
@VAR output.L2.realpower.percent@ %
+
+
+
100
50
0
+
+ +
+
Load L3
+
+
@VAR output.L3.realpower.percent@ %
+
+
+
100
50
0
+
+ +
+@ELSE@ @IFSUPP ups.load@
@@ -188,6 +446,7 @@ h1 { margin: 0; font-size: 1.5rem; color: var(--green); } @IFSUPP ambient.temperature@
+
Environment
@@ -208,12 +467,14 @@ h1 { margin: 0; font-size: 1.5rem; color: var(--green); }
@TREELINK_JSON Device data as JSON@ | @TREELINK Device data as HTML table@ + style="float:right" src="https://jigsaw.w3.org/css-validator/images/vcss" + alt="Valid CSS" title="Valid CSS" height="31" width="88">
+ style="float:right" src="https://www.w3.org/Icons/valid-html401" + alt="Valid HTML 4.01 Strict" title="Valid HTML 4.01 Strict" + height="31" width="88"> +

Network UPS Tools upsstats @ESCAPED_TEMPLATE_VERSION@

+
diff --git a/docs/nut.dict b/docs/nut.dict index 2daac39636..4b085c21ae 100644 --- a/docs/nut.dict +++ b/docs/nut.dict @@ -1,4 +1,4 @@ -personal_ws-1.1 en 3675 utf-8 +personal_ws-1.1 en 3677 utf-8 AAC AAS ABI @@ -1222,6 +1222,7 @@ SRC SSD SSSS STARTTLS +STATUSCOLOR STB STDCALL STESTI @@ -2694,6 +2695,7 @@ natively nb nbproject nbr +nbsp nc nd nde From f24b9c75b88fcaffb1412a6b8459ed9372663bed Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 11 Feb 2026 19:06:34 +0100 Subject: [PATCH 4/8] conf/upsstats-modern-*.in: reconcile styles between two templates [#3316] Signed-off-by: Jim Klimov --- conf/upsstats-modern-list.html.sample.in | 13 +++++++++---- conf/upsstats-modern-single.html.sample.in | 5 +++-- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/conf/upsstats-modern-list.html.sample.in b/conf/upsstats-modern-list.html.sample.in index 7ae7c3b444..95e1d6dcb3 100644 --- a/conf/upsstats-modern-list.html.sample.in +++ b/conf/upsstats-modern-list.html.sample.in @@ -38,11 +38,11 @@ } * { box-sizing: border-box; } -body { background: var(--bg); color: var(--text); font-family: system-ui, sans-serif; padding: 4vh 5vw; margin: 0; display: flex; justify-content: center; } +body { background: var(--bg); color: var(--text); font-family: system-ui, sans-serif; padding: 4vh 4vw; margin: 0; display: flex; justify-content: center; } .dashboard { width: 100%; max-width: 1400px; display: flex; flex-direction: column; gap: 2rem; } header { border-bottom: 1px solid var(--border); padding-bottom: 1rem; display: flex; justify-content: space-between; align-items: flex-end; flex-wrap: wrap; gap: 1rem;} -h1 { margin: 0; font-size: 1.5rem; color: var(--text); } +h1 { margin: 0; font-size: 1.5rem; color: var(--green); } /* Modern Table Wrapper */ .table-container { background: var(--card); border: 1px solid var(--border); border-radius: 12px; padding: 0.5rem 1.5rem; overflow-x: auto; box-shadow: 0 4px 6px rgba(0,0,0,0.1); } @@ -205,8 +205,13 @@ L3: @VAR output.L3.realpower.percent@%
JSON -Valid CSS! -Valid HTML 4.01 Strict +Valid CSS +Valid HTML 4.01 Strict

Network UPS Tools upsstats @ESCAPED_TEMPLATE_VERSION@

diff --git a/conf/upsstats-modern-single.html.sample.in b/conf/upsstats-modern-single.html.sample.in index 7b3dc68beb..c58004fc02 100644 --- a/conf/upsstats-modern-single.html.sample.in +++ b/conf/upsstats-modern-single.html.sample.in @@ -465,7 +465,8 @@ on @HOST@
-
@TREELINK_JSON Device data as JSON@ | @TREELINK Device data as HTML table@ +

+@TREELINK_JSON Device data as JSON@ | @TREELINK Device data as HTML table@ Valid CSS @@ -474,7 +475,7 @@ on @HOST@
alt="Valid HTML 4.01 Strict" title="Valid HTML 4.01 Strict" height="31" width="88">

Network UPS Tools upsstats @ESCAPED_TEMPLATE_VERSION@

-
+
From 0d7db7ab955b11f9e604db5b7bb38618ad15d31e Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 11 Feb 2026 19:07:50 +0100 Subject: [PATCH 5/8] conf/upsstats-modern-single.html.sample.in: use spaces for separators between STATUS values (if many) [#3316] Signed-off-by: Jim Klimov --- conf/upsstats-modern-single.html.sample.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/conf/upsstats-modern-single.html.sample.in b/conf/upsstats-modern-single.html.sample.in index c58004fc02..4e9c53edea 100644 --- a/conf/upsstats-modern-single.html.sample.in +++ b/conf/upsstats-modern-single.html.sample.in @@ -107,7 +107,7 @@ on @HOST@
@ENDIF@
- + @IFSUPP battery.runtime@@ENDIF@ From 8338668e6dcbcf8f73605bccc82e25fd2b0c7df6 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Wed, 25 Feb 2026 16:48:14 +0100 Subject: [PATCH 6/8] clients/upsstats.c: introduce DEFAULT_TEMPLATE_SINGLE+DEFAULT_TEMPLATE_LIST macros for a single point of config [#3316] Signed-off-by: Jim Klimov --- clients/upsstats.c | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/clients/upsstats.c b/clients/upsstats.c index 04c74c70e5..c16a63b70c 100644 --- a/clients/upsstats.c +++ b/clients/upsstats.c @@ -67,6 +67,9 @@ static char *upsimgpath = "upsimage.cgi" EXEEXT, *upsstatpath = "upsstats.cgi" E *template_single = NULL, *template_list = NULL; static UPSCONN_t ups; +#define DEFAULT_TEMPLATE_SINGLE "upsstats-single.html" +#define DEFAULT_TEMPLATE_LIST "upsstats.html" + static FILE *tf; static long forofs = 0; @@ -546,11 +549,11 @@ static void do_hostlink(void) printf("sys); - if (template_single && strcmp(template_single, "upsstats-single.html")) { + if (template_single && strcmp(template_single, DEFAULT_TEMPLATE_SINGLE)) { printf("&template_single=%s", template_single); } - if (template_list && strcmp(template_list, "upsstats.html")) { + if (template_list && strcmp(template_list, DEFAULT_TEMPLATE_LIST)) { printf("&template_list=%s", template_list); } @@ -574,11 +577,11 @@ static void do_treelink_json(const char *text) printf("sys); - if (template_single && strcmp(template_single, "upsstats-single.html")) { + if (template_single && strcmp(template_single, DEFAULT_TEMPLATE_SINGLE)) { printf("&template_single=%s", template_single); } - if (template_list && strcmp(template_list, "upsstats.html")) { + if (template_list && strcmp(template_list, DEFAULT_TEMPLATE_LIST)) { printf("&template_list=%s", template_list); } @@ -604,11 +607,11 @@ static void do_treelink(const char *text) printf("sys); - if (template_single && strcmp(template_single, "upsstats-single.html")) { + if (template_single && strcmp(template_single, DEFAULT_TEMPLATE_SINGLE)) { printf("&template_single=%s", template_single); } - if (template_list && strcmp(template_list, "upsstats.html")) { + if (template_list && strcmp(template_list, DEFAULT_TEMPLATE_LIST)) { printf("&template_list=%s", template_list); } @@ -1720,8 +1723,8 @@ int main(int argc, char **argv) } /* Built-in defaults */ - template_single = xstrdup("upsstats-single.html"); - template_list = xstrdup("upsstats.html"); + template_single = xstrdup(DEFAULT_TEMPLATE_SINGLE); + template_list = xstrdup(DEFAULT_TEMPLATE_LIST); extractcgiargs(); @@ -1762,8 +1765,8 @@ int main(int argc, char **argv) /* if a host is specified, use upsstats-single.html instead * of listing whatever we know about with upsstats.html */ - add_allowed_template_single("upsstats-single.html"); - add_allowed_template_list("upsstats.html"); + add_allowed_template_single(DEFAULT_TEMPLATE_SINGLE); + add_allowed_template_list(DEFAULT_TEMPLATE_LIST); if (monhost) { load_hosts_conf(0); display_single(); From e8b6949eb98b196c664fcc1bab450ac1c5ba8cc3 Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Mon, 2 Mar 2026 10:19:44 +0100 Subject: [PATCH 7/8] clients/upsstats.c, docs/man/upsstats.html.txt: add support for @IFEQ upsstats.use_celsius (0|1)@ [#3318] Signed-off-by: Jim Klimov --- clients/upsstats.c | 7 +++++++ docs/man/upsstats.html.txt | 3 +++ 2 files changed, 10 insertions(+) diff --git a/clients/upsstats.c b/clients/upsstats.c index c16a63b70c..d630769c8c 100644 --- a/clients/upsstats.c +++ b/clients/upsstats.c @@ -633,6 +633,13 @@ static void do_ifsupp(const char *var, const char *val) upsdebug_call_starting3("for '%s' ( =? '%s')", NUT_STRARG(var), NUT_STRARG(val)); + if (!strcmp(var, "upsstats.use_celsius")) { + snprintf(dummy, sizeof(dummy), "%d", use_celsius); + skip_clause = 1; + upsdebug_call_finished1(": get_var() returned unexpected val"); + return; + } + /* if not connected, act like it's not supported and skip the rest */ if (!check_ups_fd(0)) { skip_clause = 1; diff --git a/docs/man/upsstats.html.txt b/docs/man/upsstats.html.txt index e41aa4a948..fb02942a79 100644 --- a/docs/man/upsstats.html.txt +++ b/docs/man/upsstats.html.txt @@ -73,6 +73,9 @@ supported" messages by avoiding the label and variable call entirely. *@IFEQ* 'var' 'value'*@*:: Starts a block if the value returned from the variable 'var' matches 'value'. ++ +NOTE: You can use `@IFEQ upsstats.use_celsius (0|1)@` to check for the +current setting of *@TEMPC@* or *@TEMPF@* toggle. *@IFBETWEEN* 'varlow' 'varhigh' 'varvalue'*@*:: Starts a block if the value returned by the variable 'varvalue' is between From 5471f93353c4bfd9462abb783e41134bb44fe5dc Mon Sep 17 00:00:00 2001 From: Jim Klimov Date: Mon, 2 Mar 2026 10:20:38 +0100 Subject: [PATCH 8/8] conf/upsstats-modern-single.html.sample.in, docs/nut.dict: complete the CSS/JS graph auto-adjustment to voltage/temperature scales [#3318] Signed-off-by: Jim Klimov --- conf/upsstats-modern-single.html.sample.in | 627 ++++++++++++++++++++- docs/nut.dict | 12 +- 2 files changed, 609 insertions(+), 30 deletions(-) diff --git a/conf/upsstats-modern-single.html.sample.in b/conf/upsstats-modern-single.html.sample.in index 4e9c53edea..54261e89e3 100644 --- a/conf/upsstats-modern-single.html.sample.in +++ b/conf/upsstats-modern-single.html.sample.in @@ -36,6 +36,538 @@ --bg: #0f172a; --card: #1e293b; --text: #f8fafc; --dim: #94a3b8; --green: #4ade80; --border: #334155; --accent: #38bdf8; --warn: #fbbf24; --crit: #ef4444; + +@IFEQ upsstats.use_celsius 1@ + --x-nut-temperature-mode: "default-C"; + --x-nut-temperature-nominal: 30; + --x-nut-temperature-graphmin: 0; + --x-nut-temperature-graphmax: 65; +@ELSE@ + --x-nut-temperature-mode: "default-F"; + --x-nut-temperature-nominal: 86; + --x-nut-temperature-graphmin: 32; + --x-nut-temperature-graphmax: 150; +@ENDIF@ + +@IFSUPP battery.voltage.nominal@ + --x-nut-battery-voltage-mode: "nominal"; + --x-nut-battery-voltage-nominal: @VAR battery.voltage.nominal@; + --x-nut-battery-voltage-graphmin: round(down, calc(var(--x-nut-battery-voltage-nominal) * 0.8), 0.1); + --x-nut-battery-voltage-graphmax: round(up, calc(var(--x-nut-battery-voltage-nominal) * 1.2), 0.1); + +@ELSE@ + +@IFSUPP battery.voltage@ +@IFBETWEEN 0 1.75 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-0-1.75-AAA"; + --x-nut-battery-voltage-nominal: 1.5; + --x-nut-battery-voltage-graphmin: 0; + --x-nut-battery-voltage-graphmax: 3; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 1.75 2.3 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-1.75-2.3-PbAc-#1"; + --x-nut-battery-voltage-nominal: 2.0; + --x-nut-battery-voltage-graphmin: 0; + --x-nut-battery-voltage-graphmax: 3; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 2.3 3.8 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-2.3-3.8-CR2032"; + --x-nut-battery-voltage-nominal: 3.0; + --x-nut-battery-voltage-graphmin: 0; + --x-nut-battery-voltage-graphmax: 5; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 3.8 5.5 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-3.8-5.5-Li"; + --x-nut-battery-voltage-nominal: 4.2; + --x-nut-battery-voltage-graphmin: 0; + --x-nut-battery-voltage-graphmax: 7; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 5.5 9.9 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-5.5-9.9-D"; + --x-nut-battery-voltage-nominal: 9.0; + --x-nut-battery-voltage-graphmin: 0; + --x-nut-battery-voltage-graphmax: 12; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 9.9 18 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-9.9-18.0-PbAc#6"; + --x-nut-battery-voltage-nominal: 12.0; + --x-nut-battery-voltage-graphmin: 9; + --x-nut-battery-voltage-graphmax: 18; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 18 30 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-18-30-PbAc#12"; + --x-nut-battery-voltage-nominal: 24.0; + --x-nut-battery-voltage-graphmin: 18; + --x-nut-battery-voltage-graphmax: 30; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 30 42 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-18-30-PbAc#18"; + --x-nut-battery-voltage-nominal: 36.0; + --x-nut-battery-voltage-graphmin: 30; + --x-nut-battery-voltage-graphmax: 42; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 42 54 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-18-30-PbAc#24"; + --x-nut-battery-voltage-nominal: 48.0; + --x-nut-battery-voltage-graphmin: 42; + --x-nut-battery-voltage-graphmax: 54; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 54 66 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-18-30-PbAc#30"; + --x-nut-battery-voltage-nominal: 60.0; + --x-nut-battery-voltage-graphmin: 54; + --x-nut-battery-voltage-graphmax: 66; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 66 78 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-18-30-PbAc#36"; + --x-nut-battery-voltage-nominal: 72.0; + --x-nut-battery-voltage-graphmin: 66; + --x-nut-battery-voltage-graphmax: 78; +@ELSE@ +@IFSUPP battery.voltage@ +@IFBETWEEN 78 90 battery.voltage@ + --x-nut-battery-voltage-mode: "battery-18-30-PbAc#42"; + --x-nut-battery-voltage-nominal: 84.0; + --x-nut-battery-voltage-graphmin: 78; + --x-nut-battery-voltage-graphmax: 90; +@ELSE@ + --x-nut-battery-voltage-mode: "battery-default"; + --x-nut-battery-voltage-nominal: 12; + --x-nut-battery-voltage-graphmin: 0; + --x-nut-battery-voltage-graphmax: 100; +@ENDIF@ + +@IFSUPP input.L2-L3.voltage@ +@IFBETWEEN 90 160 input.L2-L3.voltage@ + --x-nut-input-L2-L3-voltage-nominal: 120; + --x-nut-input-L2-L3-voltage-graphmin: 90; + --x-nut-input-L2-L3-voltage-graphmax: 160; +@ELSE@ +@IFSUPP input.L2-L3.voltage@ +@IFBETWEEN 160 280 input.L2-L3.voltage@ + --x-nut-input-L2-L3-voltage-nominal: 240; + --x-nut-input-L2-L3-voltage-graphmin: 160; + --x-nut-input-L2-L3-voltage-graphmax: 280; +@ELSE@ +@IFSUPP input.L2-L3.voltage@ +@IFBETWEEN 280 500 input.L2-L3.voltage@ + --x-nut-input-L2-L3-voltage-nominal: 400; + --x-nut-input-L2-L3-voltage-graphmin: 280; + --x-nut-input-L2-L3-voltage-graphmax: 500; +@ELSE@ + --x-nut-input-L2-L3-voltage-nominal: 240; + --x-nut-input-L2-L3-voltage-graphmin: 0; + --x-nut-input-L2-L3-voltage-graphmax: 500; +@ENDIF@ + +@IFSUPP input.L1-L2.voltage@ +@IFBETWEEN 90 160 input.L1-L2.voltage@ + --x-nut-input-L1-L2-voltage-nominal: 120; + --x-nut-input-L1-L2-voltage-graphmin: 90; + --x-nut-input-L1-L2-voltage-graphmax: 160; +@ELSE@ +@IFSUPP input.L1-L2.voltage@ +@IFBETWEEN 160 280 input.L1-L2.voltage@ + --x-nut-input-L1-L2-voltage-nominal: 240; + --x-nut-input-L1-L2-voltage-graphmin: 160; + --x-nut-input-L1-L2-voltage-graphmax: 280; +@ELSE@ +@IFSUPP input.L1-L2.voltage@ +@IFBETWEEN 280 500 input.L1-L2.voltage@ + --x-nut-input-L1-L2-voltage-nominal: 400; + --x-nut-input-L1-L2-voltage-graphmin: 280; + --x-nut-input-L1-L2-voltage-graphmax: 500; +@ELSE@ +@IFSUPP input.L1-L2.voltage@ + --x-nut-input-L1-L2-voltage-nominal: 240; + --x-nut-input-L1-L2-voltage-graphmin: 0; + --x-nut-input-L1-L2-voltage-graphmax: 500; +@ELSE@ + --x-nut-input-L1-L2-voltage-nominal: var(--x-nut-input-L2-L3-voltage-nominal); + --x-nut-input-L1-L2-voltage-graphmin: var(--x-nut-input-L2-L3-voltage-graphmin); + --x-nut-input-L1-L2-voltage-graphmax: var(--x-nut-input-L2-L3-voltage-graphmax); +@ENDIF@ + +@IFSUPP input.L3-L1.voltage@ +@IFBETWEEN 90 160 input.L3-L1.voltage@ + --x-nut-input-L3-L1-voltage-nominal: 120; + --x-nut-input-L3-L1-voltage-graphmin: 90; + --x-nut-input-L3-L1-voltage-graphmax: 160; +@ELSE@ +@IFSUPP input.L3-L1.voltage@ +@IFBETWEEN 160 280 input.L3-L1.voltage@ + --x-nut-input-L3-L1-voltage-nominal: 240; + --x-nut-input-L3-L1-voltage-graphmin: 160; + --x-nut-input-L3-L1-voltage-graphmax: 280; +@ELSE@ +@IFSUPP input.L3-L1.voltage@ +@IFBETWEEN 280 500 input.L3-L1.voltage@ + --x-nut-input-L3-L1-voltage-nominal: 400; + --x-nut-input-L3-L1-voltage-graphmin: 280; + --x-nut-input-L3-L1-voltage-graphmax: 500; +@ELSE@ +@IFSUPP input.L3-L1.voltage@ + --x-nut-input-L3-L1-voltage-nominal: 240; + --x-nut-input-L3-L1-voltage-graphmin: 0; + --x-nut-input-L3-L1-voltage-graphmax: 500; +@ELSE@ + --x-nut-input-L3-L1-voltage-nominal: var(--x-nut-input-L2-L3-voltage-nominal); + --x-nut-input-L3-L1-voltage-graphmin: var(--x-nut-input-L2-L3-voltage-graphmin); + --x-nut-input-L3-L1-voltage-graphmax: var(--x-nut-input-L2-L3-voltage-graphmax); +@ENDIF@ + + +@IFSUPP input.L2-N.voltage@ +@IFBETWEEN 90 160 input.L2-N.voltage@ + --x-nut-input-L2-N-voltage-nominal: 120; + --x-nut-input-L2-N-voltage-graphmin: 90; + --x-nut-input-L2-N-voltage-graphmax: 160; +@ELSE@ +@IFSUPP input.L2-N.voltage@ +@IFBETWEEN 160 280 input.L2-N.voltage@ + --x-nut-input-L2-N-voltage-nominal: 240; + --x-nut-input-L2-N-voltage-graphmin: 160; + --x-nut-input-L2-N-voltage-graphmax: 280; +@ELSE@ +@IFSUPP input.L2-N.voltage@ +@IFBETWEEN 280 500 input.L2-N.voltage@ + --x-nut-input-L2-N-voltage-nominal: 400; + --x-nut-input-L2-N-voltage-graphmin: 280; + --x-nut-input-L2-N-voltage-graphmax: 500; +@ELSE@ + --x-nut-input-L2-N-voltage-nominal: 240; + --x-nut-input-L2-N-voltage-graphmin: 0; + --x-nut-input-L2-N-voltage-graphmax: 500; +@ENDIF@ + +@IFSUPP input.L1-N.voltage@ +@IFBETWEEN 90 160 input.L1-N.voltage@ + --x-nut-input-L1-N-voltage-nominal: 120; + --x-nut-input-L1-N-voltage-graphmin: 90; + --x-nut-input-L1-N-voltage-graphmax: 160; +@ELSE@ +@IFSUPP input.L1-N.voltage@ +@IFBETWEEN 160 280 input.L1-N.voltage@ + --x-nut-input-L1-N-voltage-nominal: 240; + --x-nut-input-L1-N-voltage-graphmin: 160; + --x-nut-input-L1-N-voltage-graphmax: 280; +@ELSE@ +@IFSUPP input.L1-N.voltage@ +@IFBETWEEN 280 500 input.L1-N.voltage@ + --x-nut-input-L1-N-voltage-nominal: 400; + --x-nut-input-L1-N-voltage-graphmin: 280; + --x-nut-input-L1-N-voltage-graphmax: 500; +@ELSE@ +@IFSUPP input.L1-N.voltage@ + --x-nut-input-L1-N-voltage-nominal: 240; + --x-nut-input-L1-N-voltage-graphmin: 0; + --x-nut-input-L1-N-voltage-graphmax: 500; +@ELSE@ + --x-nut-input-L1-N-voltage-nominal: var(--x-nut-input-L2-N-voltage-nominal); + --x-nut-input-L1-N-voltage-graphmin: var(--x-nut-input-L2-N-voltage-graphmin); + --x-nut-input-L1-N-voltage-graphmax: var(--x-nut-input-L2-N-voltage-graphmax); +@ENDIF@ + +@IFSUPP input.L3-N.voltage@ +@IFBETWEEN 90 160 input.L3-N.voltage@ + --x-nut-input-L3-N-voltage-nominal: 120; + --x-nut-input-L3-N-voltage-graphmin: 90; + --x-nut-input-L3-N-voltage-graphmax: 160; +@ELSE@ +@IFSUPP input.L3-N.voltage@ +@IFBETWEEN 160 280 input.L3-N.voltage@ + --x-nut-input-L3-N-voltage-nominal: 240; + --x-nut-input-L3-N-voltage-graphmin: 160; + --x-nut-input-L3-N-voltage-graphmax: 280; +@ELSE@ +@IFSUPP input.L3-N.voltage@ +@IFBETWEEN 280 500 input.L3-N.voltage@ + --x-nut-input-L3-N-voltage-nominal: 400; + --x-nut-input-L3-N-voltage-graphmin: 280; + --x-nut-input-L3-N-voltage-graphmax: 500; +@ELSE@ +@IFSUPP input.L3-N.voltage@ + --x-nut-input-L3-N-voltage-nominal: 240; + --x-nut-input-L3-N-voltage-graphmin: 0; + --x-nut-input-L3-N-voltage-graphmax: 500; +@ELSE@ + --x-nut-input-L3-N-voltage-nominal: var(--x-nut-input-L2-N-voltage-nominal); + --x-nut-input-L3-N-voltage-graphmin: var(--x-nut-input-L2-N-voltage-graphmin); + --x-nut-input-L3-N-voltage-graphmax: var(--x-nut-input-L2-N-voltage-graphmax); +@ENDIF@ + + +@IFSUPP input.L2-L3.voltage@ + --x-nut-input-voltage-mode: "L2-L3"; + --x-nut-input-voltage-nominal: calc( (var(--x-nut-input-L3-L1-voltage-nominal) + var(--x-nut-input-L2-L3-voltage-nominal) + var(--x-nut-input-L1-L2-voltage-nominal)) / 3); + --x-nut-input-voltage-graphmin: min(var(--x-nut-input-L3-L1-voltage-graphmin), var(--x-nut-input-L2-L3-voltage-graphmin), var(--x-nut-input-L1-L2-voltage-graphmin)); + --x-nut-input-voltage-graphmax: max(var(--x-nut-input-L3-L1-voltage-graphmax), var(--x-nut-input-L2-L3-voltage-graphmax), var(--x-nut-input-L1-L2-voltage-graphmax)); + +@ELSE@ + +@IFSUPP input.L2-N.voltage@ + --x-nut-input-voltage-mode: "L2-N"; + --x-nut-input-voltage-nominal: calc( (var(--x-nut-input-L3-N-voltage-nominal) + var(--x-nut-input-L2-N-voltage-nominal) + var(--x-nut-input-L1-N-voltage-nominal)) / 3); + --x-nut-input-voltage-graphmin: min(var(--x-nut-input-L3-N-voltage-graphmin), var(--x-nut-input-L2-N-voltage-graphmin), var(--x-nut-input-L1-N-voltage-graphmin)); + --x-nut-input-voltage-graphmax: max(var(--x-nut-input-L3-N-voltage-graphmax), var(--x-nut-input-L2-N-voltage-graphmax), var(--x-nut-input-L1-N-voltage-graphmax)); + +@ELSE@ + +@IFSUPP input.voltage.nominal@ + --x-nut-input-voltage-mode: "nominal"; + --x-nut-input-voltage-nominal: @VAR input.voltage.nominal@; + --x-nut-input-voltage-graphmin: round(down, calc(var(--x-nut-input-voltage-nominal) * 0.8), 10); + --x-nut-input-voltage-graphmax: round(up, calc(var(--x-nut-input-voltage-nominal) * 1.2), 10); + +@ELSE@ + +@IFSUPP input.voltage@ +@IFBETWEEN 90 160 input.voltage@ + --x-nut-input-voltage-mode: "input-90-160"; + --x-nut-input-voltage-nominal: 120; + --x-nut-input-voltage-graphmin: 90; + --x-nut-input-voltage-graphmax: 160; +@ELSE@ +@IFSUPP input.voltage@ +@IFBETWEEN 160 280 input.voltage@ + --x-nut-input-voltage-mode: "input-160-280"; + --x-nut-input-voltage-nominal: 240; + --x-nut-input-voltage-graphmin: 160; + --x-nut-input-voltage-graphmax: 280; +@ELSE@ +@IFSUPP input.voltage@ +@IFBETWEEN 280 500 input.voltage@ + --x-nut-input-voltage-mode: "input-280-500"; + --x-nut-input-voltage-nominal: 400; + --x-nut-input-voltage-graphmin: 280; + --x-nut-input-voltage-graphmax: 500; +@ELSE@ + --x-nut-input-voltage-mode: "input-default"; + --x-nut-input-voltage-nominal: 240; + --x-nut-input-voltage-graphmin: 0; + --x-nut-input-voltage-graphmax: 500; +@ENDIF@ + + +@IFSUPP output.L2-L3.voltage@ +@IFBETWEEN 90 160 output.L2-L3.voltage@ + --x-nut-output-L2-L3-voltage-nominal: 120; + --x-nut-output-L2-L3-voltage-graphmin: 90; + --x-nut-output-L2-L3-voltage-graphmax: 160; +@ELSE@ +@IFSUPP output.L2-L3.voltage@ +@IFBETWEEN 160 280 output.L2-L3.voltage@ + --x-nut-output-L2-L3-voltage-nominal: 240; + --x-nut-output-L2-L3-voltage-graphmin: 160; + --x-nut-output-L2-L3-voltage-graphmax: 280; +@ELSE@ +@IFSUPP output.L2-L3.voltage@ +@IFBETWEEN 280 500 output.L2-L3.voltage@ + --x-nut-output-L2-L3-voltage-nominal: 400; + --x-nut-output-L2-L3-voltage-graphmin: 280; + --x-nut-output-L2-L3-voltage-graphmax: 500; +@ELSE@ + --x-nut-output-L2-L3-voltage-nominal: 240; + --x-nut-output-L2-L3-voltage-graphmin: 0; + --x-nut-output-L2-L3-voltage-graphmax: 500; +@ENDIF@ + +@IFSUPP output.L1-L2.voltage@ +@IFBETWEEN 90 160 output.L1-L2.voltage@ + --x-nut-output-L1-L2-voltage-nominal: 120; + --x-nut-output-L1-L2-voltage-graphmin: 90; + --x-nut-output-L1-L2-voltage-graphmax: 160; +@ELSE@ +@IFSUPP output.L1-L2.voltage@ +@IFBETWEEN 160 280 output.L1-L2.voltage@ + --x-nut-output-L1-L2-voltage-nominal: 240; + --x-nut-output-L1-L2-voltage-graphmin: 160; + --x-nut-output-L1-L2-voltage-graphmax: 280; +@ELSE@ +@IFSUPP output.L1-L2.voltage@ +@IFBETWEEN 280 500 output.L1-L2.voltage@ + --x-nut-output-L1-L2-voltage-nominal: 400; + --x-nut-output-L1-L2-voltage-graphmin: 280; + --x-nut-output-L1-L2-voltage-graphmax: 500; +@ELSE@ +@IFSUPP output.L1-L2.voltage@ + --x-nut-output-L1-L2-voltage-nominal: 240; + --x-nut-output-L1-L2-voltage-graphmin: 0; + --x-nut-output-L1-L2-voltage-graphmax: 500; +@ELSE@ + --x-nut-output-L1-L2-voltage-nominal: var(--x-nut-output-L2-L3-voltage-nominal); + --x-nut-output-L1-L2-voltage-graphmin: var(--x-nut-output-L2-L3-voltage-graphmin); + --x-nut-output-L1-L2-voltage-graphmax: var(--x-nut-output-L2-L3-voltage-graphmax); +@ENDIF@ + +@IFSUPP output.L3-L1.voltage@ +@IFBETWEEN 90 160 output.L3-L1.voltage@ + --x-nut-output-L3-L1-voltage-nominal: 120; + --x-nut-output-L3-L1-voltage-graphmin: 90; + --x-nut-output-L3-L1-voltage-graphmax: 160; +@ELSE@ +@IFSUPP output.L3-L1.voltage@ +@IFBETWEEN 160 280 output.L3-L1.voltage@ + --x-nut-output-L3-L1-voltage-nominal: 240; + --x-nut-output-L3-L1-voltage-graphmin: 160; + --x-nut-output-L3-L1-voltage-graphmax: 280; +@ELSE@ +@IFSUPP output.L3-L1.voltage@ +@IFBETWEEN 280 500 output.L3-L1.voltage@ + --x-nut-output-L3-L1-voltage-nominal: 400; + --x-nut-output-L3-L1-voltage-graphmin: 280; + --x-nut-output-L3-L1-voltage-graphmax: 500; +@ELSE@ +@IFSUPP output.L3-L1.voltage@ + --x-nut-output-L3-L1-voltage-nominal: 240; + --x-nut-output-L3-L1-voltage-graphmin: 0; + --x-nut-output-L3-L1-voltage-graphmax: 500; +@ELSE@ + --x-nut-output-L3-L1-voltage-nominal: var(--x-nut-output-L2-L3-voltage-nominal); + --x-nut-output-L3-L1-voltage-graphmin: var(--x-nut-output-L2-L3-voltage-graphmin); + --x-nut-output-L3-L1-voltage-graphmax: var(--x-nut-output-L2-L3-voltage-graphmax); +@ENDIF@ + + +@IFSUPP output.L2-N.voltage@ +@IFBETWEEN 90 160 output.L2-N.voltage@ + --x-nut-output-L2-N-voltage-nominal: 120; + --x-nut-output-L2-N-voltage-graphmin: 90; + --x-nut-output-L2-N-voltage-graphmax: 160; +@ELSE@ +@IFSUPP output.L2-N.voltage@ +@IFBETWEEN 160 280 output.L2-N.voltage@ + --x-nut-output-L2-N-voltage-nominal: 240; + --x-nut-output-L2-N-voltage-graphmin: 160; + --x-nut-output-L2-N-voltage-graphmax: 280; +@ELSE@ +@IFSUPP output.L2-N.voltage@ +@IFBETWEEN 280 500 output.L2-N.voltage@ + --x-nut-output-L2-N-voltage-nominal: 400; + --x-nut-output-L2-N-voltage-graphmin: 280; + --x-nut-output-L2-N-voltage-graphmax: 500; +@ELSE@ + --x-nut-output-L2-N-voltage-nominal: 240; + --x-nut-output-L2-N-voltage-graphmin: 0; + --x-nut-output-L2-N-voltage-graphmax: 500; +@ENDIF@ + +@IFSUPP output.L1-N.voltage@ +@IFBETWEEN 90 160 output.L1-N.voltage@ + --x-nut-output-L1-N-voltage-nominal: 120; + --x-nut-output-L1-N-voltage-graphmin: 90; + --x-nut-output-L1-N-voltage-graphmax: 160; +@ELSE@ +@IFSUPP output.L1-N.voltage@ +@IFBETWEEN 160 280 output.L1-N.voltage@ + --x-nut-output-L1-N-voltage-nominal: 240; + --x-nut-output-L1-N-voltage-graphmin: 160; + --x-nut-output-L1-N-voltage-graphmax: 280; +@ELSE@ +@IFSUPP output.L1-N.voltage@ +@IFBETWEEN 280 500 output.L1-N.voltage@ + --x-nut-output-L1-N-voltage-nominal: 400; + --x-nut-output-L1-N-voltage-graphmin: 280; + --x-nut-output-L1-N-voltage-graphmax: 500; +@ELSE@ +@IFSUPP output.L1-N.voltage@ + --x-nut-output-L1-N-voltage-nominal: 240; + --x-nut-output-L1-N-voltage-graphmin: 0; + --x-nut-output-L1-N-voltage-graphmax: 500; +@ELSE@ + --x-nut-output-L1-N-voltage-nominal: var(--x-nut-output-L2-N-voltage-nominal); + --x-nut-output-L1-N-voltage-graphmin: var(--x-nut-output-L2-N-voltage-graphmin); + --x-nut-output-L1-N-voltage-graphmax: var(--x-nut-output-L2-N-voltage-graphmax); +@ENDIF@ + +@IFSUPP output.L3-N.voltage@ +@IFBETWEEN 90 160 output.L3-N.voltage@ + --x-nut-output-L3-N-voltage-nominal: 120; + --x-nut-output-L3-N-voltage-graphmin: 90; + --x-nut-output-L3-N-voltage-graphmax: 160; +@ELSE@ +@IFSUPP output.L3-N.voltage@ +@IFBETWEEN 160 280 output.L3-N.voltage@ + --x-nut-output-L3-N-voltage-nominal: 240; + --x-nut-output-L3-N-voltage-graphmin: 160; + --x-nut-output-L3-N-voltage-graphmax: 280; +@ELSE@ +@IFSUPP output.L3-N.voltage@ +@IFBETWEEN 280 500 output.L3-N.voltage@ + --x-nut-output-L3-N-voltage-nominal: 400; + --x-nut-output-L3-N-voltage-graphmin: 280; + --x-nut-output-L3-N-voltage-graphmax: 500; +@ELSE@ +@IFSUPP output.L3-N.voltage@ + --x-nut-output-L3-N-voltage-nominal: 240; + --x-nut-output-L3-N-voltage-graphmin: 0; + --x-nut-output-L3-N-voltage-graphmax: 500; +@ELSE@ + --x-nut-output-L3-N-voltage-nominal: var(--x-nut-output-L2-N-voltage-nominal); + --x-nut-output-L3-N-voltage-graphmin: var(--x-nut-output-L2-N-voltage-graphmin); + --x-nut-output-L3-N-voltage-graphmax: var(--x-nut-output-L2-N-voltage-graphmax); +@ENDIF@ + + +@IFSUPP output.L2-L3.voltage@ + --x-nut-output-voltage-mode: "L2-L3"; + --x-nut-output-voltage-nominal: calc( (var(--x-nut-output-L3-L1-voltage-nominal) + var(--x-nut-output-L2-L3-voltage-nominal) + var(--x-nut-output-L1-L2-voltage-nominal)) / 3); + --x-nut-output-voltage-graphmin: min(var(--x-nut-output-L3-L1-voltage-graphmin), var(--x-nut-output-L2-L3-voltage-graphmin), var(--x-nut-output-L1-L2-voltage-graphmin)); + --x-nut-output-voltage-graphmax: max(var(--x-nut-output-L3-L1-voltage-graphmax), var(--x-nut-output-L2-L3-voltage-graphmax), var(--x-nut-output-L1-L2-voltage-graphmax)); + +@ELSE@ + +@IFSUPP output.L2-N.voltage@ + --x-nut-output-voltage-mode: "L2-N"; + --x-nut-output-voltage-nominal: calc( (var(--x-nut-output-L3-N-voltage-nominal) + var(--x-nut-output-L2-N-voltage-nominal) + var(--x-nut-output-L1-N-voltage-nominal)) / 3); + --x-nut-output-voltage-graphmin: min(var(--x-nut-output-L3-N-voltage-graphmin), var(--x-nut-output-L2-N-voltage-graphmin), var(--x-nut-output-L1-N-voltage-graphmin)); + --x-nut-output-voltage-graphmax: max(var(--x-nut-output-L3-N-voltage-graphmax), var(--x-nut-output-L2-N-voltage-graphmax), var(--x-nut-output-L1-N-voltage-graphmax)); + +@ELSE@ + +@IFSUPP output.voltage.nominal@ + --x-nut-output-voltage-mode: "nominal"; + --x-nut-output-voltage-nominal: @VAR output.voltage.nominal@; + --x-nut-output-voltage-graphmin: round(down, calc(var(--x-nut-output-voltage-nominal) * 0.8), 10); + --x-nut-output-voltage-graphmax: round(up, calc(var(--x-nut-output-voltage-nominal) * 1.2), 10); +@ELSE@ +@IFSUPP output.voltage@ +@IFBETWEEN 90 160 output.voltage@ + --x-nut-output-voltage-mode: "output-90-160"; + --x-nut-output-voltage-nominal: 120; + --x-nut-output-voltage-graphmin: 90; + --x-nut-output-voltage-graphmax: 160; +@ELSE@ +@IFSUPP output.voltage@ +@IFBETWEEN 160 280 output.voltage@ + --x-nut-output-voltage-mode: "output-160-280"; + --x-nut-output-voltage-nominal: 240; + --x-nut-output-voltage-graphmin: 160; + --x-nut-output-voltage-graphmax: 280; +@ELSE@ +@IFSUPP output.voltage@ +@IFBETWEEN 280 500 output.voltage@ + --x-nut-output-voltage-mode: "output-280-500"; + --x-nut-output-voltage-nominal: 400; + --x-nut-output-voltage-graphmin: 280; + --x-nut-output-voltage-graphmax: 500; +@ELSE@ + --x-nut-output-voltage-mode: "output-default"; + --x-nut-output-voltage-nominal: 240; + --x-nut-output-voltage-graphmin: 0; + --x-nut-output-voltage-graphmax: 500; +@ENDIF@ + } * { box-sizing: border-box; } @@ -200,24 +732,22 @@ on @HOST@ @ENDIF@ - @IFSUPP battery.voltage@
Voltage
-
+
@VAR battery.voltage@ V
-
30
20
10
+
MAX
NOM
MIN
@ENDIF@ -
Line Voltage
@@ -227,21 +757,30 @@ on @HOST@
Input L1-L2
-
+
@VAR input.L1-L2.voltage@ V
+
+
MAX
NOM
MIN
+
Input L2-L3
-
+
@VAR input.L2-L3.voltage@ V
+
+
MAX
NOM
MIN
+
Input L3-L1
-
+
@VAR input.L3-L1.voltage@ V
+
+
MAX
NOM
MIN
+
@ELSE@ @@ -252,21 +791,30 @@ on @HOST@
Input L1-N
-
+
@VAR input.L1-N.voltage@ V
+
+
MAX
NOM
MIN
+
Input L2-N
-
+
@VAR input.L2-N.voltage@ V
+
+
MAX
NOM
MIN
+
Input L3-N
-
+
@VAR input.L3-N.voltage@ V
+
+
MAX
NOM
MIN
+
@ELSE@ @@ -275,41 +823,43 @@ on @HOST@
Input
-
+
@VAR input.voltage@ V
+
+
MAX
NOM
MIN
+
@ENDIF@ - @IFSUPP output.L2-L3.voltage@
Output L1-L2
-
+
@VAR output.L1-L2.voltage@ V
-
160
110
60
+
MAX
NOM
MIN
Output L2-L3
-
+
@VAR output.L2-L3.voltage@ V
-
160
110
60
+
MAX
NOM
MIN
Output L3-L1
-
+
@VAR output.L3-L1.voltage@ V
-
160
110
60
+
MAX
NOM
MIN
@@ -320,29 +870,29 @@ on @HOST@
Output L1-N
-
+
@VAR output.L1-N.voltage@ V
-
160
110
60
+
MAX
NOM
MIN
Output L2-N
-
+
@VAR output.L2-N.voltage@ V
-
160
110
60
+
MAX
NOM
MIN
Output L3-N
-
+
@VAR output.L3-N.voltage@ V
-
160
110
60
+
MAX
NOM
MIN
@@ -352,11 +902,11 @@ on @HOST@
Output
-
+
@VAR output.voltage@ V
-
160
110
60
+
MAX
NOM
MIN
@ENDIF@ @@ -446,17 +996,16 @@ on @HOST@ @IFSUPP ambient.temperature@
-
Environment
Temp
-
+
@VAR ambient.temperature@ °
-
50
0
+
MAX
MIN
@@ -479,5 +1028,25 @@ on @HOST@
+ + diff --git a/docs/nut.dict b/docs/nut.dict index 4b085c21ae..6f295f2b46 100644 --- a/docs/nut.dict +++ b/docs/nut.dict @@ -1,4 +1,4 @@ -personal_ws-1.1 en 3677 utf-8 +personal_ws-1.1 en 3687 utf-8 AAC AAS ABI @@ -541,6 +541,7 @@ IDEN IDEs IDentifiers IFBETWEEN +IFEQ IFF IFSUPP IGN @@ -1795,6 +1796,7 @@ cdc cdf cee cef +celsius centos cerr certfile @@ -1893,6 +1895,7 @@ cpqpower cpsups cpu cr +createElement crestfactor crit criticality @@ -2066,6 +2069,8 @@ ef egrep ei el +elementWidth +els emacs emptor emptyDir @@ -2146,6 +2151,7 @@ fmt fno fontconfig fopen +forEach forceshutdown forcessl formatconfig @@ -2226,6 +2232,8 @@ gpg gpgsign gpio gpiochip +graphmax +graphmin graphviz groupadd groupname @@ -2338,6 +2346,7 @@ inittime initups inline inlined +innerHTML innotech innovart innovatae @@ -2404,6 +2413,7 @@ jpeg jpg jq jre +js json kVA kadets