增加模拟任务下发
This commit is contained in:
parent
da18757254
commit
e175e1a6cd
53
main.c
53
main.c
@ -879,17 +879,18 @@ void *thread_simulate_mqtt_topic(void *arg){
|
|||||||
sim_topic[len-1] = '\0';
|
sim_topic[len-1] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
LOG_I("simulate_mqtt_topic: received topic: %s\n", sim_topic);
|
||||||
|
|
||||||
// 检查是否是lightOperate/invoke topic
|
// 检查是否是lightOperate/invoke topic
|
||||||
if(strstr(sim_topic, "/sys/") && strstr(sim_topic, "/thing/service/lightOperate/invoke")) {
|
if(strstr(sim_topic, "/sys/") && strstr(sim_topic, "/thing/service/lightOperate/invoke")) {
|
||||||
// 解析topic获取deviceName
|
// 解析topic获取deviceName
|
||||||
char productKey[256] = {0};
|
char productKey[256] = {0};
|
||||||
char deviceName[256] = {0};
|
char deviceName[256] = {0};
|
||||||
|
|
||||||
// 使用类似mqtt_utils_parse_sys_lightOperate_invoke_topic的逻辑
|
// 使用与实际MQTT相同的解析逻辑
|
||||||
if(sscanf(sim_topic, "/sys/%255[^/]/%255[^/]/thing/service/lightOperate/invoke", productKey, deviceName) == 2) {
|
if(sscanf(sim_topic, "/sys/%255[^/]/%255[^/]/thing/service/lightOperate/invoke", productKey, deviceName) == 2) {
|
||||||
LOG_I("simulate_mqtt_topic: parsed productKey=%s, deviceName=%s\n", productKey, deviceName);
|
LOG_I("simulate_mqtt_topic: parsed productKey=%s, deviceName=%s\n", productKey, deviceName);
|
||||||
|
|
||||||
// 设置全局变量(模拟mqtt_utils_message_arrived的行为)
|
|
||||||
memset(g_mqtt_deviceName, 0, sizeof(g_mqtt_deviceName));
|
memset(g_mqtt_deviceName, 0, sizeof(g_mqtt_deviceName));
|
||||||
strncpy(g_mqtt_deviceName, deviceName, sizeof(g_mqtt_deviceName) - 1);
|
strncpy(g_mqtt_deviceName, deviceName, sizeof(g_mqtt_deviceName) - 1);
|
||||||
LOG_I("simulate_mqtt_topic: set g_mqtt_deviceName=%s\n", g_mqtt_deviceName);
|
LOG_I("simulate_mqtt_topic: set g_mqtt_deviceName=%s\n", g_mqtt_deviceName);
|
||||||
@ -898,29 +899,48 @@ void *thread_simulate_mqtt_topic(void *arg){
|
|||||||
FILE *fp_payload = fopen("/root/sim_payload", "r");
|
FILE *fp_payload = fopen("/root/sim_payload", "r");
|
||||||
if(fp_payload != NULL) {
|
if(fp_payload != NULL) {
|
||||||
memset(sim_payload, 0, sizeof(sim_payload));
|
memset(sim_payload, 0, sizeof(sim_payload));
|
||||||
if(fgets(sim_payload, sizeof(sim_payload), fp_payload) != NULL) {
|
|
||||||
// 去掉换行符
|
// 获取文件大小
|
||||||
len = strlen(sim_payload);
|
fseek(fp_payload, 0, SEEK_END);
|
||||||
if(len > 0 && sim_payload[len-1] == '\n'){
|
long file_size = ftell(fp_payload);
|
||||||
sim_payload[len-1] = '\0';
|
fseek(fp_payload, 0, SEEK_SET);
|
||||||
|
|
||||||
|
// 读取整个文件内容(使用fread而不是fgets,避免被换行符截断)
|
||||||
|
if(file_size > 0 && file_size < sizeof(sim_payload)) {
|
||||||
|
size_t read_size = fread(sim_payload, 1, file_size, fp_payload);
|
||||||
|
sim_payload[read_size] = '\0';
|
||||||
|
|
||||||
|
// 去掉所有换行符和回车符
|
||||||
|
char *p = sim_payload;
|
||||||
|
char *q = sim_payload;
|
||||||
|
while(*p) {
|
||||||
|
if(*p != '\n' && *p != '\r') {
|
||||||
|
*q++ = *p;
|
||||||
}
|
}
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
*q = '\0';
|
||||||
|
|
||||||
LOG_I("simulate_mqtt_topic: sending payload to queue: %s\n", sim_payload);
|
LOG_I("simulate_mqtt_topic: processing lightOperate payload for %s\n", g_mqtt_deviceName);
|
||||||
|
LOG_I("simulate_mqtt_topic: payload length=%zu\n", strlen(sim_payload));
|
||||||
|
|
||||||
// 将payload放入消息队列(模拟接收到的MQTT消息)
|
PutDataIntoMQueueWithDevice(sim_payload, g_mqtt_deviceName);
|
||||||
PutDataIntoMQueue(sim_payload);
|
|
||||||
}
|
}
|
||||||
fclose(fp_payload);
|
fclose(fp_payload);
|
||||||
|
|
||||||
// 删除payload文件
|
// 删除payload文件
|
||||||
unlink("/root/sim_payload");
|
unlink("/root/sim_payload");
|
||||||
} else {
|
} else {
|
||||||
// 使用默认payload
|
// 使用默认payload(保持与实际MQTT一致的格式)
|
||||||
char default_payload[] = "{\"method\":\"thing.service.lightOperate\",\"params\":{\"LightSwitch\":1}}";
|
char default_payload[] = "{\"id\":\"1012806_49929679_2008355652044415074_1767668825520\",\"version\":\"1.0.0\",\"method\":\"thing.service.lightOperate.invoke\",\"params\":{\"duration\":120,\"beep\":0,\"color\":{\"R\":255,\"B\":0,\"G\":0},\"flash\":0},\"time\":\"1767668825591\"}";
|
||||||
LOG_I("simulate_mqtt_topic: using default payload: %s\n", default_payload);
|
LOG_I("simulate_mqtt_topic: using default payload for %s\n", g_mqtt_deviceName);
|
||||||
PutDataIntoMQueue(default_payload);
|
PutDataIntoMQueueWithDevice(default_payload, g_mqtt_deviceName);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
LOG_I("simulate_mqtt_topic: failed to parse topic: %s\n", sim_topic);
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
LOG_I("simulate_mqtt_topic: topic not matched: %s\n", sim_topic);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
fclose(fp_topic);
|
fclose(fp_topic);
|
||||||
@ -3444,9 +3464,7 @@ int main(int argc, char *argv[])
|
|||||||
pthread_detach(pt_heartbeat_check);
|
pthread_detach(pt_heartbeat_check);
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
ret = pthread_create(&pt_simulate_light,NULL,thread_simulate_mqtt_topic,NULL);
|
||||||
#if 0
|
|
||||||
ret = pthread_create(&pt_simulate_light,NULL,thread_simulate_light,NULL);
|
|
||||||
if(ret!=0){
|
if(ret!=0){
|
||||||
LOG_I("pthread_create simulate_light fail\n");
|
LOG_I("pthread_create simulate_light fail\n");
|
||||||
}else{
|
}else{
|
||||||
@ -3454,6 +3472,7 @@ int main(int argc, char *argv[])
|
|||||||
pthread_detach(pt_simulate_light);
|
pthread_detach(pt_simulate_light);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0
|
||||||
ret = pthread_create(&pt_all_light,NULL,thread_all_light,NULL);
|
ret = pthread_create(&pt_all_light,NULL,thread_all_light,NULL);
|
||||||
if(ret!=0){
|
if(ret!=0){
|
||||||
LOG_I("pthread_create all_light fail\n");
|
LOG_I("pthread_create all_light fail\n");
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user