34
#define UPSMFR "Energy Sistem"
35
#define UPSMFR "Energy Sistem"
36
#define SENDDELAY 100 /* 100 usec between chars on send */
37
#define SER_WAIT_SEC 3 /* max 3.0 sec window for reads */
38
#define SER_WAIT_USEC 0
36
40
#define UPSTYPE "UPS Smart/Advanced"
37
char UPSFIRM[20] = " ";
42
static char UPSFIRM[20] = " ";
43
static int UPSFIRMSET = 0;
43
#define DRIVERVERSION "0.20"
48
#define DRIVERVERSION "0.22"
52
static char strwakedelay[5];
53
static char strdelayshut[3];
51
56
#define MINVOLTGESSFACT12 0.91667
63
68
* If the number is out of the range 'min-max' the output string goes to defval
64
69
***********************************************************************/
66
void parse_str_num(const char *org, char *dest, int prec, int numdec, float min, float max, float defval) {
71
static void parse_str_num(const char *org, char *dest, int prec,
72
int numdec, float min, float max, float defval) {
68
74
char myfmtstr[7] = "%04.0f";
403
415
/*************** instcmd *************************/
405
/* void instcmd(int auxcmd, int dlen, char *data) { */
406
int instcmd(const char *cmdname, const char *extra) {
417
static int instcmd(const char *cmdname, const char *extra)
410
422
if (!strcasecmp(cmdname, "shutdown.stop")) {
412
upslogx(LOG_INFO,"Cancel shutdown sent to UPS.");
413
return STAT_INSTCMD_HANDLED;
423
ret = ser_send_pace(upsfd, SENDDELAY, "C\r");
424
upslogx(LOG_INFO,"Cancel shutdown sent to UPS.");
425
return STAT_INSTCMD_HANDLED;
416
428
if (!strcasecmp(cmdname, "test.battery.start")) {
418
upslogx(LOG_INFO,"Start 10 Seconds battery test.");
419
return STAT_INSTCMD_HANDLED;
429
ret = ser_send_pace(upsfd, SENDDELAY, "T\r");
430
upslogx(LOG_INFO,"Start 10 Seconds battery test.");
431
return STAT_INSTCMD_HANDLED;
422
434
if (!strcasecmp(cmdname, "shutdown.return")) {
423
sprintf(aux, "S%sR%s\x0D", strdelayshut, strwakedelay);
425
upslogx(LOG_INFO,"Sending shutdown command '%s' to UPS", aux);
426
return STAT_INSTCMD_HANDLED;
435
snprintf(aux, sizeof(aux), "S%sR%s\r",
436
strdelayshut, strwakedelay);
437
ret = ser_send_pace(upsfd, SENDDELAY, "%s", aux);
439
upslogx(LOG_INFO,"Sending shutdown command '%s' to UPS", aux);
440
return STAT_INSTCMD_HANDLED;
429
443
if (!strcasecmp(cmdname, "shutdown.stayoff")) {
430
sprintf(aux, "S%sR0000\x0D", strdelayshut);
432
upslogx(LOG_INFO,"Sending shutdown command '%s' to UPS", aux);
433
return STAT_INSTCMD_HANDLED;
444
snprintf(aux, sizeof(aux), "S%sR0000\r", strdelayshut);
445
ret = ser_send_pace(upsfd, SENDDELAY, "%s", aux);
447
upslogx(LOG_INFO,"Sending shutdown command '%s' to UPS", aux);
448
return STAT_INSTCMD_HANDLED;
436
451
if (!strcasecmp(cmdname, "load.off")) {
438
upssend("S00R0000\x0D");
439
upslogx(LOG_INFO,"Turning off load on UPS.");
440
return STAT_INSTCMD_HANDLED;
452
ret = ser_send_pace(upsfd, SENDDELAY, "C\r");
453
ret = ser_send_pace(upsfd, SENDDELAY, "S00R0000\r");
454
upslogx(LOG_INFO,"Turning off load on UPS.");
455
return STAT_INSTCMD_HANDLED;
443
458
if (!strcasecmp(cmdname, "load.on")) {
445
upslogx(LOG_INFO,"Turning on load on UPS.");
446
return STAT_INSTCMD_HANDLED;
459
ret = ser_send_pace(upsfd, SENDDELAY, "C\r");
460
upslogx(LOG_INFO,"Turning on load on UPS.");
461
return STAT_INSTCMD_HANDLED;
448
upslogx(LOG_INFO,"Unknown command '%s'", cmdname);
449
return STAT_INSTCMD_UNKNOWN;
464
upslogx(LOG_INFO,"Unknown command '%s'", cmdname);
465
return STAT_INSTCMD_UNKNOWN;
490
505
********************************************************************/
491
506
void upsdrv_initinfo(void)
508
dstate_setinfo("driver.version.internal", "%s", DRIVERVERSION);
494
dstate_setinfo( "ups.mfr", UPSMFR); /* INFO_MFR*/
495
dstate_setinfo( "ups.model", UPSTYPE); /*INFO_MODEL*/
496
dstate_setinfo( "ups.firmware", UPSFIRM); /* INFO_FIRMREV */
497
dstate_setinfo( "input.voltage", "220"); /*INFO_UTILITY */ /* Q1 VOLTAJE ENTRADA 0 */
498
dstate_setinfo( "output.voltage.target.line", "220" ); /* INFO_NOM_IN_VOLT*/ /* VOLTAJE A ENTRADA 1 */
499
dstate_setinfo( "battery.voltage", "12"); /* INFO_BATTVOLT */ /* Q1 VOLTAJE BATERIA(S) 5 */
511
dstate_setinfo( "ups.mfr", "%s", UPSMFR); /* INFO_MFR*/
512
dstate_setinfo( "ups.model", "%s", UPSTYPE); /*INFO_MODEL*/
513
dstate_setinfo( "ups.firmware", "%s", UPSFIRM); /* INFO_FIRMREV */
500
514
/* dstate_setinfo( INFO_STATUS, ""); DUDA */
501
dstate_setinfo( "input.frequency", "50"); /* INFO_ACFREQ */ /* Q1 FRECUENCIA ENTRADA 4 */
502
dstate_setinfo( "ups.load", "0" ); /* INFO_LOADPCT */ /* Q1 CARGA UPS 3 */
503
dstate_setinfo( "ups.temperature", "0"); /* INFO_UPSTEMP */ /* Q1 TEMPERATURA 6 */
504
dstate_setinfo( "output.voltage", "220"); /* INFO_OUTVOLT */ /* Q1 VOLTAJE SALIDA 2 */
507
517
dstate_setinfo( "output.voltage.target.battery", "220" ); /* INFO_OUTVLTSEL */ /* F VOLTAJE NOMINAL DE SALIDA 0 */
508
dstate_setinfo( "output.curent", "0" ); /* INFO_CURRENT */ /* F AMPERIOS SALIDA 1 */
509
518
dstate_setinfo( "battery.voltage.nominal", "12"); /* INFO_NOMBATVLT */ /* F VOLTAJE NOMINAL DE BATERIA 2 */
511
520
dstate_setinfo( "ups.delay.shutdown", "%s", strdelayshut); /* INFO_DELAYSHUT */