Преглед изворни кода

1)change marker for POST/info.cgi (owner->sysname)
2)add alarm range for (vac, load, temperature)

balbekova пре 6 година
родитељ
комит
070f1d9a02

+ 14 - 2
docs/BT6702.MIB

@@ -226,13 +226,13 @@ IMPORTS
      DESCRIPTION ""
      ::= { traps 8 }
 
-     batteryTemperatureNorm  NOTIFICATION-TYPE
+     batteryTemperatureHighNorm  NOTIFICATION-TYPE
      OBJECTS              { intTemp }
      STATUS               current
      DESCRIPTION ""
      ::= { traps 9 }
 
-    batteryTemperatureAlarm  NOTIFICATION-TYPE
+    batteryTemperatureHighAlarm  NOTIFICATION-TYPE
      OBJECTS              { intTemp }
      STATUS               current
      DESCRIPTION ""
@@ -297,6 +297,18 @@ IMPORTS
      STATUS               current
      DESCRIPTION ""
      ::= { traps 20 }	
+     
+     batteryTemperatureLowNorm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 21 }
+
+     batteryTemperatureLowAlarm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 22 }
 	
 END
 

+ 15 - 3
docs/BT6708.MIB

@@ -230,13 +230,13 @@ IMPORTS
      DESCRIPTION ""
      ::= { traps 4 }
 
-     batteryTemperatureNorm  NOTIFICATION-TYPE
+     batteryTemperatureHighNorm  NOTIFICATION-TYPE
      OBJECTS              { intTemp }
      STATUS               current
      DESCRIPTION ""
      ::= { traps 5 }
 
-    batteryTemperatureAlarm  NOTIFICATION-TYPE
+    batteryTemperatureHighAlarm  NOTIFICATION-TYPE
      OBJECTS              { intTemp }
      STATUS               current
      DESCRIPTION ""
@@ -296,11 +296,23 @@ IMPORTS
      DESCRIPTION ""
      ::= { traps 15 }
 
-    batteryConnectNorm  NOTIFICATION-TYPE
+     batteryConnectNorm  NOTIFICATION-TYPE
      OBJECTS              { batCap }
      STATUS               current
      DESCRIPTION ""
      ::= { traps 16 }	
+     
+     batteryTemperatureLowNorm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 17 }
+
+     batteryTemperatureAlarm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 18 }
 	
 END
 

+ 15 - 3
docs/SmartUPS _bt6706.MIB

@@ -241,13 +241,13 @@ IMPORTS
      DESCRIPTION ""
      ::= { traps 9 }
 
-     batteryTemperatureNorm  NOTIFICATION-TYPE
+     batteryTemperatureHighNorm  NOTIFICATION-TYPE
      OBJECTS              { intTemp }
      STATUS               current
      DESCRIPTION ""
      ::= { traps 10 }
 
-    batteryTemperatureAlarm  NOTIFICATION-TYPE
+    batteryTemperatureHighAlarm  NOTIFICATION-TYPE
      OBJECTS              { intTemp }
      STATUS               current
      DESCRIPTION ""
@@ -307,11 +307,23 @@ IMPORTS
      DESCRIPTION ""
      ::= { traps 20 }
 
-    batteryConnectNorm  NOTIFICATION-TYPE
+     batteryConnectNorm  NOTIFICATION-TYPE
      OBJECTS              { batCap }
      STATUS               current
      DESCRIPTION ""
      ::= { traps 21 }	
+     
+     batteryTemperatureLowNorm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 22 }
+
+     batteryTemperatureLowAlarm  NOTIFICATION-TYPE
+     OBJECTS              { intTemp }
+     STATUS               current
+     DESCRIPTION ""
+     ::= { traps 23 }
 	
 END
 

+ 36 - 12
modules/Ethernet/trap_api.c

@@ -119,28 +119,28 @@ void SNMP_InitTrapsBase(void)
 #endif
 
   /* 9. BatteryTemperatureNorm */ // +
-  traps[BATTERY_TEMPERATURE_NORM].trapId = BATTERY_TEMPERATURE_NORM;
+  traps[BATTERY_HIGH_TEMPERATURE_NORM].trapId = BATTERY_HIGH_TEMPERATURE_NORM;
 #ifdef HARDWARE_BT6702
-  traps[BATTERY_TEMPERATURE_NORM].varbindId = 10;
+  traps[BATTERY_HIGH_TEMPERATURE_NORM].varbindId = 10;
 #elif defined HARDWARE_BT6706
-  traps[BATTERY_TEMPERATURE_NORM].varbindId = 11;
+  traps[BATTERY_HIGH_TEMPERATURE_NORM].varbindId = 11;
 #elif defined HARDWARE_BT6708
-  traps[BATTERY_TEMPERATURE_NORM].varbindId = 9;
+  traps[BATTERY_HIGH_TEMPERATURE_NORM].varbindId = 9;
 #endif
