[Nut-upsuser] N-Power MEV-3000LT compatibility report and problem
Александр Безруков
phmagic at mail.ru
Sun Aug 11 22:09:27 UTC 2013
Hello,
> What do you get from the "I" command?
A string of 8 spaces.
>> So I believe the compatibility list deserves two new lines.
>
>Probably best to delay adding this to the HCL until we can get the driver to shut down the UPS properly.
I debugged the problem. From the source, drivers/blazer.c:418
/*
* If a command is invalid, it will be echoed back
*/
if (blazer_command(buf, buf, sizeof(buf)) > 0) {
upslogx(LOG_ERR, "instcmd: command [%s] failed", cmdname);
return STAT_INSTCMD_FAILED;
}
I see the following differences from the protocol implemented in the driver.
1. Instead of echoing back the command on failure, the UPS does the following:
a. Returns " \r" (space, then CR) if the command was not recognized.
This is where echo is expected.
b. Returns "NAK\r" in the case where command was recognized but failed. By the
way, according to my records my old Ippon behaved the same way.
c. Returns "ACK\r" on success.
2. It doesn't support the Q (toggle quiet) command, it always returns "NAK\r"
3. On Q1, it doesn't reset the second number (the voltage when failure last sensed).
Probably it does once the voltage is normal again but I live in a place where it is never
normal, otherwise I were not be using such an expensive UPS, so I don't have a
practical way to check this.
For my UPS, the existing code misinterpret any "ACK\r" response as failure
(the blazer_command() function normally returns the number of octets received). And the
calling function doesn't attempt to continue, drivers/blazer.c:777
void upsdrv_shutdown(void)
{
int retry;
for (retry = 1; retry <= MAXTRIES; retry++) {
if (blazer_instcmd("shutdown.stop", NULL) != STAT_INSTCMD_HANDLED) {
continue;
}
if (blazer_instcmd("shutdown.return", NULL) != STAT_INSTCMD_HANDLED) {
continue;
}
fatalx(EXIT_SUCCESS, "Shutting down in %d seconds", offdelay);
}
fatalx(EXIT_FAILURE, "Shutdown failed!");
}
In order to support this flavor of protocol, a response "ACK" to a command should be considered
valid.
Regards,
Alexander.
More information about the Nut-upsuser
mailing list