diff --git a/include/serial_AT.hpp b/include/serial_AT.hpp index a26ea9e..0182c5f 100644 --- a/include/serial_AT.hpp +++ b/include/serial_AT.hpp @@ -30,3 +30,5 @@ void stop_serial_at(); void start_http_server(int port); void stop_http_server(); + +RadioInfo get_radio_info(); diff --git a/src/mqtt_client_wrapper.cpp b/src/mqtt_client_wrapper.cpp index 1905e99..a1ba0aa 100644 --- a/src/mqtt_client_wrapper.cpp +++ b/src/mqtt_client_wrapper.cpp @@ -11,6 +11,7 @@ #include "record_manager.hpp" #include "rtmp_manager.hpp" +#include "serial_AT.hpp" std::shared_ptr mqtt_client; @@ -59,6 +60,20 @@ static void send_heartbeat() : (running_count == total ? 1 : 2); // 全部正常 or 部分异常 hb["channels"] = channels; + // ===== 新增:读取 radio 信息(线程安全,返回拷贝)===== + RadioInfo ri = get_radio_info(); + + nlohmann::json hb; + hb["timestamp"] = ms; + hb["status"] = (running_count == 0) ? 0 : (running_count == total ? 1 : 2); + hb["channels"] = channels; + + // ===== 新增:把 radio 塞进心跳 ===== + hb["radio"] = { + {"state", ri.state}, {"rat", ri.rat}, {"pci", ri.pci}, {"band", ri.band}, {"arfcn", ri.arfcn}, + {"rsrp", ri.rsrp}, {"rsrq", ri.rsrq}, {"sinr", ri.sinr}, {"raw", ri.raw}, + }; + // 发布心跳 mqtt_client->publish(g_app_config.mqtt.topics.heartbeat_up, hb.dump(), 0); // LOG_INFO("[MQTT] Sent video heartbeat (" + std::to_string(running_count) + "/" + std::to_string(total) + diff --git a/src/serial_AT.cpp b/src/serial_AT.cpp index 388c0f1..215659e 100644 --- a/src/serial_AT.cpp +++ b/src/serial_AT.cpp @@ -20,6 +20,12 @@ std::mutex imei_mutex; RadioInfo g_radio_info; static std::mutex radio_mutex; +RadioInfo get_radio_info() +{ + std::lock_guard lk(radio_mutex); + return g_radio_info; +} + // ================== 运行控制 ================== static std::atomic serial_at_running{false}; @@ -151,10 +157,11 @@ static void parse_qeng_servingcell(const std::string& line) g_radio_info.rat = rat; g_radio_info.pci = pci; + g_radio_info.band = band; + g_radio_info.arfcn = arfcn; g_radio_info.rsrp = rsrp; g_radio_info.rsrq = rsrq; g_radio_info.sinr = sinr; - g_radio_info.arfcn = arfcn; g_radio_info.raw = line; }