Hi Robert,
Liebert's Multilink is the only original source of information, so if
Multilink doesn't do it, there is no known command. If Multilink does
offer that function, you will still need to sniff the protocol to find
the commands it uses - only then will it be possible to implement this
feature in NUT.
With regard to the patches so far, we have:
1. reply[] byte swap patch
2. All the other instances of byte swapping reply[] patch
3. "ups.firmware" register location patch
In between this, there was Spiros's observation that the the Liebert NXe
doesn't return some of the text strings that the GXT2 returns. Assuming
the driver is otherwise compatible (is it??), the most compatible fix is
to get the strings separately and only make some of them an error condition.
Also, the NXe has two serial ports, one 2400 baud (same as the GXT2),
which is disabled when using the ethernet option and another at 9600
baud. The NUT driver assumes 2400 baud. To find how to implement this,
will need to find an example NUT driver that uses differing serial baud
rates, any suggestions?
Richard
+-- --+
| Biological Sciences, Room 231 |
| http://www.csc.liv.ac.uk/~greg |
+-- --+
Robert Jobbagy wrote:
Hi guys,
I would like switch to battery from online my ups.
Is it possible?exist something command that I do it?
Thanks your help.
2010/4/9 Robert Jobbagy <[email protected]
<mailto:[email protected]>>
Hi Arjen!
This is the my last patch to Liebert GXT2 driver.
---------- Forwarded message ----------
From: *Robert Jobbagy* <[email protected]
<mailto:[email protected]>>
Date: 2010/4/7
Subject: Re: [Nut-upsdev] Liebert GXT2 NUT driver
To: NUT Developers <[email protected]
<mailto:[email protected]>>
Hi Guys,
I tested this driver and I found a bug,
The wrong output:
device.serial: GXT2MR15D
ups.firmware: 12OCT04
ups.mfr.date: 0428100126AF041
ups.serial: GXT2MR15D
The right output:
device.serial: 0428100126AF041
ups.firmware: GXT2MR15D
ups.mfr.date: 12OCT04
ups.serial: 0428100126AF041
I fix it and attached the patch.
2010/4/7 Spiros Ioannou <[email protected] <mailto:[email protected]>>
On the battery issue:
I did some tests:
BATTERY_CAPACITY is always 94%, no matter its charge, probably
indicating its decay.
BATTERY_CHARGED is always NO for me
BATTERY_CURRENT does actually indicate when battery is charging
or discharging. In the case of discharging (ups on battery) a
negative value is indicated.
The correct value can be calculated as follows:
float f;
f=(signed short int)(256*H+L)/(float)100; //100 is the divider
to convert value to Amperes.
The actual value of BATTERY_CURRENT in Amperes need to be
divided by 100:
*CHARGING:*
# ./upsesp2 /dev/ttyS0 BATTERY_CURRENT
SendingM: 001,095,002,001,003,09C
BATTERY_CURRENT,bit/divider:100
READ : 001,095,004,001,003, 001,056 (001 086), 0F5 (returned
values H,L are decimal 001 086)
BATTERY_CURRENT: 3.4
*DISCHARGING (on battery)*
# ./upsesp2 /dev/ttyS0 BATTERY_CURRENT
SendingM: 001,095,002,001,003,09C
BATTERY_CURRENT,bit/divider:100
READ : 001,095,004,001,003, 0FC,020 (252 032), 0BA
BATTERY_CURRENT: -9.9
-9.9 comes from (255-252)*256 + (255-032) or by casting to
signed short int which does the same.
After the power comes back on, between discharging and charging
there is a period of no battery current (0 Amp) for a few seconds.
-S
On Tue, Apr 6, 2010 at 9:12 PM, Spiros Ioannou <[email protected]
<mailto:[email protected]>> wrote:
Hi,
I managed to find another Liebert UPS, this time a Liebert
NXe 20KVA unit, so I can help with the driver again.
This one has 2 serial ports, one gets disabled if you
connect the ethernet module. The other port is @9600bps. The
9600 is the one I use.
I applied Richard's patch with the bit correction, and tried
the driver (after changing the bitrate), but it failed at
startup because Liebert NXe doesn't provide its Serial
Number. It seems when trying to read the initial UPS
model,SN etc, the UPS replies an invalid 5-byte reply
instead of the usual 8-byte one. I attach a debug output
(hex) from my upsesp2.c for comparison. Look at line 109 of
dbg_hex.txt.
The solution is to replace
for (i = 0; i < 37; i++) {
with
for (i = 0; i < 15; i++) {
to just check for MODEL_NAME
As for the CHARGED, it seems that in my case the battery
BATTERY_CHARGED is always NO perhaps because the UPS uses a
percentage battery charge indicator (BATTERY_CAPACITY). I'm
not sure I follow your logic with ANDing with the OL flag.
The Charging could probably be deducted from the
BATTERY_CURRENT value.This could be negative if the battery
is charging, but I cannot test it right now.
./liebertgxt2 -a nxe -DD
Network UPS Tools - Liebert GXT2 serial UPS driver 0.02
(2.4.3-2420)
Warning: This is an experimental driver.
Some features may not function correctly.
0.000000 debug level is '2'
0.000737 send: (6 bytes) => 01 88 02 01 04 90
0.072087 read: (8 bytes) => 01 88 04 01 04 69 4c 47
0.072216 send: (6 bytes) => 01 88 02 01 05 91
0.136206 read: (8 bytes) => 01 88 04 01 05 62 65 5a
0.136343 send: (6 bytes) => 01 88 02 01 06 92
0.202086 read: (8 bytes) => 01 88 04 01 06 72 65 6b
0.202209 send: (6 bytes) => 01 88 02 01 07 93
0.266083 read: (8 bytes) => 01 88 04 01 07 20 74 29
0.266205 send: (6 bytes) => 01 88 02 01 08 94
0.328099 read: (8 bytes) => 01 88 04 01 08 58 4e 3c
0.328222 send: (6 bytes) => 01 88 02 01 09 95
0.402090 read: (8 bytes) => 01 88 04 01 09 00 20 b7
0.402212 send: (6 bytes) => 01 88 02 01 0a 96
0.468096 read: (8 bytes) => 01 88 04 01 0a 00 00 98
0.468220 send: (6 bytes) => 01 88 02 01 0b 97
0.559082 read: (8 bytes) => 01 88 04 01 0b 00 00 99
0.559205 send: (6 bytes) => 01 88 02 01 0c 98
0.623082 read: (8 bytes) => 01 88 04 01 0c 00 00 9a
0.623204 send: (6 bytes) => 01 88 02 01 0d 99
0.687179 read: (8 bytes) => 01 88 04 01 0d 00 00 9b
0.687316 send: (6 bytes) => 01 88 02 01 0e 9a
0.753149 read: (8 bytes) => 01 88 04 01 0e 00 00 9c
0.753285 send: (6 bytes) => 01 88 02 01 0f 9b
0.818205 read: (8 bytes) => 01 88 04 01 0f 00 00 9d
0.818342 send: (6 bytes) => 01 88 02 01 10 9c
0.880087 read: (8 bytes) => 01 88 04 01 10 00 00 9e
0.880210 send: (6 bytes) => 01 88 02 01 11 9d
0.972080 read: (8 bytes) => 01 88 04 01 11 00 00 9f
0.972203 send: (6 bytes) => 01 88 02 01 12 9e
1.052085 read: (8 bytes) => 01 88 04 01 12 00 00 a0
1.052211 send: (6 bytes) => 01 88 02 01 13 9f
1.116147 read: (8 bytes) => 01 88 04 01 13 31 49 1b
1.116283 send: (6 bytes) => 01 88 02 01 14 a0
1.180087 read: (8 bytes) => 01 88 04 01 14 30 37 09
1.180210 send: (6 bytes) => 01 88 02 01 15 a1
1.263082 read: (8 bytes) => 01 88 04 01 15 31 52 26
1.263205 send: (6 bytes) => 01 88 02 01 16 a2
1.329086 read: (8 bytes) => 01 88 04 01 16 30 35 09
1.329210 send: (6 bytes) => 01 88 02 01 17 a3
1.395086 read: (8 bytes) => 01 88 04 01 17 32 4d 24
1.395208 send: (6 bytes) => 01 88 02 01 18 a4
1.469080 read: (8 bytes) => 01 88 04 01 18 30 36 0c
1.469202 send: (6 bytes) => 01 88 02 01 19 a5
1.533086 read: (8 bytes) => 01 88 04 01 19 00 00 a7
1.533209 send: (6 bytes) => 01 88 02 01 1a a6
1.597114 read: (8 bytes) => 01 88 04 01 1a 00 00 a8
1.597239 send: (6 bytes) => 01 88 02 01 1b a7
1.662085 read: truncated: (5 bytes) => 01 37 01 04 3d
1.662194 GTX2 capable UPS not detected
On Tue, Apr 6, 2010 at 4:32 PM, Richard Gregory
<[email protected]
<mailto:[email protected]>> wrote:
Hi All,
There were other byte swap issues with the driver,
making all the bit field flags wrong. Have swapped them
and can confirm the OL, OB and CHRG flags work. CHaRGing
is not the inverse of Liebert's BATTERY_CHARGED flag as
that means CHRG is set when the UPS is on battery. Is it
reasonable to correct for this by ANDing with the OL flag?
Byte swapping patch attached.
Richard
+-- --+
| Biological Sciences, Room 231 |
| http://www.csc.liv.ac.uk/~greg
<http://www.csc.liv.ac.uk/%7Egreg> |
+-- --+
Arjen de Korte wrote:
Citeren Robert Jobbagy <[email protected]
<mailto:[email protected]>>:
The trouble was in the command reply buffer use.
You compute the value that value =
reply[6]*256+reply[5] <- it's wrong
The right solution: value = reply[5] * 256 +
reply[6];
Thanks for this patch. I just committed it to the
development version. But please note that this is
an experimental driver. Most of the functions are
untested (since nobody took the time to try it out
and post the results back to the mailing list).
And other bug,
battery.runtime compute, you divide this value
60 <- it's wrong
right value: divide 1.0
Probably not. Per the NUT standard, the
'battery.runtime' value is reported in seconds. As
far as I understand, the UPS reports runtime
remaining in minutes, so we need to multiply by 60
here. See 'docs/new-names.txt' for a listing of
(almost) all variables supported in NUT.
I continue the work on this driver,and I will
write if I make a something
new.
Please do. It should be trivial to add additional
commands and variables to the existing ones.
Best regards, Arjen
_______________________________________________
Nut-upsdev mailing list
[email protected]
<mailto:[email protected]>
http://lists.alioth.debian.org/mailman/listinfo/nut-upsdev
_______________________________________________
Nut-upsdev mailing list
[email protected]
<mailto:[email protected]>
http://lists.alioth.debian.org/mailman/listinfo/nut-upsdev
--
Best Regards,
Robert
--
Best Regards,
Robert
--
Best Regards,
Robert
_______________________________________________
Nut-upsdev mailing list
[email protected]
http://lists.alioth.debian.org/mailman/listinfo/nut-upsdev