增加控制功能

This commit is contained in:
zjk
2025-05-17 11:21:34 +08:00
parent 8585f0dd51
commit fb23554408
5 changed files with 532 additions and 4 deletions
+62 -2
View File
@@ -1,5 +1,6 @@
#include "httpserver.h"
#include "index.h"
#include "dashboard.h"
#include "../PowerManger.h"
#include "mongoose.h"
#include <iostream>
@@ -59,6 +60,40 @@ void HttpServer::handleWebSocketEvent(struct mg_connection* c, int ev, void* ev_
LOG_F(INFO, "Upgrading to WebSocket: id=%lu fd=%d", c->id, c->fd);
mg_ws_upgrade(c, hm, nullptr);
LOG_F(INFO, "WebSocket upgrade completed: id=%lu fd=%d", c->id, c->fd);
} else if (mg_match(hm->uri, mg_str("/dashboard"), NULL)) {
// 返回仪表盘HTML
mg_http_reply(c, 200, "Content-Type: text/html; charset=utf-8\r\n", DASHBOARD_HTML.c_str());
} else if (mg_match(hm->uri, mg_str("/control"), NULL)) {
// 处理断路器控制请求
if (mg_strcmp(hm->method, mg_str("POST")) == 0) {
// 解析JSON请求
char *device_type = mg_json_get_str(hm->body, "$.device_type");
char *device_id = mg_json_get_str(hm->body, "$.device_id");
char *action = mg_json_get_str(hm->body, "$.action");
if (device_type && device_id && action) {
//TODO: 处理断路器控制逻辑
LOG_F(INFO, "Received control request: device_type=%s, device_id=%s, action=%s ,from Net DashBoard id=%lu fd=%d",
device_type, device_id, action, c->id, c->fd);
// 模拟随机成功或失败 (70%成功率)
bool success = (rand() % 10) < 7;
const char *message = success ? "操作成功" : "操作失败";
// 返回JSON响应
mg_http_reply(c, 200, "Content-Type: application/json\r\n",
"{\"success\": %s, \"message\": \"%s\"}",
success ? "true" : "false", message);
} else {
mg_http_reply(c, 400, "Content-Type: text/plain\r\n", "Invalid request");
}
// 释放分配的内存
if (device_type) free(device_type);
if (device_id) free(device_id);
if (action) free(action);
} else {
mg_http_reply(c, 405, "Content-Type: text/plain\r\n", "Method Not Allowed");
}
} else {
// 返回主页HTML
mg_http_reply(c, 200, "Content-Type: text/html; charset=utf-8\r\n", INDEX_HTML.c_str());
@@ -225,8 +260,33 @@ void HttpServer::pushSystemData() {
j["dyn_power_limit2"] = Json::Value(m_systemData->dyn_power_limit2); // 动力电池2功率限制值
//设备在线状态
j["device_online_flag1"] = Json::Value(m_systemData->device_online_flag1);
j["device_online_flag2"] = Json::Value(m_systemData->device_online_flag2);
j["device_onile"]["device_online_flag1"] = Json::Value(m_systemData->device_online_flag1);
j["device_onile"]["device_online_flag2"] = Json::Value(m_systemData->device_online_flag2);
j["device_onile"]["ins_online_state"] = Json::Value(m_systemData->device_online_status.ins_online_state); // 仪表锂电在线标志位
j["device_onile"]["dyn_online_state"] = Json::Value(m_systemData->device_online_status.dyn_online_state); // 动力锂电在线标志位
j["device_onile"]["fuel_online_state"] = Json::Value(m_systemData->device_online_status.fuel_online_state); // 燃电锂电在线标志位
j["device_onile"]["high_voltage_online_state"] = Json::Value(m_systemData->device_online_status.high_voltage_online_state); // 高压配电板在线标志位
j["device_onile"]["low_voltage_online_state"] = Json::Value(m_systemData->device_online_status.low_voltage_online_state); // 低压配电板在线标志位
j["device_onile"]["composite_online_state"] = Json::Value(m_systemData->device_online_status.composite_online_state); // 复合管控主机在线标志位
j["device_onile"]["composite_backup_online_state"] = Json::Value(m_systemData->device_online_status.composite_backup_online_state); // 复合管控备机在线标志位
//通信状态
//ccu状态
j["comm_state"]["ccu_status"]["isTimeout"] = Json::Value(m_systemData->device_common_status.ccu_status.isTimeout);
j["comm_state"]["ccu_status"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.ccu_status.lastUpdateTime);
//高压配电状态
j["comm_state"]["dis_hv_c1"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_hv_c1.isTimeout);
j["comm_state"]["dis_hv_c1"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_hv_c1.lastUpdateTime);
j["comm_state"]["dis_hv_c2"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_hv_c2.isTimeout);
j["comm_state"]["dis_hv_c2"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_hv_c2.lastUpdateTime);
//低压配电状态
j["comm_state"]["dis_lv_c1"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_lv_c1.isTimeout);
j["comm_state"]["dis_lv_c1"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_lv_c1.lastUpdateTime);
j["comm_state"]["dis_lv_c2"]["isTimeout"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.isTimeout);
j["comm_state"]["dis_lv_c2"]["lastUpdateTime"] = Json::Value(m_systemData->device_common_status.dis_lv_c2.lastUpdateTime);
//复合管控器心跳计算器
j["heartbeat"] = Json::Value(m_systemData->heartbeat);