unknown 4 日 前
コミット
d1b4570985
3 ファイル変更185 行追加0 行削除
  1. 178 0
      c/test/bt6721.c
  2. 5 0
      c/test/bt6721_msg.txt
  3. 2 0
      powershell/misc.py

+ 178 - 0
c/test/bt6721.c

@@ -143,4 +143,182 @@ uint8_t UPS_VACinputRangeAlarm(void)
         }
     }
     return flag;
+}
+
+
+void UPS_TestFinishMonitor(void)
+{
+    static uint8_t TestFinishState = 0;
+    uint8_t TestFinishStateCurrent;
+    char log_string[50];
+    static uint32_t start_time_test = 0;
+
+    TestFinishStateCurrent = (UPS.Status >> 2) & 0x01;
+
+    // Значение параметра изменилось
+    if (TestFinishStateCurrent != TestFinishState)
+    {
+        if (!TestFinishStateCurrent)
+        {
+            printf("Test finish\r\n");
+#ifdef TEST_ALARM_AKB_MONITOR
+            float time_test_actual = ((float)(xTaskGetTickCount() - start_time_test)) / (1000*60);
+            UPSReadTestStatus();
+
+            float Uakb_av = voltage_bat_average();
+            float Pload_av = power_load_average();
+            float k_eff;
+            printf("Uakb_av: %0.2f", Uakb_av);
+            printf("Pload_av: %0.2f", Pload_av);
+            
+            if (UPS.Test_Status != 2 && Pload_av >= 3) 
+            {
+                GetUPSEfficiencyFactorInt(&k_eff);
+                float Ccalc = (sSettings.UPS_Setting.ups_power*Pload_av*time_test_actual)/(100*60*Uakb_av*(k_eff));
+                printf("Ccalc: %0.2f", Ccalc);
+                float Ccalc_percent = (100*Ccalc)/sSettings.UPS_Setting.common_capacity;
+
+                if (Ccalc_percent >= 80) 
+                {
+                    sprintf(log_string, "Авария(%0.2f Ач)", Ccalc);
+                    log_event_data(LOG_TEST_ALARM_AKB, log_string);
+	                syslog(SYSLOG_INFORMATIONAL, "Ёмкость АКБ: %s", log_string);
+                    SNMP_SendUserTrap(BATTERY_FAIL);
+                } 
+                else 
+                {
+                    sprintf(log_string, "Норма(%0.2f Ач)", Ccalc);
+                    log_event_data(LOG_TEST_ALARM_AKB, log_string);
+	                syslog(SYSLOG_INFORMATIONAL, "Ёмкость АКБ: %s", log_string);
+                    SNMP_SendUserTrap(BATTERY_NORM);
+                }
+            }
+
+            memset(log_string, 0, sizeof(log_string));
+            
+            if (UPS.Test_Status == 2 || ((time_test_actual <= 0.9*test_time || time_test_actual >= 1.1*test_time) && (test_time != 0 && test_time != 100)))
+            { 
+                strcpy(log_string, "Ошибка");
+            } 
+            else 
+            {
+                strcpy(log_string, "Завершен");
+            }
+
+            uint8_t len1 = strlen(log_string);
+            sprintf(&log_string[len1], "(%0.1f мин)", time_test_actual);
+            log_event_data(LOG_TEST_UPS, log_string);
+            syslog(SYSLOG_INFORMATIONAL, "Тест батареи: %s", log_string);
+            test_time = 0;
+            SNMP_SendUserTrap(TEST_BAT_STOP);
+#else
+            log_event_data(LOG_TEST_UPS, "Завершен");
+            syslog_str(SYSLOG_INFORMATIONAL, "Тест батареи: Завершён");
+#endif
+            flUpdateLog = true;
+        } 
+        else 
+        {
+            test_akb_flag = true;
+            memset(log_string, 0, sizeof(log_string));
+            switch (get_act_source()) 
+            {
+                case WEB_ACT:
+                    strcpy(log_string, name_login);
+                break;
+                case SNMP_ACT:
+                case OTHER_ACT:
+                    strcpy(log_string, "Администратор");
+                break;
+#ifdef CLI_ENABLE
+                case CLI_ACT:
+                    strcpy(log_string, "Администратор");
+                break;
+#endif
+                case AUTO_ACT:
+                    strcpy(log_string, "Автоматический");
+                break;
+                default:
+                break;
+            }
+#ifdef TEST_ALARM_AKB_MONITOR
+            start_time_test = xTaskGetTickCount();
+            if (test_time == 0) {
+                strcat(log_string, " (авто)");
+            } else if (test_time == 100) {
+                strcat(log_string, " (до разряда)");
+            } else {
+                uint8_t len = strlen(log_string);
+                sprintf(&log_string[len], "(%i мин)", test_time);
+            }
+#else
+            strcat(log_string, " (Запущен)");
+#endif
+            printf("Test start\r\n");
+            log_event_data(LOG_TEST_UPS, log_string);
+            syslog(SYSLOG_INFORMATIONAL, "Тест батареи: %s", log_string);
+            SNMP_SendUserTrap(TEST_BAT_RUN);
+            flUpdateLog = true;
+        }
+    }
+    TestFinishState = TestFinishStateCurrent;
+}
+
+
+char *HTTP_UPSTest(uint32_t reqNum, char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBufOut)
+{
+    uint8_t valueLen = 0;
+    char tempValue[20];
+    char tempValue2[20];
+    int8_t res = 0;
+    char log_string[50];
+
+    (void)lenBufIn;
+    (void)reqNum;
+
+    if (seclevel == USER) {
+      return 0;
+    }
+
+    memset(tempValue, 0, 20);
+    memset(tempValue2, 0, 20);
+    memset(log_string, 0, 50);
+
+    strcpy(bufOut, HTTP_200_OK);
+
+    GetParamValue(bufIn, "func", tempValue, &valueLen);
+    if (strcmp(tempValue, "stop") == 0) {
+        res = ups_metac_service_pdu(ups_cancel_test);
+        if (res == 1 || res == 0) {
+            strcat(bufOut, "Команда \"Останов теста\" принята ИБП!");
+            strcpy(log_string, name_login);
+            strcat(log_string, " (Останов)");
+            log_event_data(LOG_TEST_UPS, log_string);
+        }
+        if (res == -1) {
+            strcat(bufOut, "Команда \"Останов теста\" отклонена ИБП!");
+        }
+    } else if (strcmp(tempValue, "discharge") == 0) {
+        res = ups_metac_service_pdu(ups_test_low_bat);
+        set_act_source(WEB_ACT);
+        if (res == 1 || res == 0) {
+            strcat(bufOut, "Команда \"Запуск теста\" принята ИБП!");
+        }
+        if (res == -1) {
+            strcat(bufOut, "Команда \"Запуск теста\" отклонена ИБП!");
+        }
+    } else if (strncmp(tempValue, "time", 6) == 0) {
+        GetParamValue(bufIn, "time", tempValue2, &valueLen);
+        TimeParam = atoi(tempValue2);
+        res = ups_metac_service_pdu(ups_test_time);
+        if (res == 1 || res == 0) {
+            strcat(bufOut, "Команда \"Запуск теста\" принята ИБП!");
+        }
+        if (res == -1) {
+            strcat(bufOut, "Команда \"Запуск теста\" отклонена ИБП!");
+        }
+    }
+    *lenBufOut = strlen(bufOut);
+
+    return bufOut;
 }

+ 5 - 0
c/test/bt6721_msg.txt

@@ -0,0 +1,5 @@
+Сообщения в syslog.
+
+1. Емкость АКБ: 
+2. Тест батареи:
+3. 

+ 2 - 0
powershell/misc.py

@@ -0,0 +1,2 @@
+
+print(2**2)