Browse Source

add bat test, shutdown command in private mib

balbekova 7 năm trước cách đây
mục cha
commit
68444d60f8

+ 4 - 7
docs/SmartUPS.MIB

@@ -75,13 +75,10 @@ RoTeK-swt-BT-BT-6702-signals-MIB DEFINITIONS ::= BEGIN
     ACCESS  write
     STATUS  current
     DESCRIPTION
-    "0 - cancel shutdown
-    1 - shutdown
-    m,n - shut UPS output off in <n> minutes
-  	and waiting for <m> minutes then turn on 
-  	UPS output again
-  	m - 1 - 10
-  	n - 1 - 9999"
+    "Управление отключением нагрузки ИБП:
+	0 - Остановить процедуру отключения нагрузки
+	n - Отключить нагрузку на n минут
+	n: 0.2, 0.3, .., 1, 2, .., 10"
     ::= { signals 8 }
 	
 	DI0 OBJECT-TYPE

+ 56 - 7
modules/Ethernet/private_mib.c

@@ -13,6 +13,7 @@
 #include "trap_api.h"
 #include "common_config.h"
 #include "log.h"
+#include "megatec.h"
 
 #include "FreeRTOS.h"
 
@@ -29,6 +30,8 @@
   */
 extern SETTINGS_t sSettings;
 
+extern float TimeParamFloat;
+
 extern void ocstrncpy(u8_t *dst, u8_t *src, u16_t n);
 
 char paramStr[255];
@@ -477,6 +480,7 @@ static void signals_set_value (struct obj_def *od, u16_t len, void *value)
   uint32_t val;
   char *val_string;
   char str[20];
+  int8_t res = 0;
 
   memset(str, 0, 20);
   
@@ -520,12 +524,47 @@ static void signals_set_value (struct obj_def *od, u16_t len, void *value)
 	  }
 	  break;
 	case 7: /* BatTest */
-	  val_string = (char*)value;
-
+	  val =*((s32_t*)value);
+	  if(val == 0){
+		  res = ups_metac_service_pdu(ups_cancel_test);
+		  if(res == 1){
+			  log_event_data(LOG_TEST_UPS, "Администратор(Останов)");
+		  }
+	  }
+	  else if(val > 0 && val < 100){
+		  TimeParam = val;
+		  res = ups_metac_service_pdu(ups_test_time);
+		  if(res == 1){
+			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
+		  }
+	  }
+	  else if(val == 100){
+		  res = ups_metac_service_pdu(ups_test_10sec);
+		  if(res == 1){
+			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
+		  }
+	  }
+	  else if(val == 999){
+		  res = ups_metac_service_pdu(ups_test_low_bat);
+		  if(res == 1){
+			  log_event_data(LOG_TEST_UPS, "Администратор (Запущен)");
+		  }
+	  }
 	  break;
 	case 8: /* Shutdown UPS */
 	  val_string = (char*)value;
-
+	  float shtdn_val = atof(val_string);
+	  if(shtdn_val == 0){
+		  res = ups_metac_service_pdu(ups_cancel_shut_down);
+		 	if(res == 1)
+		 		log_event_data(LOG_SHUTDOWN_UPS, "Администратор(Останов)");
+	  }
+	  else{
+		TimeParamFloat = shtdn_val;
+		res = ups_metac_service_pdu(ups_shutdown);
+		if(res == 1)
+			log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
+	  }
 	  break;
     default :
     break;
@@ -546,6 +585,7 @@ static u8_t signals_set_test (struct obj_def *od, u16_t len, void *value)
 {
   u8_t id, set_ok;
   char *val_string;
+  int32_t val;
 
   LWIP_UNUSED_ARG(value);
   set_ok = 0;
@@ -567,7 +607,7 @@ static u8_t signals_set_test (struct obj_def *od, u16_t len, void *value)
       }
       break; 
 	case 5: /* DO1 */
