108 lines
2.6 KiB
C
108 lines
2.6 KiB
C
|
/******************************************************************************
|
|||
|
* @file protocol_mqtt_bcu.c
|
|||
|
* @brief protocol_mqtt_bcu
|
|||
|
* @version V1.0
|
|||
|
* @author Gary
|
|||
|
* @copyright
|
|||
|
******************************************************************************/
|
|||
|
|
|||
|
#include "protocol_mqtt_bcu.h"
|
|||
|
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>밴<EFBFBD><EBB0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģ<EFBFBD><C4A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
const devPointMap bms_points[] = {
|
|||
|
{"BCU_2", 0, 0, NULL}, // <20>ܸ澯
|
|||
|
{"BCU_3", 0, 0, NULL}, // <20>ܹ<EFBFBD><DCB9><EFBFBD>
|
|||
|
{"BCU_4", 0, 0, NULL}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ѹ<EFBFBD>澯һ<E6BEAF><D2BB>
|
|||
|
{"BCU_5", 0, 0, NULL}, // <20><><EFBFBD><EFBFBD>Ƿѹ<C7B7>澯һ<E6BEAF><D2BB>
|
|||
|
{"BCU_6", 0, 0, NULL}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸澯һ<E6BEAF><D2BB>
|
|||
|
{"BCU_7", 0, 0, NULL}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>¸澯һ<E6BEAF><D2BB>
|
|||
|
{"BCU_8", 0, 0, NULL}, // <20><><EFBFBD><EFBFBD>ѹ<EFBFBD><D1B9><EFBFBD>澯һ<E6BEAF><D2BB>
|
|||
|
{"BCU_9", 0, 0, NULL}, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>澯һ<E6BEAF><D2BB>
|
|||
|
};
|
|||
|
|
|||
|
const int bms_point_count = sizeof(bms_points) / sizeof(bms_points[0]);
|
|||
|
|
|||
|
void protocol_build_json(uint16_t groupId)
|
|||
|
{
|
|||
|
int val = 0;
|
|||
|
cJSON* root = cJSON_CreateObject();
|
|||
|
|
|||
|
cJSON_AddNumberToObject(root, "timeStamp", drv_rtc_get_tick());
|
|||
|
|
|||
|
// devData <20><><EFBFBD><EFBFBD>
|
|||
|
cJSON* devDataArr = cJSON_CreateArray();
|
|||
|
cJSON_AddItemToObject(root, "devData", devDataArr);
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD>ÿһ<C3BF><D2BB><EFBFBD>豸<EFBFBD><E8B1B8>
|
|||
|
cJSON* deviceObj = cJSON_CreateObject();
|
|||
|
cJSON_AddItemToArray(devDataArr, deviceObj);
|
|||
|
|
|||
|
cJSON_AddStringToObject(deviceObj, "devType", "4");
|
|||
|
cJSON_AddStringToObject(deviceObj, "devName", "BCU");
|
|||
|
cJSON_AddStringToObject(deviceObj, "devId", "001");
|
|||
|
cJSON_AddStringToObject(deviceObj, "sn", "SN123456");
|
|||
|
|
|||
|
// <20><><EFBFBD><EFBFBD> data <20><><EFBFBD><EFBFBD>
|
|||
|
cJSON* dataObj = cJSON_CreateObject();
|
|||
|
cJSON_AddItemToObject(deviceObj, "data", dataObj);
|
|||
|
|
|||
|
for (int i = 0; i < bms_point_count; ++i)
|
|||
|
{
|
|||
|
const devPointMap* point = &bms_points[i];
|
|||
|
if(point->groupId == groupId)
|
|||
|
{
|
|||
|
if (bms_points[i].get_val != NULL)
|
|||
|
{
|
|||
|
val = point->get_val(point->input);
|
|||
|
}
|
|||
|
else
|
|||
|
{
|
|||
|
val = 0; // Ĭ<><C4AC>ֵ
|
|||
|
}
|
|||
|
}
|
|||
|
cJSON_AddNumberToObject(dataObj, point->key, val);
|
|||
|
}
|
|||
|
|
|||
|
// תΪ JSON <20>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
char* json_str = cJSON_PrintUnformatted(root);
|
|||
|
if (json_str)
|
|||
|
{
|
|||
|
drv_mqtt_publish(json_str, strlen(json_str));
|
|||
|
cJSON_free(json_str);
|
|||
|
}
|
|||
|
|
|||
|
cJSON_Delete(root);
|
|||
|
}
|
|||
|
|
|||
|
|
|||
|
void publish_all_bms_groups(void) {
|
|||
|
uint8_t max_group = 0;
|
|||
|
|
|||
|
for (size_t i = 0; i < bms_point_count; i++) {
|
|||
|
if (bms_points[i].groupId > max_group) {
|
|||
|
max_group = bms_points[i].groupId;
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
for (uint8_t g = 0; g <= max_group; g++) {
|
|||
|
protocol_build_json(g);
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
void mqtt_publish_bms_data(uint32_t basetime)
|
|||
|
{
|
|||
|
static uint32_t mqtt_cycle_tick = 0;
|
|||
|
static uint8_t groupMax = 0;
|
|||
|
uint16_t i = 0;
|
|||
|
|
|||
|
mqtt_cycle_tick += basetime;
|
|||
|
|
|||
|
if(mqtt_cycle_tick > 60000)
|
|||
|
{
|
|||
|
mqtt_cycle_tick = 0;
|
|||
|
publish_all_bms_groups();
|
|||
|
}
|
|||
|
|
|||
|
}
|
|||
|
|