Przeglądaj źródła

[megatec]add getting temperature by cmd QTPR (only for voltronic)

balbekova 1 rok temu
rodzic
commit
75941ecd42
2 zmienionych plików z 39 dodań i 2 usunięć
  1. 38 2
      modules/MegaTec/megatec.c
  2. 1 0
      modules/MegaTec/megatec.h

+ 38 - 2
modules/MegaTec/megatec.c

@@ -103,6 +103,7 @@ const char *MegaTecCMD[] = {
     "QFLAG\r",
     "PEL\r",
     "BT\r",
+    "QTPR\r",
 };
 
 extern bool flUpdateLog;
@@ -283,6 +284,14 @@ void ups_status_response(char *data)
 #endif
 
     if (flUpdateLog) {
+        if(sSettings.UPS_Setting.type_ups == ups_voltronic) {
+            char temperature_str[5];
+            sprintf(temperature_str, "%3.1f", UPS.Temp);
+            for(uint8_t k = 0; k < 4; k++){
+                data[33 + k] = temperature_str[k];
+            }
+            
+        }
         flUpdateLog = false;
         log_add(data);
     }
@@ -343,7 +352,9 @@ void ups_status_response(char *data)
     len = get_ups_param(data, " ", value);
     data += (len + 1);
     if (len > 0) {
-        UPS.Temp = atof(value);
+        if(sSettings.UPS_Setting.type_ups != ups_voltronic) { 
+            UPS.Temp = atof(value);
+        }
     }
 
     len = get_ups_param(data, "\r", value);
@@ -962,6 +973,28 @@ void ups_kstar_status_response(char *data)
 
 }
 
+void ups_temperature_response(char *data)
+{
+    char value[20];
+    uint8_t len = 0;
+
+    if (data[0] != '(') {
+        return;
+    }
+    UPS.Present = UPS_CONNECTED;
+    UPS.Flag_Present = true;
+    UPS.cnt_err_ups = 0;
+
+    data += 13;
+
+    len = get_ups_param(data, " ", value);
+    data += (len + 1);
+    if (len > 0) {
+        UPS.Temp = atof(value);
+    }
+    
+}
+
 void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
 {
     switch (command) {
@@ -1017,6 +1050,9 @@ void ups_megatec_process_pdu(cmdMegaTecEnums_t command)
         case ups_kstar_status:
             ups_kstar_status_response(ups_pdu.data);
             break;
+        case ups_temperature:
+            ups_temperature_response(ups_pdu.data);
+            break;
         default:
             break;
     }
@@ -1141,7 +1177,7 @@ void kstar_mode(void)
 void request_task(void *params)
 {
     uint8_t kestar_req[4] = { ups_status_req, ups_remain_time_reg, ups_info, ups_kstar_status};
-    uint8_t voltronic_req[8] = {ups_status_req, ups_akb_info, ups_model_req, ups_mode_req, ups_version_req, ups_version2_req, ups_serial_req, ups_warning_status};//
+    uint8_t voltronic_req[9] = {ups_temperature, ups_status_req, ups_akb_info, ups_model_req, ups_mode_req, ups_version_req, ups_version2_req, ups_serial_req, ups_warning_status};//
     uint8_t num_req = 0;
     uint8_t *req;
     bool flag_init_ups = false;

+ 1 - 0
modules/MegaTec/megatec.h

@@ -56,6 +56,7 @@ typedef enum{
 	ups_qflag_status,
 	ups_cmd_enable_flag_l,
 	ups_kstar_status,
+	ups_temperature,
 
 	MegaTec_cmd_max
 } cmdMegaTecEnums_t;