-		if ( len >= 1 )
+		if ( len <= 1 )
 	    {
 		   val_string = (char*)value;
 		   if(atoi(val_string) <= 1){
@@ -577,7 +617,7 @@ static u8_t signals_set_test (struct obj_def *od, u16_t len, void *value)
 	    }
 	  break;
 	case 6: /* DO2 */
-		if ( len >= 1 )
+		if ( len <= 1 )
 		{
 		   val_string = (char*)value;
 		   if(atoi(val_string) <= 1){
@@ -587,10 +627,19 @@ static u8_t signals_set_test (struct obj_def *od, u16_t len, void *value)
 		}
 	  break;
 	case 7: /* BatTest */
-
+	   val = *((s32_t*)value);
+	   if((val >= 0 && val <= 100) || val == 999){
+		   set_ok = 1;
+	   }
 	  break;
 	case 8: /* Shutdown UPS */
-
+		if ( len <= 3 )
+		{
+		   val_string = (char*)value;
+		   if(atof(val_string) <= 10){
+			set_ok = 1;
+		   }
+		}
 	  break;
   };
   

+ 8 - 5
modules/HTTP_Server/http_server.c

@@ -1399,7 +1399,7 @@ void HTTP_UPSTest(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *lenBuf
 		  res = ups_metac_service_pdu(ups_cancel_test);
 		  if(res == 1 || res == 0){
 			  strcat(bufOut, "Тест остановлен!");
-			  log_event_data(LOG_TEST_UPS, "Администратор (Остановлен)");
+			  log_event_data(LOG_TEST_UPS, "Администратор(Останов)");
 		  }
 		  if(res == -1)
 			  strcat(bufOut, "Тест не удалось остановить!");
@@ -1451,9 +1451,11 @@ void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *le
 	  strncpy(tempValue, (valueLen+1), (strlen(valueLen)-2));
 	  if (strcmp(tempValue, "\"cancel\"") == 0){
 		  res = ups_metac_service_pdu(ups_cancel_shut_down);
-		  if(res == 1 || res == 0)
+		  if(res == 1){
+			  log_event_data(LOG_SHUTDOWN_UPS, "Администратор(Останов)");
 			  strcat(bufOut, "Выключение ИБП отменено!");
-		  if(res == -1)
+		  }
+		  else
 			  strcat(bufOut, "Выключение ИБП не удалось отменить!");
 		  *lenBufOut = strlen(bufOut);
 	  }
@@ -1470,9 +1472,10 @@ void HTTP_UPSshutdown(char *bufIn, char *bufOut, uint16_t lenBufIn, uint16_t *le
 		  strncpy(tempValue2, (valueLen+2), (strlen(valueLen) - 2));
 		  TimeParam2 = atoi(tempValue2);
 		  res = ups_metac_service_pdu(ups_shutdown_restore);
-		  if(res == 1 || res == 0)
+		  if(res == 1){
 			  strcat(bufOut, "Перезагрузка ИБП!");
-		  if(res == -1)
+			  log_event_data(LOG_SHUTDOWN_UPS, "Администратор");
+		  }else
 			  strcat(bufOut, "Отмена перезагрузки ИБП!");
 		  *lenBufOut = strlen(bufOut);
 	  }

+ 14 - 0
modules/MegaTec/megatec.c

@@ -21,6 +21,7 @@
 
 #define UPS_PDU_MAX_LEN 50
 
+float TimeParamFloat = 0;
 uint16_t TimeParam = 0;
 uint16_t TimeParam2 = 0;
 bool megatec_send = true;
@@ -89,7 +90,20 @@ void send_MegaTec_cmd(cmdMegaTecEnums_t command)
 		ups_send_block(req, strlen(req));
 	}
 	else if(command == ups_shutdown){
+		uint8_t req[10];
 
+		memset(req, 0, 10);
+		if(TimeParamFloat >= 1 && TimeParamFloat < 10)
+		{
+			sprintf(req, "%s0%f\r", MegaTecCMD[command], TimeParamFloat);
+		}
+		else if(TimeParamFloat < 1){
+			sprintf(req, "%s.%f\r", MegaTecCMD[command], 10*TimeParamFloat);
+		}
+		else{
+			sprintf(req, "%s%f\r", MegaTecCMD[command], TimeParamFloat);
+		}
+		ups_send_block(req, strlen(req));
 	}
 	else if(command == ups_shutdown_restore){
 		uint8_t req[10];

+ 6 - 2
modules/log/log.c

@@ -18,7 +18,7 @@ const char* logsStrShortRu[] =
     "Сохранение настроек",
     "Авторизация",
     "Тест ИБП",
-    "Выключение ИБП",
+    "Откл. нагрузки ИБП",
     "Авария дискр. входа 1",
     "Состояние выхода 1",
     "Состояние выхода 2",
@@ -232,7 +232,7 @@ void log_event_data(log_type_t type, char *data)
 
 	entry_data.timestamp = 0;
 	entry_data.type = type;
-	strncpy(entry_data.data, data, 50);
+	strncpy(entry_data.data, data, 49);
 
 	log_append(&entry_data);
 }
@@ -307,6 +307,7 @@ void LOG_GetPage(char *str, uint32_t page)
 		}
 		entry.type = LOG_VALUE;
 		log_fetch(&entry, portMAX_DELAY);
+		entry.data[49] = 0;
 		strncat(str, entry.data, strlen(entry.data));
 		TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);
 		sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i",  rtc_data.date, rtc_data.month,
@@ -334,6 +335,7 @@ uint32_t LOG_GetData(int ptr, char *str, uint32_t size, bool start)
 	{
 		entry.type = LOG_VALUE;
 		log_fetch(&entry, portMAX_DELAY);
+		entry.data[49] = 0;
 		strncat(str, &entry.data[1], (strlen(entry.data) - 1));
 		TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);
 		sprintf(buf, "%02i.%02i.%02i %02i:%02i:%02i",  rtc_data.date, rtc_data.month,
@@ -380,6 +382,7 @@ void History_GetPage(char *str, uint32_t page)
 		strcat(str, "\"");
 		strncat(str, logsStrShortRu[entry.type], (strlen(logsStrShortRu[entry.type]) ));
 		strcat(str, ";");
+		entry.data[49] = 0;
 		strncat(str, entry.data, (strlen(entry.data) ));
 		strcat(str, ";");
 		TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);
@@ -412,6 +415,7 @@ uint32_t History_GetData(int ptr, char *str, uint32_t size, bool start)
 		log_fetch(&entry, portMAX_DELAY);
 		strncat(temp_str, logsStrShortRu[entry.type], (strlen(logsStrShortRu[entry.type])));
 		strcat(temp_str, ";");
+		entry.data[49] = 0;
 		strncat(temp_str, entry.data, (strlen(entry.data)));
 		strcat(temp_str, ";");
 		TM_RTC_GetDateTimeFromUnix(&rtc_data, entry.timestamp);