-  traps[BATTERY_TEMPERATURE_NORM].trapEnable = true;
-  traps[BATTERY_TEMPERATURE_NORM].handle = GetInternalTempStr; /* BatteryTemperature */  
+  traps[BATTERY_HIGH_TEMPERATURE_NORM].trapEnable = true;
+  traps[BATTERY_HIGH_TEMPERATURE_NORM].handle = GetInternalTempStr; /* BatteryTemperature */
   
   /* 10. BatteryTemperatureAlarm */ // +
-  traps[BATTERY_TEMPERATURE_ALARM].trapId = BATTERY_TEMPERATURE_ALARM;
+  traps[BATTERY_HIGH_TEMPERATURE_ALARM].trapId = BATTERY_HIGH_TEMPERATURE_ALARM;
 #ifdef HARDWARE_BT6702
-  traps[BATTERY_TEMPERATURE_ALARM].varbindId = 10;
+  traps[BATTERY_HIGH_TEMPERATURE_ALARM].varbindId = 10;
 #elif defined HARDWARE_BT6706
-  traps[BATTERY_TEMPERATURE_ALARM].varbindId = 11;
+  traps[BATTERY_HIGH_TEMPERATURE_ALARM].varbindId = 11;
 #elif defined HARDWARE_BT608
-  traps[BATTERY_TEMPERATURE_ALARM].varbindId = 9;
+  traps[BATTERY_HIGH_TEMPERATURE_ALARM].varbindId = 9;
 #endif
-  traps[BATTERY_TEMPERATURE_ALARM].trapEnable = true;
-  traps[BATTERY_TEMPERATURE_ALARM].handle = GetInternalTempStr; /* BatteryTemperature */
+  traps[BATTERY_HIGH_TEMPERATURE_ALARM].trapEnable = true;
+  traps[BATTERY_HIGH_TEMPERATURE_ALARM].handle = GetInternalTempStr; /* BatteryTemperature */
   
   /* 11. LineAlarm */ // +
   traps[LINE_ALARM].trapId = LINE_ALARM;
@@ -261,6 +261,30 @@ void SNMP_InitTrapsBase(void)
 #endif
   traps[BATTERY_CONNECT_NORM].trapEnable = true;
   traps[BATTERY_CONNECT_NORM].handle = GetBatCapacityStr; /* LowBatNorm */
