@@ -114,6 +114,7 @@ struct snmp_session g_snmp_sess, *g_snmp_sess_p;
114
114
const char * OID_pwr_status ;
115
115
int g_pwr_battery ;
116
116
int pollfreq ; /* polling frequency */
117
+ int quirk_symmetra_threephase = 0 ;
117
118
/* Number of device(s): standard is "1", but daisychain means more than 1 */
118
119
long devices_count = 1 ;
119
120
int current_device_number = 0 ; /* global var to handle daisychain iterations - changed by loops in snmp_ups_walk() and su_addcmd() */
@@ -199,6 +200,11 @@ su_addcmd(su_info_p);
199
200
if (testvar ("notransferoids" ))
200
201
disable_transfer_oids ();
201
202
203
+ if (testvar ("symmetrathreephase" ))
204
+ quirk_symmetra_threephase = 1 ;
205
+ else
206
+ quirk_symmetra_threephase = 0 ;
207
+
202
208
/* initialize all other INFO_ fields from list */
203
209
if (snmp_ups_walk (SU_WALKMODE_INIT ) == TRUE)
204
210
dstate_dataok ();
@@ -302,6 +308,8 @@ void upsdrv_makevartable(void)
302
308
"Specifies the Net-SNMP timeout in seconds between retries (default=1)" );
303
309
addvar (VAR_FLAG , "notransferoids" ,
304
310
"Disable transfer OIDs (use on APCC Symmetras)" );
311
+ addvar (VAR_FLAG , "symmetrathreephase" ,
312
+ "Enable APCC three phase Symmetra quirks (use on APCC three phase Symmetras)" );
305
313
addvar (VAR_VALUE , SU_VAR_SECLEVEL ,
306
314
"Set the securityLevel used for SNMPv3 messages (default=noAuthNoPriv, allowed: authNoPriv,authPriv)" );
307
315
addvar (VAR_VALUE | VAR_SENSITIVE , SU_VAR_SECNAME ,
@@ -2562,6 +2570,17 @@ bool_t su_ups_get(snmp_info_t *su_info_p)
2562
2570
2563
2571
if (su_info_p -> info_flags & ST_FLAG_STRING ) {
2564
2572
status = nut_snmp_get_str (su_info_p -> OID , buf , sizeof (buf ), su_info_p -> oid2info );
2573
+ if (status == TRUE) {
2574
+ if (quirk_symmetra_threephase ) {
2575
+ if (!strcasecmp (su_info_p -> info_type , "input.transfer.low" )
2576
+ || !strcasecmp (su_info_p -> info_type , "input.transfer.high" )) {
2577
+ /* Convert from three phase line-to-line voltage to line-to-neutral voltage */
2578
+ double value = atof (buf );
2579
+ value = value * 0.707 ;
2580
+ snprintf (buf , sizeof (buf ), "%.2f" , value );
2581
+ }
2582
+ }
2583
+ }
2565
2584
} else {
2566
2585
status = nut_snmp_get_int (su_info_p -> OID , & value );
2567
2586
if (status == TRUE) {
0 commit comments