|
|
@@ -1771,7 +1771,40 @@ static void channelStatusMonitoring(void* conn)
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
-
|
|
|
+ else if (strcmp(_over_chn_pwr_request.type, "batteryReset") == 0) // 耗电量复位
|
|
|
+ {
|
|
|
+ GlobalPowerManger *_globalPowerMangerTemp = NULL;
|
|
|
+ char *pCHlist;
|
|
|
+ char *pCHListSave;
|
|
|
+ pCHlist = strtok_r(_over_chn_pwr_request.strProductChIds, ",", &pCHListSave);
|
|
|
+ // 其他版本功能
|
|
|
+ while (pCHlist != NULL)
|
|
|
+ {
|
|
|
+
|
|
|
+ int g_pwr_ch_id = atoi(pCHlist);
|
|
|
+ _globalPowerMangerTemp=NULL;
|
|
|
+ list_for_each_entry(_globalPowerMangerTemp, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
+ {
|
|
|
+ if (_over_chn_pwr_request.productChId == g_pwr_ch_id)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if (_globalPowerMangerTemp != NULL)
|
|
|
+ {
|
|
|
+ GlobalTreeACManager *_globalTACManager = NULL;
|
|
|
+ list_for_each_entry(_globalTACManager, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
|
|
|
+ {
|
|
|
+
|
|
|
+ if (g_switch_set_t_ac_phchn_reset(&__globalDeviceManage._globalRelaySampManger,_globalTACManager->product_saddr,_globalTACManager->product_ch_addr)<0)
|
|
|
+ {
|
|
|
+ log_e("Error: phchn_reset");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+ pCHlist = strtok_r(NULL, ",", &pCHListSave);
|
|
|
+ }
|
|
|
+ }
|
|
|
quit:
|
|
|
cJSON_Delete(cjson);
|
|
|
http_reply(conn, 200, ack_str);
|
|
|
@@ -2334,6 +2367,205 @@ static void sensorStatusMonitoring(void* conn)
|
|
|
cJSON_free((void*)ack_str);
|
|
|
}
|
|
|
|
|
|
+/**
|
|
|
+ * @brief 设置通道报警阈值
|
|
|
+ *
|
|
|
+ * 根据给定的通道ID,设置报警请求的通道阈值。
|
|
|
+ *
|
|
|
+ * @param _alarm_request_info 报警请求信息指针
|
|
|
+ * @param nChID 通道ID
|
|
|
+ *
|
|
|
+ * @return 指向设置后的通道阈值字符串的指针
|
|
|
+ */
|
|
|
+char* setThresholdToCh(_AlarmRequestInfo* _alarm_request_info,int nChID)
|
|
|
+{
|
|
|
+ int ret = -1 ;
|
|
|
+ char *ack_str = NULL;
|
|
|
+ GlobalPowerManger *_globalPowerMangerSaveTemp;
|
|
|
+ // int g_pwr_ch_id = atoi(_alarm_request_info->_pwr_info.productChId);
|
|
|
+ int g_pwr_ch_id = nChID;
|
|
|
+ if (g_pwr_ch_id == 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp = &__globalDeviceManage._globalPowerManger;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ list_for_each_entry(_globalPowerMangerSaveTemp, &__globalDeviceManage._globalPowerManger.list, list)
|
|
|
+ {
|
|
|
+ // ID相等 记录信息
|
|
|
+ if (_globalPowerMangerSaveTemp->product_ch_id == nChID)
|
|
|
+ {
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 更新参数
|
|
|
+ if (_alarm_request_info->_pwr_info.voltageUpperValue)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold = atof(_alarm_request_info->_pwr_info.voltageUpperValue);
|
|
|
+ }
|
|
|
+ if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_threshold != 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_upper_enable = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_alarm_request_info->_pwr_info.voltageDownValue)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold = atof(_alarm_request_info->_pwr_info.voltageDownValue);
|
|
|
+ }
|
|
|
+ if (_globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_threshold != 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_lower_enable = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_alarm_request_info->_pwr_info.currentUpperValue)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold = atof(_alarm_request_info->_pwr_info.currentUpperValue);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_threshold != 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_cur_upper_enable = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_alarm_request_info->_pwr_info.powerUpperValue)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold = atof(_alarm_request_info->_pwr_info.powerUpperValue);
|
|
|
+ }
|
|
|
+ if (_globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_threshold != 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwr_upper_enable = 0;
|
|
|
+ }
|
|
|
+
|
|
|
+ if (_alarm_request_info->_pwr_info.alarmContentUpperValue)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold = atof(_alarm_request_info->_pwr_info.alarmContentUpperValue);
|
|
|
+ }
|
|
|
+ if (_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_threshold != 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 0;
|
|
|
+ }
|
|
|
+ //_globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_upper_enable = 1 ;
|
|
|
+
|
|
|
+ char Alarm_Ctrl_type[16];
|
|
|
+ memset(Alarm_Ctrl_type, 0, sizeof(Alarm_Ctrl_type));
|
|
|
+ sprintf(Alarm_Ctrl_type, "%d", ALARM_CTRL_CLOSE_CH);
|
|
|
+
|
|
|
+ if (_alarm_request_info->_pwr_info.currentUpperAction && strcmp(_alarm_request_info->_pwr_info.currentUpperAction, Alarm_Ctrl_type) == 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_cur_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
|
|
|
+
|
|
|
+ if (_alarm_request_info->_pwr_info.voltageUpperAction && strcmp(_alarm_request_info->_pwr_info.voltageUpperAction, Alarm_Ctrl_type) == 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
|
|
|
+
|
|
|
+ if (_alarm_request_info->_pwr_info.voltageDownAction && strcmp(_alarm_request_info->_pwr_info.voltageDownAction, Alarm_Ctrl_type) == 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_vol_over_lower_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
|
|
|
+
|
|
|
+ if (_alarm_request_info->_pwr_info.powerUpperAction && strcmp(_alarm_request_info->_pwr_info.powerUpperAction, Alarm_Ctrl_type) == 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
|
|
|
+
|
|
|
+ if (_alarm_request_info->_pwr_info.alarmContentUpperAction && strcmp(_alarm_request_info->_pwr_info.alarmContentUpperAction, Alarm_Ctrl_type) == 0)
|
|
|
+ {
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_CLOSE_CH;
|
|
|
+ }
|
|
|
+ else
|
|
|
+ _globalPowerMangerSaveTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
|
|
|
+
|
|
|
+ if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
|
|
|
+ {
|
|
|
+
|
|
|
+ GlobalTreeACManager *_pTreeACPowerMangerTemp = NULL;
|
|
|
+ list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerSaveTemp->list_Tree_AC, list_Tree_AC)
|
|
|
+ {
|
|
|
+ memcpy(_pTreeACPowerMangerTemp->global_over_manager, _globalPowerMangerSaveTemp->global_over_manager, sizeof(GlobalOverManager));
|
|
|
+ ret = g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,
|
|
|
+ _globalPowerMangerSaveTemp->product_ch_type,
|
|
|
+ _pTreeACPowerMangerTemp->product_saddr,
|
|
|
+ _pTreeACPowerMangerTemp->product_ch_addr,
|
|
|
+ _globalPowerMangerSaveTemp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ ret = g_switch_set_all_single_threshold(&__globalDeviceManage._globalRelaySampManger,
|
|
|
+ _globalPowerMangerSaveTemp->product_ch_type,
|
|
|
+ _globalPowerMangerSaveTemp->product_saddr,
|
|
|
+ _globalPowerMangerSaveTemp->product_ch_addr,
|
|
|
+ _globalPowerMangerSaveTemp);
|
|
|
+ }
|
|
|
+
|
|
|
+ if (ret < 0)
|
|
|
+ {
|
|
|
+ log_e("power threshold update error.ret:%d,%s", ret, modbus_strerror(errno));
|
|
|
+ /* code */
|
|
|
+ }
|
|
|
+ if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
|
|
|
+ {
|
|
|
+ // 写入数据库
|
|
|
+ ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
|
|
|
+ __globalDeviceManage._globalDevInfo.product_id,
|
|
|
+ _globalPowerMangerSaveTemp->product_ch_id,
|
|
|
+ _globalPowerMangerSaveTemp);
|
|
|
+ if (ret != 0)
|
|
|
+ log_e("power threshold update error.");
|
|
|
+ GlobalTreeACManager *_pTreeACPowerMangerTemp = NULL;
|
|
|
+ list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerSaveTemp->list_Tree_AC, list_Tree_AC)
|
|
|
+ {
|
|
|
+ memcpy(_pTreeACPowerMangerTemp->global_over_manager, _globalPowerMangerSaveTemp->global_over_manager, sizeof(GlobalOverManager));
|
|
|
+ ret = dev_update_t_ac_power_manage_over_info(__globalDeviceManage.db, _pTreeACPowerMangerTemp);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ else
|
|
|
+ {
|
|
|
+ // 写入数据库
|
|
|
+ ret = dev_update_power_manage_over_info(__globalDeviceManage.db,
|
|
|
+ __globalDeviceManage._globalDevInfo.product_id,
|
|
|
+ _globalPowerMangerSaveTemp->product_ch_id,
|
|
|
+ _globalPowerMangerSaveTemp);
|
|
|
+ if (ret != 0)
|
|
|
+ log_e("power threshold update error.");
|
|
|
+ }
|
|
|
+ // 返回数据
|
|
|
+ ack_str = ctrl_sts_ack_to_json();
|
|
|
+ return ack_str;
|
|
|
+}
|
|
|
+
|
|
|
/// @brief 告警保护
|
|
|
/// @param stream
|
|
|
static void alarmProtect(void *conn)
|
|
|
@@ -2472,9 +2704,11 @@ static void alarmProtect(void *conn)
|
|
|
}
|
|
|
|
|
|
//拿到参数保存
|
|
|
- GlobalPowerManger* _globalPowerMangerSaveTemp ;
|
|
|
+ //GlobalPowerManger* _globalPowerMangerSaveTemp ;
|
|
|
// int g_pwr_ch_id = atoi(_alarm_request_info._pwr_info.productChId);
|
|
|
int g_pwr_ch_id = _alarm_request_info._pwr_info.productChId;
|
|
|
+ ack_str=setThresholdToCh(&_alarm_request_info,g_pwr_ch_id);
|
|
|
+ /*
|
|
|
if (g_pwr_ch_id ==0)
|
|
|
{
|
|
|
_globalPowerMangerSaveTemp=&__globalDeviceManage._globalPowerManger;
|
|
|
@@ -2595,7 +2829,6 @@ static void alarmProtect(void *conn)
|
|
|
if (ret<0)
|
|
|
{
|
|
|
log_e("power threshold update error.ret:%d,%s",ret,modbus_strerror(errno));
|
|
|
- /* code */
|
|
|
}
|
|
|
if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
|
|
|
{
|
|
|
@@ -2624,7 +2857,24 @@ static void alarmProtect(void *conn)
|
|
|
log_e("power threshold update error.");
|
|
|
}
|
|
|
//返回数据
|
|
|
- ack_str = ctrl_sts_ack_to_json();
|
|
|
+ ack_str = ctrl_sts_ack_to_json();*/
|
|
|
+ }
|
|
|
+ else if (strcmp(_alarm_request_info.type, "batchSave") == 0) // 批量设置
|
|
|
+ {
|
|
|
+ if (!_alarm_request_info.user_token)
|
|
|
+ {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ char *pCHlist;
|
|
|
+ char *pCHListSave;
|
|
|
+ pCHlist = strtok_r(_alarm_request_info.strProductChIds, ",", &pCHListSave);
|
|
|
+ // 其他版本功能
|
|
|
+ while (pCHlist != NULL)
|
|
|
+ {
|
|
|
+ int g_pwr_ch_id = atoi(pCHlist);
|
|
|
+ ack_str = setThresholdToCh(&_alarm_request_info, g_pwr_ch_id);
|
|
|
+ pCHlist = strtok_r(NULL, ",", &pCHListSave);
|
|
|
+ }
|
|
|
}
|
|
|
else if(strcmp(_alarm_request_info.type,"sensorThresholdList")==0)//传感器阈值查询
|
|
|
{
|