|
@@ -879,6 +879,7 @@ void ups_buzzer_cntrl_response(char *data)
|
|
|
|
|
|
void ups_mode_response(char *data)
|
|
|
{
|
|
|
+ static char fault_status[50] = {0};
|
|
|
char value[50];
|
|
|
uint8_t len = 0;
|
|
|
DBG printf("ups_serialresponse: %s\r\n", data);
|
|
@@ -894,6 +895,51 @@ void ups_mode_response(char *data)
|
|
|
|
|
|
DBG printf("UPS ups_mode_parser_start: %s\r\n", data);
|
|
|
|
|
|
+ // -----------------------------------------------------------------------
|
|
|
+ // Тестовый
|
|
|
+ // Если значение режима изменилось или режим "Fault"
|
|
|
+ if ((UPS.Mode != data[0]) || (data[0] == 'F')) {
|
|
|
+#ifdef UPS_MODE_MONITOR
|
|
|
+ memset(value, 0, sizeof(value));
|
|
|
+ GetModeStr(value, &len);
|
|
|
+ // В режиме "Fault" запрашиваем статус
|
|
|
+ if (data[0] == 'F') {
|
|
|
+
|
|
|
+ memset(ups_pdu.data, 0, UPS_PDU_MAX_LEN);
|
|
|
+ send_MegaTec_cmd(ups_fault_status);
|
|
|
+ if (ups_megatec_rx_pdu()) {
|
|
|
+ if (ups_pdu.data[0] != '(' || strncmp(ups_pdu.data, "(OK", 3) == 0) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ UPS.fault_type = (ups_pdu.data[1] - 0x30) << 4 | (ups_pdu.data[2] - 0x30);
|
|
|
+ strncat(value, &ups_pdu.data[1], 6);
|
|
|
+ strncat(value, &ups_pdu.data[14], 4);
|
|
|
+ strncat(value, &ups_pdu.data[25], 8);
|
|
|
+ strncat(value, &ups_pdu.data[35], 4);
|
|
|
+ strncat(value, &ups_pdu.data[41], 4);
|
|
|
+ strncat(value, &ups_pdu.data[47], 4);
|
|
|
+ strncat(value, &ups_pdu.data[53], 4);
|
|
|
+ strncat(value, &ups_pdu.data[59], 8);
|
|
|
+
|
|
|
+ if ((strncmp(value, fault_status, sizeof(value)) != 0) || (UPS.Mode != data[0]))
|
|
|
+ {
|
|
|
+ SNMP_SendUserTrap(UPS_MODE);
|
|
|
+ syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
|
|
|
+ log_event_data(LOG_UPS_MODE, value);
|
|
|
+ }
|
|
|
+ memcmp(fault_status, value, sizeof(value));
|
|
|
+ }
|
|
|
+ }
|
|
|
+ SNMP_SendUserTrap(UPS_MODE);
|
|
|
+ syslog(SYSLOG_INFORMATIONAL, "Режим ИБП: %s", value);
|
|
|
+ log_event_data(LOG_UPS_MODE, value);
|
|
|
+#endif
|
|
|
+ UPS.Mode = data[0];
|
|
|
+ }
|
|
|
+ // -----------------------------------------------------------------------
|
|
|
+
|
|
|
+
|
|
|
+#if 0 // Пока закроем
|
|
|
if (UPS.Mode != data[0]) {
|
|
|
UPS.Mode = data[0];
|
|
|
#ifdef UPS_MODE_MONITOR
|
|
@@ -922,7 +968,7 @@ void ups_mode_response(char *data)
|
|
|
log_event_data(LOG_UPS_MODE, value);
|
|
|
#endif
|
|
|
}
|
|
|
-
|
|
|
+#endif
|
|
|
}
|
|
|
|
|
|
#define BIT_OFFSET(c, offset) ((c - 0x30) << offset)
|