diff --git a/.vscode/settings.json b/.vscode/settings.json index bb879da..d74d88c 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -55,5 +55,78 @@ "C_Cpp_Runner.useLeakSanitizer": false, "C_Cpp_Runner.showCompilationTime": false, "C_Cpp_Runner.useLinkTimeOptimization": false, - "C_Cpp_Runner.msvcSecureNoWarnings": false + "C_Cpp_Runner.msvcSecureNoWarnings": false, + "files.associations": { + "any": "cpp", + "array": "cpp", + "atomic": "cpp", + "bit": "cpp", + "cctype": "cpp", + "charconv": "cpp", + "chrono": "cpp", + "clocale": "cpp", + "cmath": "cpp", + "codecvt": "cpp", + "compare": "cpp", + "concepts": "cpp", + "condition_variable": "cpp", + "csignal": "cpp", + "cstdarg": "cpp", + "cstddef": "cpp", + "cstdint": "cpp", + "cstdio": "cpp", + "cstdlib": "cpp", + "cstring": "cpp", + "ctime": "cpp", + "cwchar": "cpp", + "cwctype": "cpp", + "deque": "cpp", + "forward_list": "cpp", + "list": "cpp", + "map": "cpp", + "set": "cpp", + "string": "cpp", + "unordered_map": "cpp", + "vector": "cpp", + "exception": "cpp", + "algorithm": "cpp", + "functional": "cpp", + "iterator": "cpp", + "memory": "cpp", + "memory_resource": "cpp", + "numeric": "cpp", + "optional": "cpp", + "random": "cpp", + "ratio": "cpp", + "string_view": "cpp", + "system_error": "cpp", + "tuple": "cpp", + "type_traits": "cpp", + "utility": "cpp", + "format": "cpp", + "fstream": "cpp", + "initializer_list": "cpp", + "iomanip": "cpp", + "iosfwd": "cpp", + "iostream": "cpp", + "istream": "cpp", + "limits": "cpp", + "mutex": "cpp", + "new": "cpp", + "numbers": "cpp", + "ostream": "cpp", + "ranges": "cpp", + "semaphore": "cpp", + "span": "cpp", + "sstream": "cpp", + "stdexcept": "cpp", + "stop_token": "cpp", + "streambuf": "cpp", + "text_encoding": "cpp", + "thread": "cpp", + "cinttypes": "cpp", + "typeinfo": "cpp", + "valarray": "cpp", + "variant": "cpp" + } } \ No newline at end of file diff --git a/LFtid1056/cloudfront/code/cfg_parser.cpp b/LFtid1056/cloudfront/code/cfg_parser.cpp index 13af018..697e0f6 100644 --- a/LFtid1056/cloudfront/code/cfg_parser.cpp +++ b/LFtid1056/cloudfront/code/cfg_parser.cpp @@ -1244,7 +1244,7 @@ void printTerminalDevMap(const std::map& terminal_dev std::cout << "Key: " << key << ", Terminal ID: " << dev.terminal_id - << ", Terminal Code: " << dev.terminal_code + << ", Terminal Code: " << dev.terminal_name << ", Organization Name: "<< dev.org_name << ", Maintenance Name: " << dev.maint_name << ", Station Name: " << dev.station_name @@ -1258,6 +1258,9 @@ void printTerminalDevMap(const std::map& terminal_dev << ", Address: " << dev.addr_str << ", Port: " << dev.port << ", Timestamp: " << dev.timestamp + + << ", mac: " << dev.mac + << std::endl; // 打印监测点信息 @@ -1265,13 +1268,19 @@ void printTerminalDevMap(const std::map& terminal_dev const auto& m = dev.line[i]; std::cout << " Monitor [" << i << "] " << "ID: " << m.monitor_id - << ", Code: " << m.terminal_code + << ", Code: " << m.terminal_id << ", Name: " << m.monitor_name << ", Seq: " << m.logical_device_seq << ", Voltage: "<< m.voltage_level << ", Connect: "<< m.terminal_connect << ", Timestamp:"<< m.timestamp << ", Status: " << m.status + + << ", CT1: " << m.CT1 + << ", CT2: " << m.CT2 + << ", PT1: " << m.PT1 + << ", PT2: " << m.PT2 + << std::endl; } } @@ -1357,7 +1366,7 @@ void parse_terminal_from_data(trigger_update_xml_t& trigger_update_xml, }; work_terminal.terminal_id = get_value("id"); - work_terminal.terminal_code = get_value("terminalCode"); + work_terminal.terminal_name = get_value("terminalCode"); work_terminal.org_name = get_value("orgName"); work_terminal.maint_name = get_value("maintName"); work_terminal.station_name = get_value("stationName"); @@ -1371,6 +1380,8 @@ void parse_terminal_from_data(trigger_update_xml_t& trigger_update_xml, work_terminal.port = get_value("port"); work_terminal.timestamp = get_value("updateTime"); + work_terminal.mac = get_value("mac"); + for (tinyxml2::XMLElement* monitor = root->FirstChildElement("monitorData"); monitor; monitor = monitor->NextSiblingElement("monitorData")) { @@ -1381,9 +1392,18 @@ void parse_terminal_from_data(trigger_update_xml_t& trigger_update_xml, mon.terminal_connect = monitor->FirstChildElement("ptType") ? monitor->FirstChildElement("ptType")->GetText() : "N/A"; mon.logical_device_seq = monitor->FirstChildElement("lineNo") ? monitor->FirstChildElement("lineNo")->GetText() : "N/A"; mon.timestamp = monitor->FirstChildElement("timestamp") ? monitor->FirstChildElement("timestamp")->GetText() : "N/A"; - mon.terminal_code = monitor->FirstChildElement("terminal_code") ? monitor->FirstChildElement("terminal_code")->GetText() : "N/A"; + mon.terminal_id = monitor->FirstChildElement("terminal_id") ? monitor->FirstChildElement("terminal_name")->GetText() : "N/A"; mon.status = monitor->FirstChildElement("status") ? monitor->FirstChildElement("status")->GetText() : "N/A"; + mon.CT1 = monitor->FirstChildElement("CT1") && monitor->FirstChildElement("CT1")->GetText() + ? atof(monitor->FirstChildElement("CT1")->GetText()) : 0.0; + mon.CT2 = monitor->FirstChildElement("CT2") && monitor->FirstChildElement("CT2")->GetText() + ? atof(monitor->FirstChildElement("CT2")->GetText()) : 0.0; + mon.PT1 = monitor->FirstChildElement("PT1") && monitor->FirstChildElement("PT1")->GetText() + ? atof(monitor->FirstChildElement("PT1")->GetText()) : 0.0; + mon.PT2 = monitor->FirstChildElement("PT2") && monitor->FirstChildElement("PT2")->GetText() + ? atof(monitor->FirstChildElement("PT2")->GetText()) : 0.0; + work_terminal.line.push_back(mon); } @@ -1536,9 +1556,9 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d target_dev.terminal_id = update.terminal_id; std::cout << "terminal_id: " << target_dev.terminal_id << std::endl; } - if (!update.terminal_code.empty()) { - target_dev.terminal_code = update.terminal_code; - std::cout << "terminal_code: " << target_dev.terminal_code << std::endl; + if (!update.terminal_name.empty()) { + target_dev.terminal_name = update.terminal_name; + std::cout << "terminal_name: " << target_dev.terminal_name << std::endl; } if (!update.tmnl_factory.empty()) { target_dev.tmnl_factory = update.tmnl_factory; @@ -1574,6 +1594,11 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d std::cout << "port: " << target_dev.port << std::endl; } + if (!update.mac.empty()) { + target_dev.mac = update.mac; + std::cout << "mac: " << target_dev.mac << std::endl; + } + if (!update.timestamp.empty()) { struct tm timeinfo = {}; if (sscanf(update.timestamp.c_str(), "%4d-%2d-%2d %2d:%2d:%2d", @@ -1609,9 +1634,14 @@ int update_one_terminal_ledger(const terminal_dev& update,terminal_dev& target_d m.voltage_level = mon.voltage_level; m.terminal_connect = mon.terminal_connect; m.status = mon.status; - m.terminal_code = mon.terminal_code; + m.terminal_id = mon.terminal_id; m.timestamp = mon.timestamp; + m.CT1 = mon.CT1; + m.CT2 = mon.CT2; + m.PT1 = mon.PT1; + m.PT2 = mon.PT2; + if (m.terminal_connect != "0") { isdelta_flag = 1; std::cout << "monitor_id " << m.monitor_id << " uses delta wiring." << std::endl; @@ -2104,13 +2134,18 @@ void print_monitor(const ledger_monitor& mon) { auto safe = [](const std::string& s) { return s.empty() ? "N/A" : s; }; std::cout << "Monitor ID: " << safe(mon.monitor_id) << "\n"; - std::cout << "Terminal Code: " << safe(mon.terminal_code) << "\n"; + std::cout << "Terminal ID: " << safe(mon.terminal_id) << "\n"; std::cout << "Monitor Name: " << safe(mon.monitor_name) << "\n"; std::cout << "Logical Device Sequence: " << safe(mon.logical_device_seq) << "\n"; std::cout << "Voltage Level: " << safe(mon.voltage_level) << "\n"; std::cout << "Terminal Connect: " << safe(mon.terminal_connect) << "\n"; std::cout << "Timestamp: " << safe(mon.timestamp) << "\n"; std::cout << "Status: " << safe(mon.status) << "\n"; + + std::cout << "CT1: " << mon.CT1 << "\n"; + std::cout << "CT2: " << mon.CT2 << "\n"; + std::cout << "PT1: " << mon.PT1 << "\n"; + std::cout << "PT2: " << mon.PT2 << "\n"; } void print_terminal(const terminal_dev& tmnl) { @@ -2118,7 +2153,7 @@ void print_terminal(const terminal_dev& tmnl) { std::cout << "GUID: " << safe(tmnl.guid) << "\n"; std::cout << "Terminal ID: " << safe(tmnl.terminal_id) << "\n"; - std::cout << "Terminal Code: " << safe(tmnl.terminal_code)<< "\n"; + std::cout << "Terminal Code: " << safe(tmnl.terminal_name)<< "\n"; std::cout << "Organization Name: "<< safe(tmnl.org_name) << "\n"; std::cout << "Maintenance Name: " << safe(tmnl.maint_name) << "\n"; std::cout << "Station Name: " << safe(tmnl.station_name) << "\n"; @@ -2131,6 +2166,8 @@ void print_terminal(const terminal_dev& tmnl) { std::cout << "Port: " << safe(tmnl.port) << "\n"; std::cout << "Timestamp: " << safe(tmnl.timestamp) << "\n"; + std::cout << "mac: " << safe(tmnl.mac) << "\n"; + for (size_t i = 0; i < 10 && !tmnl.line[i].monitor_id.empty(); ++i) { std::cout << " Monitor " << (i + 1) << ":\n"; print_monitor(tmnl.line[i]); @@ -2168,7 +2205,7 @@ void print_trigger_update_xml(const trigger_update_xml_t& trigger_update) { } } -/////////////////////////////////////////////////////////////////////////////////////////////////////////////////解析映射文件 +/////////////////////////////////////////////////////////////////////////////////////////////////////////////////解析模板文件 //解析映射文件 bool ParseXMLConfig2(int xml_flag, XmlConfig *cfg, std::list *ctopiclist, const std::string& path) @@ -2615,3 +2652,79 @@ void Set_xml_nodeinfo() } +////////////////////////////////////////////////////////////////////////////////////////////////////////////////////数据转换函数 +// DataArrayItem to_json +void to_json(nlohmann::json& j, const DataArrayItem& d) { + j = nlohmann::json{ + {"DataAttr", d.DataAttr}, + {"DataTimeSec", d.DataTimeSec}, + {"DataTimeUSec", d.DataTimeUSec}, + {"DataTag", d.DataTag}, + {"Data", d.Data} + }; +} + +// MsgObj to_json +void to_json(nlohmann::json& j, const MsgObj& m) { + j = nlohmann::json{ + {"Cldid", m.Cldid}, + {"DataType", m.DataType}, + {"DataAttr", m.DataAttr}, + {"DsNameIdx", m.DsNameIdx}, + {"DataArray", m.DataArray} + }; +} + +// FullObj to_json +void to_json(nlohmann::json& j, const FullObj& f) { + j = nlohmann::json{ + {"Mid", f.Mid}, + {"Did", f.Did}, + {"Pri", f.Pri}, + {"Type", f.Type}, + {"Msg", f.Msg} + }; +} +std::string generate_json( + int Mid, + int Did, + int Pri, + int Type, + int Cldid, + int DataType, + int DataAttr, + int DsNameIdx, + const std::vector& dataArray //构造出array后调用这个函数 +) { + FullObj fobj; + fobj.Mid = Mid; + fobj.Did = Did; + fobj.Pri = Pri; + fobj.Type = Type; + fobj.Msg.Cldid = Cldid; + fobj.Msg.DataType = DataType; + fobj.Msg.DataAttr = DataAttr; + fobj.Msg.DsNameIdx = DsNameIdx; + fobj.Msg.DataArray = dataArray; + nlohmann::json j = fobj; + return j.dump(); // 输出标准 json 字符串 +} + +void upload_data_test(){ + std::vector arr; + arr.push_back({1, 1725477660, 0, 1, "xxxx"}); + arr.push_back({2, 1691741340, 0, 1, "yyyy"}); + + std::string js = generate_json( + -1, 2, 1, 4866, 1, 0, 2, 1, arr + ); + std::cout << js << std::endl; + + queue_data_t data; + data.monitor_no = 1; + data.strTopic = TOPIC_ALARM; + data.strText = js; + data.mp_id = "test"; + std::lock_guard lock(queue_data_list_mutex); + queue_data_list.push_back(data); +} diff --git a/LFtid1056/cloudfront/code/interface.cpp b/LFtid1056/cloudfront/code/interface.cpp index d67b65d..54aa73e 100644 --- a/LFtid1056/cloudfront/code/interface.cpp +++ b/LFtid1056/cloudfront/code/interface.cpp @@ -133,7 +133,6 @@ void SendJsonAPI_web(const std::string& strUrl, //接口路径 } } - ////////////////////////////////////////////////////////////////////////////////////////////////////////上传文件接口 //处理文件上传响应 @@ -609,7 +608,7 @@ int terminal_ledger_web(std::map& terminal_dev_map, }; dev.terminal_id = safe_str(item, "id"); dev.addr_str = safe_str(item, "ip"); - dev.terminal_code = safe_str(item, "name"); + dev.terminal_name = safe_str(item, "name"); dev.org_name = safe_str(item, "org_name"); dev.maint_name = safe_str(item, "maint_name"); dev.station_name = safe_str(item, "stationName"); @@ -623,18 +622,26 @@ int terminal_ledger_web(std::map& terminal_dev_map, dev.processNo = safe_str(item, "processNo"); dev.maxProcessNum = safe_str(item, "maxProcessNum"); + dev.mac = safe_str(item, "mac");//添加mac + if (item.contains("monitorData") && item["monitorData"].is_array()) { for (auto& mon : item["monitorData"]) { if (dev.line.size() >= 10) break; ledger_monitor m; m.monitor_id = safe_str(mon, "id"); - m.terminal_code = safe_str(mon, "terminal_code"); + m.terminal_id = safe_str(mon, "terminal_id"); m.monitor_name = safe_str(mon, "name"); m.logical_device_seq = safe_str(mon, "lineNo"); m.voltage_level = safe_str(mon, "voltageLevel"); m.terminal_connect = safe_str(mon, "ptType"); m.timestamp = safe_str(mon, "updateTime"); m.status = safe_str(mon, "status"); + + m.CT1 = mon.value("CT1", 0.0); + m.CT2 = mon.value("CT2", 0.0); + m.PT1 = mon.value("PT1", 0.0); + m.PT2 = mon.value("PT2", 0.0); + dev.line.push_back(m); } } diff --git a/LFtid1056/cloudfront/code/interface.h b/LFtid1056/cloudfront/code/interface.h index a48a632..b19e18b 100644 --- a/LFtid1056/cloudfront/code/interface.h +++ b/LFtid1056/cloudfront/code/interface.h @@ -6,6 +6,11 @@ #include #include #include +#include + +/////////////////////////////////////////////////////////////////////////////////////////// + +#include "nlohmann/json.hpp" /////////////////////////////////////////////////////////////////////////////////////////// @@ -47,23 +52,28 @@ class ledger_monitor { public: std::string monitor_id; //监测点id - std::string terminal_code; //监测点 + std::string terminal_id; //监测点 std::string monitor_name; //监测点名 std::string logical_device_seq; //监测点序号 std::string voltage_level; //监测点电压等级 std::string terminal_connect; //监测点接线方式 std::string timestamp; //更新时间 std::string status; //监测点状态 + + double PT1; // 电压变比1 + double PT2; // 电压变比2 + double CT1; // 电流变比1 + double CT2; // 电流变比2 }; //终端台账 class terminal_dev { public: - std::string guid; + std::string guid; //台账更新回复用 std::string terminal_id; - std::string terminal_code; + std::string terminal_name; std::string org_name; std::string maint_name; std::string station_name; @@ -78,6 +88,8 @@ public: std::string processNo; std::string maxProcessNum; + std::string mac; // 装置MAC地址 + std::vector line; }; @@ -314,9 +326,12 @@ bool is_blank(const std::string& str); void print_terminal(const terminal_dev& tmnl); void printTerminalDevMap(const std::map& terminal_dev_map); +void upload_data_test(); + ////////////////////////////////////////////////////////////////////////////////mq - +extern std::mutex queue_data_list_mutex; +extern std::list queue_data_list; /////////////////////////////////////////////////////////////////////////////////主函数类声明 @@ -353,6 +368,41 @@ typedef struct { pthread_mutex_t lock; // 线程专用互斥锁 } thread_info_t; +///////////////////////////////////////////////////////////////////////////////////////上送数据的json格式 +// 单条 DataArray 数据 +struct DataArrayItem { + int DataAttr; + int DataTimeSec; + int DataTimeUSec; + int DataTag; + std::string Data; +}; + +// Msg 对象 +struct MsgObj { + int Cldid; + int DataType; + int DataAttr; + int DsNameIdx; + std::vector DataArray; +}; + +// 整体 +struct FullObj { + int Mid; + int Did; + int Pri; + int Type; + MsgObj Msg; +}; + +// nlohmann序列化接口 +void to_json(nlohmann::json& j, const DataArrayItem& d); +void to_json(nlohmann::json& j, const MsgObj& m); +void to_json(nlohmann::json& j, const FullObj& f); + +////////////////////////////////////////////////////////////////////////////////////////////////////////////////// + #endif diff --git a/LFtid1056/cloudfront/code/main.cpp b/LFtid1056/cloudfront/code/main.cpp index 0590696..f543257 100644 --- a/LFtid1056/cloudfront/code/main.cpp +++ b/LFtid1056/cloudfront/code/main.cpp @@ -218,11 +218,11 @@ std::string get_parent_directory() { //初始化日志 init_loggers(); - //读取模型,下载文件 + //读取模型,下载模板文件 parse_model_cfg_web(); - //解析文件 - Set_xml_nodeinfo(); + //解析模板文件 + //Set_xml_nodeinfo(); StartFrontThread(); //开启主线程 diff --git a/LFtid1056/cloudfront/code/rocketmq.cpp b/LFtid1056/cloudfront/code/rocketmq.cpp index 16da6b8..b6f238d 100644 --- a/LFtid1056/cloudfront/code/rocketmq.cpp +++ b/LFtid1056/cloudfront/code/rocketmq.cpp @@ -754,7 +754,7 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d terminal_dev json_data; json_data.terminal_id = item.value("id", ""); - json_data.terminal_code = item.value("name", ""); + json_data.terminal_name = item.value("name", ""); json_data.org_name = item.value("org_name", ""); json_data.maint_name = item.value("maint_name", ""); json_data.station_name = item.value("stationName", ""); @@ -783,7 +783,7 @@ bool parseJsonMessageUD(const std::string& json_str, const std::string& output_d m.logical_device_seq = monitor_item.value("lineNo", ""); m.terminal_connect = monitor_item.value("ptType", ""); m.timestamp = json_data.timestamp; - m.terminal_code = json_data.terminal_code; + m.terminal_id = json_data.terminal_id; } } @@ -1180,7 +1180,7 @@ std::string prepare_update(const std::string& code_str, const terminal_dev& json xmlStream << "" << json_data.station_name << "" << std::endl; add_indent(xmlStream, indentLevel); - xmlStream << "" << json_data.terminal_code << "" << std::endl; + xmlStream << "" << json_data.terminal_name << "" << std::endl; add_indent(xmlStream, indentLevel); xmlStream << "" << json_data.timestamp << "" << std::endl; // Assuming `timestamp` @@ -1201,6 +1201,9 @@ std::string prepare_update(const std::string& code_str, const terminal_dev& json add_indent(xmlStream, indentLevel); xmlStream << "" << json_data.dev_key << "" << std::endl; + add_indent(xmlStream, indentLevel); + xmlStream << "" << json_data.mac << "" << std::endl; + // monitorData 部分 for (int i = 0; json_data.line[i].monitor_id[0] != '\0'; i++) { const ledger_monitor& monitor = json_data.line[i]; @@ -1228,9 +1231,21 @@ std::string prepare_update(const std::string& code_str, const terminal_dev& json xmlStream << "" << monitor.timestamp << "" << std::endl; add_indent(xmlStream, indentLevel); - xmlStream << "" << monitor.terminal_code << "" << std::endl; + xmlStream << "" << monitor.terminal_id << "" << std::endl; add_indent(xmlStream, indentLevel); + xmlStream << "" << monitor.CT1 << "" << std::endl; + + add_indent(xmlStream, indentLevel); + xmlStream << "" << monitor.CT2 << "" << std::endl; + + add_indent(xmlStream, indentLevel); + xmlStream << "" << monitor.PT1 << "" << std::endl; + + add_indent(xmlStream, indentLevel); + xmlStream << "" << monitor.PT2 << "" << std::endl; + + add_indent(xmlStream, indentLevel); xmlStream << "" << monitor.status << "" << std::endl; indentLevel--; diff --git a/LFtid1056/cloudfront/code/worker.cpp b/LFtid1056/cloudfront/code/worker.cpp index 78f769d..5516939 100644 --- a/LFtid1056/cloudfront/code/worker.cpp +++ b/LFtid1056/cloudfront/code/worker.cpp @@ -281,6 +281,7 @@ extern bool normalOutputEnabled; if (G_TEST_NUM != 0) { std::cout << "[PeriodicTask] Executing rocketmq_test_300()\n"; rocketmq_test_300(G_TEST_NUM, g_front_seg_index, G_TEST_TYPE,m_front); + upload_data_test(); } } @@ -412,7 +413,7 @@ void Worker::printLedgerinshell(const terminal_dev& dev, int fd) { std::ostringstream os; os << "\r\x1B[K------------------------------------\n"; os << "\r\x1B[K|-- terminal_id: " << dev.terminal_id << "\n"; - os << "\r\x1B[K|-- terminal_code: " << dev.terminal_code << "\n"; + os << "\r\x1B[K|-- terminal_name: " << dev.terminal_name << "\n"; os << "\r\x1B[K|-- dev_ip: " << dev.addr_str << "\n"; os << "\r\x1B[K|-- dev_port: " << dev.port << "\n"; os << "\r\x1B[K|-- dev_type: " << dev.dev_type << "\n"; @@ -427,6 +428,8 @@ void Worker::printLedgerinshell(const terminal_dev& dev, int fd) { os << "\r\x1B[K|-- tmnl_status: " << dev.tmnl_status << "\n"; os << "\r\x1B[K|-- timestamp: " << dev.timestamp << "\n"; + os << "\r\x1B[K|-- mac: " << dev.mac << "\n"; + for (size_t i = 0; i < dev.line.size(); ++i) { const auto& ld = dev.line[i]; if (ld.monitor_id.empty()) continue; @@ -434,11 +437,17 @@ void Worker::printLedgerinshell(const terminal_dev& dev, int fd) { os << "\r\x1B[K |-- monitor_id: " << ld.monitor_id << "\n"; os << "\r\x1B[K |-- monitor_name: " << ld.monitor_name << "\n"; os << "\r\x1B[K |-- logical_device_seq: " << ld.logical_device_seq << "\n"; - os << "\r\x1B[K |-- terminal_code: " << ld.terminal_code << "\n"; + os << "\r\x1B[K |-- terminal_id: " << ld.terminal_id << "\n"; os << "\r\x1B[K |-- voltage_level: " << ld.voltage_level << "\n"; os << "\r\x1B[K |-- terminal_connect: " << ld.terminal_connect << "\n"; os << "\r\x1B[K |-- status: " << ld.status << "\n"; os << "\r\x1B[K |-- timestamp: " << ld.timestamp << "\n"; + + os << "\r\x1B[K |-- CT1: " << ld.CT1 << "\n"; + os << "\r\x1B[K |-- CT2: " << ld.CT2 << "\n"; + os << "\r\x1B[K |-- PT1: " << ld.PT1 << "\n"; + os << "\r\x1B[K |-- PT2: " << ld.PT2 << "\n"; + } os << "\r\x1B[K------------------------------------\n";