+
+  /* 21. BatteryTemperatureNorm */ // +
+  traps[BATTERY_LOW_TEMPERATURE_NORM].trapId = BATTERY_LOW_TEMPERATURE_NORM;
+#ifdef HARDWARE_BT6702
+  traps[BATTERY_LOW_TEMPERATURE_NORM].varbindId = 10;
+#elif defined HARDWARE_BT6706
+  traps[BATTERY_HIGH_TEMPERATURE_NORM].varbindId = 11;
+#elif defined HARDWARE_BT6708
+  traps[BATTERY_HIGH_TEMPERATURE_NORM].varbindId = 9;
+#endif
+  traps[BATTERY_LOW_TEMPERATURE_NORM].trapEnable = true;
+  traps[BATTERY_LOW_TEMPERATURE_NORM].handle = GetInternalTempStr; /* BatteryTemperature */
+
+  /* 22. BatteryTemperatureAlarm */ // +
+  traps[BATTERY_LOW_TEMPERATURE_ALARM].trapId = BATTERY_HIGH_TEMPERATURE_ALARM;
+#ifdef HARDWARE_BT6702
+  traps[BATTERY_LOW_TEMPERATURE_ALARM].varbindId = 10;
+#elif defined HARDWARE_BT6706
+  traps[BATTERY_LOW_TEMPERATURE_ALARM].varbindId = 11;
+#elif defined HARDWARE_BT608
+  traps[BATTERY_LOW_TEMPERATURE_ALARM].varbindId = 9;
+#endif
+  traps[BATTERY_LOW_TEMPERATURE_ALARM].trapEnable = true;
+  traps[BATTERY_LOW_TEMPERATURE_ALARM].handle = GetInternalTempStr; /* BatteryTemperature */
 }
 
 /**

+ 4 - 2
modules/Ethernet/trap_api.h

@@ -38,8 +38,8 @@ typedef enum
   DO2_TOGGLED,
 #endif
 #endif
-  BATTERY_TEMPERATURE_NORM,
-  BATTERY_TEMPERATURE_ALARM,
+  BATTERY_HIGH_TEMPERATURE_NORM,
+  BATTERY_HIGH_TEMPERATURE_ALARM,
   LINE_ALARM,
   LINE_NORM,
   LOW_BAT_ALARM,
@@ -50,6 +50,8 @@ typedef enum
   CONNECT_MONITOR_NORM,
   BATTERY_CONNECT_ALARM,
   BATTERY_CONNECT_NORM,
+  BATTERY_LOW_TEMPERATURE_NORM,
+  BATTERY_LOW_TEMPERATURE_ALARM,
   ALL_TRAPS
 } TRAP_LIST_t;
 

+ 34 - 2
modules/HTTP_Server/http_server.c

@@ -938,6 +938,38 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
   SetUPSVoltCellMaxStr(value);
   memset(value, 0, len);
 
+  GetParamValue(buf, "mainvolt_high=", value, &valueLen);
+  SetVACAlarmHighRangeStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "mainvolt_low=", value, &valueLen);
+  SetVACAlarmLowRangeStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "mainvolt_hist=", value, &valueLen);
+  SetVACAlarmHisteStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "temp_high=", value, &valueLen);
+  SetTemperatureAlarmHighRangeStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "temp_low=", value, &valueLen);
+  SetTemperatureAlarmLowRangeStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "temp_hist=", value, &valueLen);
+  SetTemperatureAlarmHisteStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "loadvolt_high=", value, &valueLen);
+  SetLoadAlarmHighRangeStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "loadvolt_hist=", value, &valueLen);
+  SetLoadAlarmHistStr(value);
+  memset(value, 0, len);
+
   /* Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся */
   if (GetStateWebReinit() == true)
   {	
@@ -1808,7 +1840,7 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
 			memset(sendBuf, 0, strlen(sendBuf));
 			// parse packet for Content-length field
 			size = Parse_Content_Length(receiveBuf, receivedBufLen);
-			DataOffset = strstr(receiveBuf, "owner");
+			DataOffset = strstr(receiveBuf, "sysname");
 
 			// case of MSIE8 : we do not receive data in the POST packet
 			if (DataOffset == 0)
@@ -1829,7 +1861,7 @@ char* AuthenticatedTrueRoutine(uint16_t* sendLen)
 		else if (DataFlag == 1)
 		{
 		 /* parse packet for the octet-stream field */
-		   DataOffset = strstr(receiveBuf, "owner");
+		   DataOffset = strstr(receiveBuf, "sysname");
 		   TotalReceived += receivedBufLen;
 		   strncat(sendBuf,  DataOffset, TotalReceived);
 		   DataFlag++;

+ 20 - 0
modules/HTTP_Server/my_ssl_server.c

@@ -850,6 +850,26 @@ void HTTP_SetSettings(char *buf, uint16_t lenBuf)
   SetUPSVoltCellMaxStr(value);
   memset(value, 0, len);
 
+  GetParamValue(buf, "temp_high=", value, &valueLen);
+  SetTemperatureAlarmHighRangeStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "temp_low=", value, &valueLen);
+  SetTemperatureAlarmLowRangeStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "temp_hist=", value, &valueLen);
+  SetTemperatureAlarmHisteStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "loadvolt_high=", value, &valueLen);
+  SetLoadAlarmHighRangeStr(value);
+  memset(value, 0, len);
+
+  GetParamValue(buf, "loadvolt_hist=", value, &valueLen);
+  SetLoadAlarmHistStr(value);
+  memset(value, 0, len);
+
   /* Если параметры WEB изменились выставляем флаг, сохраняем настройки и перезагружаемся */
   if (GetStateWebReinit() == true)
   {

+ 32 - 0
modules/HTTP_Server/web_params_api.c

@@ -301,6 +301,38 @@ void HTTP_GetSettings(char *buf)
   GetUPSVoltCellMaxStr(str, &len);
   strcat(buf, "\",\"ups_cell_max\":\"");
   strncat(buf, str, len);
+#if	defined HARDWARE_BT6706 || HARDWARE_BT6708
+  GetVACAlarmHighRangeStr(str, &len);
+  strcat(buf, "\",\"mainvolt_high\":\"");
+  strncat(buf, str, len);
+
+  GetVACAlarmLowRangeStr(str, &len);
+  strcat(buf, "\",\"mainvolt_low\":\"");
+  strncat(buf, str, len);
+
+  GetVACAlarmHisteStr(str, &len);
+  strcat(buf, "\",\"mainvolt_hist\":\"");
+  strncat(buf, str, len);
+#endif
+  GetTemperatureAlarmHighRangeStr(str, &len);
+  strcat(buf, "\",\"temp_high\":\"");
+  strncat(buf, str, len);
+
+  GetTemperatureAlarmLowRangeStr(str, &len);
+  strcat(buf, "\",\"temp_low\":\"");
+  strncat(buf, str, len);
+
+  GetTemperatureAlarmHisteStr(str, &len);
+  strcat(buf, "\",\"temp_hist\":\"");
+  strncat(buf, str, len);
+
+  GetLoadAlarmHighRangeStr(str, &len);
+  strcat(buf, "\",\"loadvolt_high\":\"");
+  strncat(buf, str, len);
+
+  GetLoadAlarmHisteStr(str, &len);
+  strcat(buf, "\",\"loadvolt_hist\":\"");
+  strncat(buf, str, len);
  
   /* Признак изменения сетевых настроек */ 
   GetWebReinitFlag(str, &len);

+ 4 - 2
modules/log/log.c

@@ -39,9 +39,11 @@ const char* logsStrShortRu[] =
 #endif
 #endif
 #if	defined HARDWARE_BT6706 || HARDWARE_BT6708
-    "Авария вых. напряжения",
+    "Низкое вых. напряжение",
+    "Высокое вых. напряжение",
 #endif
-    "Авария температуры",
+    "Высокая температура",
+    "Низкая температура",
     "Авария вх. напряжения",
     "Низкий заряд АКБ",
     "Авария нагрузки",

+ 4 - 2
modules/log/log.h

@@ -37,9 +37,11 @@ typedef __packed enum {
 #endif
 #endif
 #if	defined HARDWARE_BT6706 || HARDWARE_BT6708
-	LOG_ALARM_VAC_OUTPUT,
+	LOG_ALARM_VAC_LOW_OUTPUT,
+	LOG_ALARM_VAC_HIGH_OUTPUT,
 #endif
-	LOG_ALARM_TEMP,
+	LOG_ALARM_HIGH_TEMP,
+	LOG_ALARM_LOW_TEMP,
 	LOG_ALARM_LINE,
 	LOG_ALARM_LOW_BAT,
 	LOG_ALARM_POWER,

+ 131 - 27
modules/monitor/ups_monitor.c

@@ -26,15 +26,6 @@
 
 #include <stdbool.h>
 
-#define UPS_LOAD                70.0    // Нагрука (граница)
-#define UPS_LOAD_HIST           1.0     // Гистерезис нагрузки 
-
-#define UPS_TEMPERATURE         40.0    // Температура (граница)
-#define UPS_TEMPERATURE_HIST    1.0     // Гистерезис температуры 
-
-#define UPS_VAC_OUTPUT          150.0    // Выходного напряжения (граница)
-#define UPS_VAC_OUTPUT_HIST     20.0     // Гистерезис Выходного напряжения
-
 
 bool flCriticalAlarm = false;
 bool flNonCriticalAlarm = false;
@@ -62,11 +53,13 @@ void UPS_Monitor(void *params)
 	  UPS_TestFinishMonitor();
       UPS_LineFailMonitor();
 #if	defined HARDWARE_BT6706 || HARDWARE_BT6708
-      UPS_VACoutputMonitor();
+      UPS_VACoutputLowRangeMonitor();
+      UPS_VACoutputHighRangeMonitor();
 #endif
       UPS_LowBatMonitor();  
       UPS_PowerMonitor();
-      UPS_TemperatureMonitor();
+      UPS_TemperatureHighRangeMonitor();
+      UPS_TemperatureLowRangeMonitor();
       UPS_BatteryConnectMonitor();
     }
     UPS_ConnectMonitor();
@@ -430,9 +423,9 @@ void UPS_LineFailMonitor(void)
 
 #if defined HARDWARE_BT6706 || HARDWARE_BT6708
 /**
-  * @brief  Мониторинг аварии выходного напряжения
+  * @brief  Мониторинг аварии выходного напряжения по нижней границе
   */
-void UPS_VACoutputMonitor(void)
+void UPS_VACoutputLowRangeMonitor(void)
 {
 
   static uint8_t stateCurrentVACoutput = HYST_IDLE;
@@ -453,7 +446,76 @@ void UPS_VACoutputMonitor(void)
   VACoutputCurrent = UPS.VAC_out;
 
   /* Отслеживается переход через нижнию границу */
-  if (VACoutputCurrent < UPS_VAC_OUTPUT)
+  if (VACoutputCurrent < sSettings.sAlarmManager.ac_output_range.low)
+  {
+    if (stateCurrentVACoutput == HYST_IDLE)
+	{
+      LED_On(LED_MINOR_R);
+      LED_On(LED_MINOR_G);
+      stateCurrentVACoutput = HYST_DOWN;
+#if	defined HARDWARE_BT6706
+      relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 1);
+#endif
+	  log_event_data(LOG_ALARM_VAC_LOW_OUTPUT, "Авария");
+	  // Отправка трапа о завышении
+	//  SNMP_SendUserTrap(POWER_ALARM);
+	  flUpdateLog = true;
+	}
+    else{
+#if	defined HARDWARE_BT6706
+    	relay_setup_log_change(CurrROtype_Sourse, OldROtype_Sourse, DC_PRESENT);
+#endif
+    }
+  }
+  /* Отслеживается нормализация */
+  else if (VACoutputCurrent > (sSettings.sAlarmManager.ac_output_range.low + sSettings.sAlarmManager.ac_output_range.hyst))
+  {
+    if (stateCurrentVACoutput == HYST_DOWN)
+	{
+    	LED_Off(LED_MINOR_R);
+    	LED_Off(LED_MINOR_G);
+    	stateCurrentVACoutput = HYST_IDLE;
+#if	defined HARDWARE_BT6706
+	  relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 0);
+#endif
+	  log_event_data(LOG_ALARM_VAC_LOW_OUTPUT, "Норма");
+	  // Отправка трапа о нормализации
+	 // SNMP_SendUserTrap(POWER_NORM);
+	  flUpdateLog = true;
+	}
+  }
+#if	defined HARDWARE_BT6706
+  for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
+  	  OldROtype_Sourse[i] = CurrROtype_Sourse[i];
+    }
+#endif
+}
+
+/**
+  * @brief  Мониторинг аварии выходного напряжения по верхней границе
+  */
+void UPS_VACoutputHighRangeMonitor(void)
+{
+
+  static uint8_t stateCurrentVACoutput = HYST_IDLE;
+  uint8_t VACoutputCurrent;
+#if	defined HARDWARE_BT6706
+  uint8_t i = 0;
+  static bool isValueRecv = false;
+  static uint8_t OldROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
+  uint8_t CurrROtype_Sourse[OUTPUTS_TOTAL_COUNT] = {0};
+
+  for(i = 0; i < OUTPUTS_TOTAL_COUNT; i ++){
+	  CurrROtype_Sourse[i] = sSettings.sInOuts.ro_type_source[i];
+	  if(!isValueRecv)
+		  OldROtype_Sourse[i] = CurrROtype_Sourse[i];
+  }
+#endif
+
+  VACoutputCurrent = UPS.VAC_out;
+
+  /* Отслеживается переход через верхнюю границу */
+  if (VACoutputCurrent > sSettings.sAlarmManager.ac_output_range.high)
   {
     if (stateCurrentVACoutput == HYST_IDLE)
 	{
@@ -463,7 +525,7 @@ void UPS_VACoutputMonitor(void)
 #if	defined HARDWARE_BT6706
       relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 1);
 #endif
-	  log_event_data(LOG_ALARM_VAC_OUTPUT, "Авария");
+	  log_event_data(LOG_ALARM_VAC_HIGH_OUTPUT, "Авария");
 	  // Отправка трапа о завышении
 	//  SNMP_SendUserTrap(POWER_ALARM);
 	  flUpdateLog = true;
@@ -475,7 +537,7 @@ void UPS_VACoutputMonitor(void)
     }
   }
   /* Отслеживается нормализация */
