Index: liebert-esp2.c
===================================================================
--- liebert-esp2.c	(revision 2432)
+++ liebert-esp2.c	(working copy)
@@ -23,6 +23,8 @@
 #include "timehead.h"
 #include "nut_stdint.h"
 
+#define sivann
+
 #define DRIVER_NAME	"Liebert ESP-II serial UPS driver"
 #define DRIVER_VERSION	"0.02"
 
@@ -95,43 +97,51 @@
 {
 	struct {
 		const char	*var;
+		unsigned char	len;
 	} vartab[] = {
-		{ "ups.model" },
-		{ "ups.firmware" },
-		{ "ups.serial" },
-		{ "ups.mfr.date" },
+		{ "ups.model",15 },
+		{ "ups.firmware",8 },
+		{ "ups.serial",10 },
+		{ "ups.mfr.date",4 },
 		{ NULL }
 	};
 
 	char	buf[LARGEBUF], *s;
-	int	i;
+	int	i,vari,ret,offset=4,readok=0;
 
 	dstate_setinfo("ups.mfr", "%s", "Liebert");
 
-	for (i = 0; i < 37; i++) {
-		char	command[6], reply[8];
-		int	ret;
+	for (vari = 0; vartab[vari].var; vari++) {
+		upsdebugx(1, "reading: %s", vartab[vari].var);
 
-		snprintf(command, sizeof(command), "\x01\x88\x02\x01%c", i+4);
-		command[5] = cksum(command, 5);
+		for (i = 0; i < vartab[vari].len; i++) {
+			char	command[6], reply[8];
 
-		ret = do_command((unsigned char *)command, reply);
-		if (ret < 8) {
-			break;
+			snprintf(command, sizeof(command), "\x01\x88\x02\x01%c", i+offset);
+			command[5] = cksum(command, 5);
+
+			ret = do_command((unsigned char *)command, reply);
+			if (ret < 8) {
+				upsdebug_hex(2, "send: truncated", command, ret);
+				break;
+			}
+
+			buf[i<<1] = reply[6];
+			buf[(i<<1)+1] = reply[5];
 		}
 
-		buf[i<<1] = reply[6];
-		buf[(i<<1)+1] = reply[5];
-	}
+		buf[i<<1] = 0;
+		upsdebugx(1, "return: %d (8=success)", ret);
 
-	buf[i<<1] = 0;
-
-	for (s = strtok(buf, " "), i = 0; s && vartab[i].var; s = strtok(NULL, " "), i++) {
-		dstate_setinfo(vartab[i].var, "%s", s);
+		if (ret == 8) { /* last command successful */
+			dstate_setinfo(vartab[vari].var,"%s",buf);
+			readok++;
+		}
+		offset+=vartab[vari].len;
 	}
 
-	if (i == 0) {
-		fatalx(EXIT_FAILURE, "GTX2 capable UPS not detected");
+	if (!readok) {
+		fatalx(EXIT_FAILURE, "ESP-II capable UPS not detected");
 	}
 
 	upsh.instcmd = instcmd;
@@ -146,22 +156,22 @@
 		const char	*fmt;
 		const double	mult;
 	} vartab[] = {
-		{ { 1,149,2,1,4,157 },	"battery.charge", "%.0f", 1.0 },
 		{ { 1,149,2,1,1,154 },	"battery.runtime", "%.0f", 60 },
 		{ { 1,149,2,1,2,155 },	"battery.voltage", "%.1f", 0.1 },
 		{ { 1,149,2,1,3,156 },	"battery.current", "%.2f", 0.01 },
 		{ { 1,161,2,1,13,178 },	"battery.voltage.nominal", "%.1f", 0.1 },
+		{ { 1,149,2,1,12,165 },	"battery.temperature", "%.1f", 0.1 },
 		{ { 1,149,2,1,7,160 },	"ups.load", "%.0f", 1.0 },
 		{ { 1,149,2,1,6,159 },	"ups.power", "%.0f", 1.0 },
-		{ { 1,161,2,1,8,173 },	"ups.power.nominal", "%.0f", 1.0 },
+		{ { 1,161,2,1,8,173 },	"ups.power.nominal", "%.0f", 100.0 },
 		{ { 1,149,2,1,5,158 },	"ups.realpower", "%.0f", 1.0 },
-		{ { 1,149,2,1,14,167 },	"ups.temperature", "%.1f", 0.1 },
+		{ { 1,149,2,1,14,167 },	"ambient.temperature", "%.1f", 0.1 },
 		{ { 1,144,2,1,1,149 },	"input.voltage", "%.1f", 0.1 },
-		{ { 1,149,2,1,8,161 },	"input.frequency", "%.1f", 0.1 },
-		{ { 1,149,2,1,10,163 },	"input.frequency.nominal", "%.1f", 0.1 },
+		{ { 1,149,2,1,8,161 },	"input.frequency", "%.1f", 0.01 },
+		{ { 1,149,2,1,10,163 },	"input.frequency.nominal", "%.1f", 0.01 },
 		{ { 1,144,2,1,5,153 },	"input.bypass.voltage", "%.1f", 0.1 },
 		{ { 1,144,2,1,3,151 },	"output.voltage", "%.1f", 0.1 },
-		{ { 1,149,2,1,9,162 },	"output.frequency", "%.1f", 0.1 },
+		{ { 1,149,2,1,9,162 },	"output.frequency", "%.1f", 0.01 },
 		{ { 1,144,2,1,4,152 },	"output.current", "%.1f", 0.1 },
 		{ { 0 }, NULL, NULL, 0 }
 	};
