[Nut-upsdev] RFC: new variable battery.status (was: [PATCH] upscode2: Report ABM Status)

thomas schorpp thomas.schorpp at gmail.com
Mon Nov 3 23:25:42 UTC 2014


Hi,

Am 13.02.2012 um 18:58 schrieb Arnaud Quette:
> 2012/2/6 thomas schorpp <thomas.schorpp at googlemail.com>:
>> Hi,
>
> Hi Thomas,
>
>> I want the driver report the battery status from ABM charging controllers
>> -patch attached- :
>

> For now, I've tracked your patch here:
> https://alioth.debian.org/tracker/index.php?func=detail&aid=313541&group_id=30602&atid=411544
>

Thanks, but no anonymous read access, so not very useful linking on public lists:

"You've been redirected to this login page because you have tried accessing a page that was not available to you as an anonymous user."

>> *or the charge estimation calculator of the driver is broken:
>>
>> battery.capacity.nominal: 17.00
>> battery.charge: 93.9
>> battery.runtime: 1620
>> battery.status.abm: FT
>> battery.voltage: 27.70
>> battery.voltage.maximum: 28.20
>> battery.voltage.minimum: 20.00
>> battery.voltage.nominal: 24.00
>> device.mfr: Compaq
>> device.model: UPS 1000 VA FW -0026
>> device.serial: E00230050

>
> as mentioned in the manpage and source code, no battery.charge data is
> returned from the device.
> "the driver will guestimate a value based on the nominal battery
> min/max and the current battery voltage."

Maybe I've found a better "guesstimation", -PATCH found cleaning up old stuff attached-

>
> so it may be due to both.
> It may also be a percentage of the nominal level, which may be not
> reachable after some time.

We're talking about lead/acid batteries here? A lead battery not reaching its rated nominal after charge is usually considered to be broken,
ask Your car garage mechanic ;-)

And now it's after "some (EU warranty) time" for my batteries:

battery.capacity.nominal: 17.00
battery.charge: 98.3
battery.runtime: 2280
battery.status.abm: RS
battery.voltage: 25.90
battery.voltage.maximum: 28.20
battery.voltage.minimum: 20.00
battery.voltage.nominal: 24.00
ups.mfr: Compaq
ups.model: UPS 1000 VA FW -0026
ups.serial: E00230050

Voltage still above "nominal" in ABM resting state.

And one more, the "panel test" isn't a "panel test", it's a complete selftest including the controller, inverter and fan under load here.

Here's the last patch for people using NUT and still have got an upscode2 talking UPS, who may find it useful, pls report breakage.

>
> cheers,
> Arnaud
>

y
tom

--- drivers/upscode2.c	2012-05-15 13:22:07.000000000 +0200
+++ drivers/upscode2.c	2012-07-18 15:39:15.000000000 +0200
@@ -32,7 +32,7 @@
   * Powerware 9305
   *
   * Also tested against
- * Compaq T1500h (Per J?nsson <per.jonsson at bth.se>)
+ * Compaq T1000h/T1500h (T.Schorpp, <thomas.schorpp at gmail.com>, Per J?nsson <per.jonsson at bth.se>)
   * Powerware 9120 (Gorm J. Siiger <gjs at sonnit.dk>)
   * Fiskars PowerServer 10 (Per Larsson <tucker at algonet.se>)
   */
@@ -45,7 +45,7 @@
  #include <math.h>
  
  #define DRIVER_NAME	"UPScode II UPS driver"
-#define DRIVER_VERSION	"0.88"
+#define DRIVER_VERSION	"0.89abm"
  
  /* driver description structure */
  upsdrv_info_t	upsdrv_info = {
@@ -54,7 +54,7 @@
  	"H K Lygre, <hklygre at online.no>\n" \
  	"Niels Baggesen <niels at baggesen.net>\n" \
  	"Niklas Edmundsson <nikke at acc.umu.se>",
-	DRV_EXPERIMENTAL,
+	DRV_BETA,
  	{ NULL }
  };
  
@@ -262,7 +262,7 @@
  	{ "STAT", t_list,   NULL, 0, 0, att },
  	{ "STBO", t_status, NULL, UPSC_STAT_ONBATT },
  	{ "STBL", t_status, NULL, UPSC_STAT_LOBATT },
-	{ "STBM", t_ignore },
+	{ "STBM", t_string, "battery.status.abm" },
  	{ "STBP", t_status, NULL, UPSC_STAT_BYPASS },
  	{ "STEA", t_list,   NULL, 0, 0, env },
  	{ "STEM", t_list,   NULL, 0, 0, env },
@@ -412,8 +412,8 @@
  	{ "shutdown.stop",		"UPPU", NULL },
  	{ "shutdown.reboot",		"UPPC", "IJHLDMGCIU" },
  	{ "shutdown.reboot.graceful",	NULL, NULL },
-	{ "test.panel.start",		"UPIS", NULL },
-	{ "test.panel.stop",		NULL, NULL },
+	{ "test.selftest.start",	"UPIS", NULL }, /* Spec:"UPIS(cr)INITIATE SELF TEST" not "panel test" */
+	{ "test.selftest.stop",		NULL, NULL },
  	{ "test.failure.start",		NULL, NULL },
  	{ "test.failure.stop",		NULL, NULL },
  	{ "test.battery.start",		"UPBT", "1" },
@@ -1363,6 +1363,7 @@
  static float batt_charge_pct(void)
  {
  	float chg=-1;
+	float batt_volt_rs = (batt_volt_nom * 26/24); /* ABM specs Vrs at 108.333 % Vnom */
  
  	/* This is only a rough estimate of charge status while charging.
  	 * When on battery something like Peukert's equation should be used */
@@ -1389,9 +1390,10 @@
  		chg *= (100/maxcurr);
  	}
  	/* Old method, assumes battery high/low-voltages provided by UPS are
-	 * applicable to battery charge, but they usually aren't */
+	 * applicable to battery charge, but they usually aren't, cause high is a UPS internal and/or battery
+	 * ABSOLUTE MAXIMUM RATING, not reported as "nominal" value, the upscode2 spec maybe wrong. */
  	else if (batt_volt_low > 0 && batt_volt_high > 0 && batt_volt > 0) {
-		if (batt_volt > batt_volt_high) {
+		if (batt_volt > batt_volt_rs) {
  			chg=100;
  		}
  		else if (batt_volt < batt_volt_low) {
@@ -1399,7 +1401,7 @@
  		}
  		else {
  			chg = (batt_volt - batt_volt_low) /
-				(batt_volt_high - batt_volt_low);
+				(batt_volt_rs - batt_volt_low);
  			chg*=100;
  		}
  	}




More information about the Nut-upsdev mailing list