-  else if (VACoutputCurrent > (UPS_VAC_OUTPUT + UPS_VAC_OUTPUT_HIST))
+  else if (VACoutputCurrent < (sSettings.sAlarmManager.ac_output_range.high - sSettings.sAlarmManager.ac_output_range.hyst))
   {
     if (stateCurrentVACoutput == HYST_UP)
 	{
@@ -485,7 +547,7 @@ void UPS_VACoutputMonitor(void)
 #if	defined HARDWARE_BT6706
 	  relay_setup_log(CurrROtype_Sourse, DC_PRESENT, 0);
 #endif
-	  log_event_data(LOG_ALARM_VAC_OUTPUT, "Норма");
+	  log_event_data(LOG_ALARM_VAC_HIGH_OUTPUT, "Норма");
 	  // Отправка трапа о нормализации
 	 // SNMP_SendUserTrap(POWER_NORM);
 	  flUpdateLog = true;
@@ -607,7 +669,7 @@ void UPS_PowerMonitor(void)
   load = UPS.Load;
 
   /* Отслеживается переход через верхнюю границу */
-  if (load > UPS_LOAD)
+  if (load > sSettings.sAlarmManager.load_range.high)
   {
 	flCriticalAlarm = true;
 	UPS.Alarm = (UPS.Alarm & 0x0e) | (1 << 0);
@@ -624,7 +686,7 @@ void UPS_PowerMonitor(void)
 	}
   }
   /* Отслеживается нормализация */
-  else if (load < (UPS_LOAD - UPS_LOAD_HIST))
+  else if (load < (sSettings.sAlarmManager.load_range.high - sSettings.sAlarmManager.load_range.hyst))
   {
 	UPS.Alarm = (UPS.Alarm & 0x0e);
     if (stateCurrent == HYST_UP)
@@ -642,9 +704,9 @@ void UPS_PowerMonitor(void)
 }
 
 /**
-  * @brief  Мониторинг температуры 
+  * @brief  Мониторинг температуры по верхней границе
   */
-void UPS_TemperatureMonitor(void)
+void UPS_TemperatureHighRangeMonitor(void)
 {
   float temperature;
   static uint8_t stateCurrent = HYST_IDLE;
@@ -652,7 +714,7 @@ void UPS_TemperatureMonitor(void)
   temperature = UPS.Temp;
 
   /* Отслеживается переход через верхнюю границу */
-  if (temperature > UPS_TEMPERATURE)
+  if (temperature > sSettings.sAlarmManager.Temprature_range.high)
   {
 	flCriticalAlarm = true;
 	UPS.Alarm = (UPS.Alarm & 0x0d) | (1 << 1);
@@ -661,23 +723,65 @@ void UPS_TemperatureMonitor(void)
 	  stateCurrent = HYST_UP;
       
 
-	  log_event_data(LOG_ALARM_TEMP, "Авария");
+	  log_event_data(LOG_ALARM_HIGH_TEMP, "Авария");
 	  // Отправка трапа о завышении 
-	  SNMP_SendUserTrap(BATTERY_TEMPERATURE_ALARM);
+	  SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_ALARM);
 	  flUpdateLog = true;
 	}
   }
   /* Отслеживается нормализация */
