94 lines
2.3 KiB
C
94 lines
2.3 KiB
C
/******************************************************************************
|
|
* @file protocol_mqtt_bcu.c
|
|
* @brief protocol_mqtt_bcu
|
|
* @version V1.0
|
|
* @author Gary
|
|
* @copyright
|
|
******************************************************************************/
|
|
|
|
#include "protocol_mqtt_bcu.h"
|
|
|
|
|
|
const devPointMap bms_points[] = {
|
|
{"BCU_2", NULL}, // 总告警
|
|
{"BCU_3", NULL}, // 总故障
|
|
{"BCU_4", NULL}, // 单体过压告警一级
|
|
{"BCU_5", NULL}, // 单体欠压告警一级
|
|
{"BCU_6", NULL}, // 单体过温告警一级
|
|
{"BCU_7", NULL}, // 单体低温告警一级
|
|
{"BCU_8", NULL}, // 单体压差告警一级
|
|
{"BCU_9", NULL}, // 充电过流告警一级
|
|
};
|
|
|
|
const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]);
|
|
|
|
char* protocol_build_json(void)
|
|
{
|
|
cJSON* root = cJSON_CreateObject();
|
|
if (!root) return NULL;
|
|
|
|
// 时间戳字段(此处你需替换成实际时间函数)
|
|
cJSON_AddNumberToObject(root, "timeStamp", drv_rtc_get_tick());
|
|
|
|
// devData 数组
|
|
cJSON* devDataArr = cJSON_CreateArray();
|
|
cJSON_AddItemToObject(root, "devData", devDataArr);
|
|
|
|
// 构建每一个设备项
|
|
cJSON* deviceObj = cJSON_CreateObject();
|
|
cJSON_AddItemToArray(devDataArr, deviceObj);
|
|
|
|
cJSON_AddStringToObject(deviceObj, "devType", "BMS");
|
|
cJSON_AddStringToObject(deviceObj, "devName", "BCU");
|
|
cJSON_AddStringToObject(deviceObj, "devId", "001");
|
|
cJSON_AddStringToObject(deviceObj, "sn", "SN123456");
|
|
|
|
// 构建 data 对象
|
|
cJSON* dataObj = cJSON_CreateObject();
|
|
cJSON_AddItemToObject(deviceObj, "data", dataObj);
|
|
|
|
for (int i = 0; i < bms_point_count; ++i)
|
|
{
|
|
const char* key = bms_points[i].key;
|
|
int val = 0;
|
|
|
|
if (bms_points[i].get_val != NULL)
|
|
{
|
|
val = bms_points[i].get_val();
|
|
}
|
|
else
|
|
{
|
|
val = 0; // 默认值
|
|
}
|
|
|
|
cJSON_AddNumberToObject(dataObj, key, val);
|
|
}
|
|
|
|
// 转为 JSON 字符串
|
|
char* json_str = cJSON_PrintUnformatted(root); // 使用 Unformatted 避免换行
|
|
cJSON_Delete(root);
|
|
return json_str;
|
|
}
|
|
|
|
void mqtt_publish_bms_data(uint16_t basetime)
|
|
{
|
|
static uint32_t mqtt_cycle_tick = 0;
|
|
mqtt_cycle_tick += basetime;
|
|
|
|
if(mqtt_cycle_tick > 60000)
|
|
{
|
|
mqtt_cycle_tick = 0;
|
|
char* json_str = protocol_build_json();
|
|
if (json_str == NULL)
|
|
{
|
|
return;
|
|
}
|
|
|
|
drv_mqtt_publish(json_str, strlen(json_str));
|
|
|
|
cJSON_free(json_str);
|
|
}
|
|
|
|
}
|
|
|