From c93bca5fa1c6c29b5763e5719b41df4a78bfc67f Mon Sep 17 00:00:00 2001 From: zzh <838331105@qq.com> Date: Thu, 15 Jan 2026 15:15:57 +0800 Subject: [PATCH] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=A8=A1=E6=8B=9F=E4=BB=BB?= =?UTF-8?q?=E5=8A=A1=E4=B8=8B=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- main.c | 83 ++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 52 insertions(+), 31 deletions(-) diff --git a/main.c b/main.c index c9c7d23..ae7cea3 100644 --- a/main.c +++ b/main.c @@ -872,17 +872,18 @@ void *thread_simulate_mqtt_topic(void *arg){ sim_topic[len-1] = '\0'; } + LOG_I("simulate_mqtt_topic: received topic: %s\n", sim_topic); + // 检查是否是lightOperate/invoke topic if(strstr(sim_topic, "/sys/") && strstr(sim_topic, "/thing/service/lightOperate/invoke")) { // 解析topic获取deviceName char productKey[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) { 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)); strncpy(g_mqtt_deviceName, deviceName, sizeof(g_mqtt_deviceName) - 1); LOG_I("simulate_mqtt_topic: set g_mqtt_deviceName=%s\n", g_mqtt_deviceName); @@ -891,29 +892,48 @@ void *thread_simulate_mqtt_topic(void *arg){ FILE *fp_payload = fopen("/root/sim_payload", "r"); if(fp_payload != NULL) { memset(sim_payload, 0, sizeof(sim_payload)); - if(fgets(sim_payload, sizeof(sim_payload), fp_payload) != NULL) { - // 去掉换行符 - len = strlen(sim_payload); - if(len > 0 && sim_payload[len-1] == '\n'){ - sim_payload[len-1] = '\0'; + + // 获取文件大小 + fseek(fp_payload, 0, SEEK_END); + long file_size = ftell(fp_payload); + 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消息) - PutDataIntoMQueue(sim_payload); + PutDataIntoMQueueWithDevice(sim_payload, g_mqtt_deviceName); } fclose(fp_payload); // 删除payload文件 unlink("/root/sim_payload"); } else { - // 使用默认payload - char default_payload[] = "{\"method\":\"thing.service.lightOperate\",\"params\":{\"LightSwitch\":1}}"; - LOG_I("simulate_mqtt_topic: using default payload: %s\n", default_payload); - PutDataIntoMQueue(default_payload); + // 使用默认payload(保持与实际MQTT一致的格式) + 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 for %s\n", g_mqtt_deviceName); + 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); @@ -3452,6 +3472,7 @@ int main(int argc, char *argv[]) uart_init(&uartRecvBack,115200,8,1,'N',0); uart_open(&uartSend,"/dev/ttyS5");//GT U12 ttyS0,U14 ttyS4,U21 ttysWK0 U13 ttysWK1 U15 ttysWK2 U22 ttysWK3 U20 ttyS1 uart_init(&uartSend,115200,8,1,'N',0); + //doCommand_help(0, NULL); //system("echo 113 > /sys/class/gpio/export");//pin 113 yellow //system("echo out > /sys/class/gpio/gpio113/direction"); @@ -3558,24 +3579,24 @@ int main(int argc, char *argv[]) // pthread_detach(pt_station_heartbeat); //} - // 心跳检测线程移到MQTT连接成功后启动,避免MQTT未连接时上报失败 - // ret = pthread_create(&pt_heartbeat_check,NULL,thread_heartbeat_check,NULL); - // if(ret!=0){ - // LOG_I("pthread_create heartbeat_check fail\n"); - // }else{ - // LOG_I("pthread_create heartbeat_check success\n"); - // pthread_detach(pt_heartbeat_check); - // } - +#if 1 + ret = pthread_create(&pt_heartbeat_check,NULL,thread_heartbeat_check,NULL); + if(ret!=0){ + LOG_I("pthread_create heartbeat_check fail\n"); + }else{ + LOG_I("pthread_create heartbeat_check success\n"); + pthread_detach(pt_heartbeat_check); + } +#endif +ret = pthread_create(&pt_simulate_light,NULL,thread_simulate_mqtt_topic,NULL); + if(ret!=0){ + LOG_I("pthread_create simulate_light fail\n"); + }else{ + LOG_I("pthread_create simulate_light success\n"); + pthread_detach(pt_simulate_light); + } + #if 0 - //ret = pthread_create(&pt_simulate_light,NULL,thread_simulate_light,NULL); - //if(ret!=0){ - // LOG_I("pthread_create simulate_light fail\n"); - //}else{ - // LOG_I("pthread_create simulate_light success\n"); - // pthread_detach(pt_simulate_light); - //} - ret = pthread_create(&pt_all_light,NULL,thread_all_light,NULL); if(ret!=0){ LOG_I("pthread_create all_light fail\n");