-  else if (temperature < (UPS_TEMPERATURE - UPS_TEMPERATURE_HIST))
+  else if (temperature < (sSettings.sAlarmManager.Temprature_range.high - sSettings.sAlarmManager.Temprature_range.hyst))
   {
 	  UPS.Alarm = (UPS.Alarm & 0x0d);
     if (stateCurrent == HYST_UP)
 	{
 	  stateCurrent = HYST_IDLE;
       
-	  log_event_data(LOG_ALARM_TEMP, "Норма");
+	  log_event_data(LOG_ALARM_HIGH_TEMP, "Норма");
 	  // Отправка трапа о нормализации 
-	  SNMP_SendUserTrap(BATTERY_TEMPERATURE_NORM);
+	  SNMP_SendUserTrap(BATTERY_HIGH_TEMPERATURE_NORM);
+	  flUpdateLog = true;
+	}
+  }
+}
+
+/**
+  * @brief  Мониторинг температуры по нижней границе
+  */
+void UPS_TemperatureLowRangeMonitor(void)
+{
+  float temperature;
+  static uint8_t stateCurrent = HYST_IDLE;
+
+  temperature = UPS.Temp;
+
+  /* Отслеживается переход через нипжнюю границу */
+  if (temperature < sSettings.sAlarmManager.Temprature_range.low)
+  {
+	flCriticalAlarm = true;
+	UPS.Alarm = (UPS.Alarm & 0x0d) | (1 << 1);
+    if (stateCurrent == HYST_IDLE)
+	{
+	  stateCurrent = HYST_DOWN;
+
+
+	  log_event_data(LOG_ALARM_LOW_TEMP, "Авария");
+	  // Отправка трапа о занижении
+	  SNMP_SendUserTrap(BATTERY_LOW_TEMPERATURE_ALARM);
+	  flUpdateLog = true;
+	}
+  }
+  /* Отслеживается нормализация */
+  else if (temperature > (sSettings.sAlarmManager.Temprature_range.low + sSettings.sAlarmManager.Temprature_range.hyst))
+  {
+	  UPS.Alarm = (UPS.Alarm & 0x0d);
+    if (stateCurrent == HYST_DOWN)
+	{
+	  stateCurrent = HYST_IDLE;
+
+	  log_event_data(LOG_ALARM_LOW_TEMP, "Норма");
+	  // Отправка трапа о нормализации
+	  SNMP_SendUserTrap(BATTERY_LOW_TEMPERATURE_NORM);
 	  flUpdateLog = true;
 	}
   }

+ 14 - 4
modules/monitor/ups_monitor.h

@@ -49,9 +49,14 @@ void UPS_LineFailMonitor(void);
 
 #if defined HARDWARE_BT6706 || HARDWARE_BT6708
 /**
-  * @brief  Мониторинг аварии выходного напряжения
+  * @brief  Мониторинг аварии выходного напряжения по нижней границе
   */
-void UPS_VACoutputMonitor(void);
+void UPS_VACoutputLowRangeMonitor(void);
+
+/**
+  * @brief  Мониторинг аварии выходного напряжения по верхней границе
+  */
+void UPS_VACoutputHighRangeMonitor(void);
 #endif
 
 /**
@@ -70,9 +75,14 @@ void UPS_Monitor(void *params);
 void UPS_PowerMonitor(void);
 
 /**
-  * @brief  Мониторинг температуры 
+  * @brief  Мониторинг температуры по верхней границе
+  */
+void UPS_TemperatureHighRangeMonitor(void);
+
+/**
+  * @brief  Мониторинг температуры по нижней границе
   */
-void UPS_TemperatureMonitor(void);
+void UPS_TemperatureLowRangeMonitor(void);
     
 /**
   * @brief  Мониторинг параметра upsParams.connect

+ 150 - 0
modules/parameters.c

@@ -982,6 +982,89 @@ void GetUPSVoltCellMaxStr(char *str, uint8_t *len)
 	*len = strlen(str);
 }
 
+// ************************************************************************** //
+//                             Параметры менеджера аварийных событий
+
+/**
+  * @brief Верхняя граница VAC
+  */
+void GetVACAlarmHighRangeStr(char *str, uint8_t *len)
+{
+  sprintf(str, "%d", (int)sSettings.sAlarmManager.ac_output_range.high);
+
+  *len = strlen(str);
+}
+
+/**
+  * @brief Нижняя граница VAC
+  */
+void GetVACAlarmLowRangeStr(char *str, uint8_t *len)
+{
+  sprintf(str, "%d", (int)sSettings.sAlarmManager.ac_output_range.low);
+
+  *len = strlen(str);
+}
+
+/**
+  * @brief Гистерезис (VAC)
+  */
+void GetVACAlarmHisteStr(char *str, uint8_t *len)
+{
+  sprintf(str, "%0.1f", sSettings.sAlarmManager.ac_output_range.hyst);
+
+  *len = strlen(str);
+}
+
+/**
+  * @brief Верхняя граница температуры
+  */
+void GetTemperatureAlarmHighRangeStr(char *str, uint8_t *len)
+{
+  sprintf(str, "%d", (int)sSettings.sAlarmManager.Temprature_range.high);
+
+  *len = strlen(str);
+}
+
+/**
+  * @brief Нижняя граница температуры
+  */
+void GetTemperatureAlarmLowRangeStr(char *str, uint8_t *len)
+{
+  sprintf(str, "%d", (int)sSettings.sAlarmManager.Temprature_range.low);
+
+  *len = strlen(str);
+}
+
+/**
+  * @brief Гистерезис (температура)
+  */
+void GetTemperatureAlarmHisteStr(char *str, uint8_t *len)
+{
+  sprintf(str, "%0.1f", sSettings.sAlarmManager.Temprature_range.hyst);
+
+  *len = strlen(str);
+}
+
+/**
+  * @brief Верхняя граница нагрузки
+  */
+void GetLoadAlarmHighRangeStr(char *str, uint8_t *len)
+{
+  sprintf(str, "%d", (int)sSettings.sAlarmManager.load_range.high);
+
+  *len = strlen(str);
+}
+
+/**
+  * @brief Гистерезис (нагрузки)
+  */
+void GetLoadAlarmHisteStr(char *str, uint8_t *len)
+{
+  sprintf(str, "%0.1f", sSettings.sAlarmManager.load_range.hyst);
+
+  *len = strlen(str);
+}
+
 // ************************************************************************** //
 //                             Установка параметрв
 // ************************************************************************** //
@@ -1467,4 +1550,71 @@ void SetUPSVoltCellMaxStr(char *str)
 	sSettings.UPS_Setting.Ucellmax = atof(str);
 }
 
+// ************************************************************************** //
+//                             Параметры менеджера аварий
+
+/**
+  * @brief  Верхняя граница VAC
+  */
+void SetVACAlarmHighRangeStr(char *str)
+{
+	sSettings.sAlarmManager.ac_output_range.high = atof(str);
+}
+
+/**
+  * @brief  Нижняя граница VAC
+  */
+void SetVACAlarmLowRangeStr(char *str)
+{
+	sSettings.sAlarmManager.ac_output_range.low = atof(str);
+}
+
+/**
+  * @brief  Гистерезис (VAC)
+  */
+void SetVACAlarmHisteStr(char *str)
+{
+	sSettings.sAlarmManager.ac_output_range.hyst = atof(str);
+}
+
+/**
+  * @brief  Верхняя граница температуры
+  */
+void SetTemperatureAlarmHighRangeStr(char *str)
+{
+	sSettings.sAlarmManager.Temprature_range.high = atof(str);
+}
+
+/**
+  * @brief  Нижняя граница температуры
+  */
+void SetTemperatureAlarmLowRangeStr(char *str)
+{
+	sSettings.sAlarmManager.Temprature_range.low = atof(str);
+}
+
+/**
+  * @brief  Гистерезис (температура)
+  */
+void SetTemperatureAlarmHisteStr(char *str)
+{
+	sSettings.sAlarmManager.Temprature_range.hyst = atof(str);
+}
+
+/**
+  * @brief  Верхняя граница нагрузки
+  */
+void SetLoadAlarmHighRangeStr(char *str)
+{
+	sSettings.sAlarmManager.load_range.high = atof(str);
+}
+
+/**
+  * @brief  Гистерезис (нагрузки)
+  */
+void SetLoadAlarmHistStr(char *str)
+{
+	sSettings.sAlarmManager.load_range.hyst = atof(str);
+}
+
 /********************************* (C) РОТЕК **********************************/

+ 86 - 0
modules/parameters.h

@@ -408,6 +408,49 @@ void GetUPSVoltCellMinStr(char *str, uint8_t *len);
   */
 void GetUPSVoltCellMaxStr(char *str, uint8_t *len);
 
+// ************************************************************************** //
+//                             Параметры менеджера аварийных событий
+
+/**
+  * @brief Верхняя граница VAC
+  */
+void GetVACAlarmHighRangeStr(char *str, uint8_t *len);
+
+/**
+  * @brief Нижняя граница VAC
+  */
+void GetVACAlarmLowRangeStr(char *str, uint8_t *len);
+
+/**
+  * @brief Гистерезис (VAC)
+  */
+void GetVACAlarmHisteStr(char *str, uint8_t *len);
+
+/**
+  * @brief Верхняя граница температуры
+  */
+void GetTemperatureAlarmHighRangeStr(char *str, uint8_t *len);
+
+/**
+  * @brief Нижняя граница температуры
+  */
+void GetTemperatureAlarmLowRangeStr(char *str, uint8_t *len);
+
+/**
+  * @brief Гистерезис (температура)
+  */
+void GetTemperatureAlarmHisteStr(char *str, uint8_t *len);
+
+/**
+  * @brief Верхняя граница нагрузки
+  */
+void GetLoadAlarmHighRangeStr(char *str, uint8_t *len);
+
+/**
+  * @brief Гистерезис (нагрузки)
+  */
+void GetLoadAlarmHisteStr(char *str, uint8_t *len);
+
 // ************************************************************************** //
 //                             Установка параметрв
 // ************************************************************************** //
@@ -634,6 +677,49 @@ void SetUPSVoltCellMinStr(char *str);
   */
 void SetUPSVoltCellMaxStr(char *str);
 
+// ************************************************************************** //
+//                             Параметры менеджера аварий
+
+/**
+  * @brief  Верхняя граница VAC
+  */
+void SetVACAlarmHighRangeStr(char *str);
+
+/**
+  * @brief  Нижняя граница VAC
+  */
+void SetVACAlarmLowRangeStr(char *str);
+
+/**
+  * @brief  Гистерезис (VAC)
+  */
+void SetVACAlarmHisteStr(char *str);
+
+/**
+  * @brief  Верхняя граница температуры
+  */
+void SetTemperatureAlarmHighRangeStr(char *str);
+
+/**
+  * @brief  Нижняя граница температуры
+  */
+void SetTemperatureAlarmLowRangeStr(char *str);
+
+/**
+  * @brief  Гистерезис (температура)
+  */
+void SetTemperatureAlarmHisteStr(char *str);
+
+/**
+  * @brief  Верхняя граница нагрузки
+  */
+void SetLoadAlarmHighRangeStr(char *str);
+
+/**
+  * @brief  Гистерезис (нагрузки)
+  */
+void SetLoadAlarmHistStr(char *str);
+
 
 #endif /* #ifndef PARAMETERS_H */
 

+ 21 - 0
modules/settings_api.c

@@ -144,6 +144,24 @@ void SETTINGS_SetUPSSettingsDef(void)
   sSettings.UPS_Setting.Ucellmax = 2.27;
 }
 
+/**
+  * @brief  Установить наcтройки менеджера Аварий по умолчанию
+  */
+void SETTINGS_SetAlarmManagerDef(void)
+{
+	sSettings.sAlarmManager.load_range.high = 70.0;
+	sSettings.sAlarmManager.load_range.low = 0;
+	sSettings.sAlarmManager.load_range.hyst = 1;
+
+	sSettings.sAlarmManager.ac_output_range.high = 250.0;
+	sSettings.sAlarmManager.ac_output_range.low = 150.0;
+	sSettings.sAlarmManager.ac_output_range.hyst = 20.0;
+
+	sSettings.sAlarmManager.Temprature_range.high = 70.0;
+	sSettings.sAlarmManager.Temprature_range.low = -40.0;
+	sSettings.sAlarmManager.Temprature_range.hyst = 1;
+}
+
 /**
   * @brief  Установить флаги по умолчанию
   */
@@ -308,6 +326,7 @@ void SETTINGS_SetPartDefault(void)
   SETTINGS_SetBootParamsDef();
   SETTINGS_SetSnmpDef();
   SETTINGS_SetFlagsDef();
+  SETTINGS_SetAlarmManagerDef();
   SETTINGS_SetUPSSettingsDef();
  // SETTINGS_SetServiceDef();
   SETTINGS_SetSntpDef();
@@ -337,6 +356,7 @@ void SETTINGS_SetAllDefault(void)
   SETTINGS_SetFlagsDef();
   SETTINGS_SetServiceDef();
   SETTINGS_SetSntpDef();
+  SETTINGS_SetAlarmManagerDef();
   SETTINGS_SetUPSSettingsDef();
 #ifndef HARDWARE_BT6708
   SETTINGS_SetINOUTSDef();
@@ -374,6 +394,7 @@ void SETTINGS_SetDefaultDebug(void)
   SETTINGS_SetINOUTSDef();
 #endif
   SETTINGS_SetUPSSettingsDef();
+  SETTINGS_SetAlarmManagerDef();
   //SETTINGS_SetInfoDef();
 #ifdef HARDWARE_BT6702
   SETTINGS_SetRADIUSDef();

+ 26 - 0
modules/settings_api.h

@@ -202,6 +202,26 @@ typedef enum
     DI_MAX_ACT
 } din_type_act_t;
 
+/**
+  * @brief  Настройки диапазона уровней Аварий.
+  */
+typedef struct
+{
+    float high;
+    float low;
+    float hyst;
+} ALARM_LEVEL_RANGE_t;
+
+/**
+  * @brief  Настройки Аварий.
+  */
+typedef struct
+{
+    ALARM_LEVEL_RANGE_t load_range;
+    ALARM_LEVEL_RANGE_t ac_output_range;
+    ALARM_LEVEL_RANGE_t Temprature_range;
+} ALARM_MNGR_t;
+
 /**
   * @brief  Настройки ИБП.
   */
@@ -269,6 +289,7 @@ typedef struct
   INOUTS_t		sInOuts;
 #endif
   UPS_Setting_t UPS_Setting;
+  ALARM_MNGR_t  sAlarmManager;
 #ifdef HARDWARE_BT6702
   RADIUS_t		sRADIUS;
   //char			our_srv_crt[1205];
@@ -316,6 +337,11 @@ void SETTINGS_SetSnmpDef(void);
   */
 void SETTINGS_SetInfoDef(void);
 
+/**
+  * @brief  Установить наcтройки менеджера Аварий по умолчанию
+  */
+void SETTINGS_SetAlarmManagerDef(void);
+
 /**
   * @brief  Установить флаги по умолчанию
   */