2025-01-23 11:13:58 +08:00
|
|
|
|
#include "thread_func.hpp"
|
|
|
|
|
|
|
|
|
|
|
|
#include <time.h>
|
|
|
|
|
|
#include <math.h>
|
|
|
|
|
|
#include <string.h>
|
|
|
|
|
|
#include <cstdlib>
|
|
|
|
|
|
#include <linux/types.h>
|
|
|
|
|
|
#include <sys/sysinfo.h>
|
|
|
|
|
|
#include <dirent.h>
|
|
|
|
|
|
#include <map>
|
|
|
|
|
|
#include <zlog.h>
|
|
|
|
|
|
#include "mqttclient/mqtt_client.h"
|
|
|
|
|
|
#include "uart/uart.hpp"
|
|
|
|
|
|
#include "common/common_func.hpp"
|
|
|
|
|
|
#include "jsonparse/communication_cmd.hpp"
|
|
|
|
|
|
#include "wifi_5g/wpa_client.h"
|
|
|
|
|
|
|
|
|
|
|
|
extern zlog_category_t *zct;
|
|
|
|
|
|
extern zlog_category_t *zbt;
|
2025-11-29 14:13:48 +08:00
|
|
|
|
#ifdef NR5G_MODULE
|
|
|
|
|
|
#include "wifi_5g/dial.h"
|
2025-01-23 11:13:58 +08:00
|
|
|
|
|
2025-11-29 14:13:48 +08:00
|
|
|
|
int fd = -1;
|
|
|
|
|
|
#endif
|
2025-01-23 11:13:58 +08:00
|
|
|
|
void CheckThread() {
|
|
|
|
|
|
zlog_info(zbt, "ENTER CHECK THREAD ");
|
|
|
|
|
|
|
|
|
|
|
|
int heart_count = 0;
|
|
|
|
|
|
|
|
|
|
|
|
int time_check = 0;
|
|
|
|
|
|
int reset_flag = 0;
|
|
|
|
|
|
int online_check = 0;
|
|
|
|
|
|
int HardStatus = 0;
|
|
|
|
|
|
int logClean = 0;
|
|
|
|
|
|
int Battery = 0;
|
|
|
|
|
|
int commSignal = 0;
|
|
|
|
|
|
int loose_check = 0;
|
|
|
|
|
|
int mqttresend = 0;
|
|
|
|
|
|
int checkNet0 = 0;
|
2025-03-10 11:43:01 +08:00
|
|
|
|
int wifi_reconnect_count = 0;
|
2025-11-29 14:13:48 +08:00
|
|
|
|
int connectCount = 0;
|
2025-01-23 11:13:58 +08:00
|
|
|
|
while (GlobalConfig::QuitFlag_G) {
|
|
|
|
|
|
GlobalConfig::threadStatus = 1;
|
|
|
|
|
|
sleep(1);
|
|
|
|
|
|
if (10 == heart_count) {
|
|
|
|
|
|
if (GlobalConfig::LinkCount > 30) {
|
|
|
|
|
|
zlog_error(zct, "MQTT connect failed ");
|
|
|
|
|
|
}
|
|
|
|
|
|
std::string ipTemp = IpAddrInit();
|
|
|
|
|
|
GlobalConfig::IpAddr_G = ipTemp;
|
|
|
|
|
|
heart_count = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (7200 == time_check) { // 2h
|
|
|
|
|
|
time_check = 0;
|
|
|
|
|
|
char buf[256] = {0};
|
|
|
|
|
|
char buf2[256] = {0};
|
|
|
|
|
|
sprintf(buf, "{\"dataNodeGatewayNo\":\"%s\",\"cmd\":\"12\",\"status\":\"REQ\"}", GlobalConfig::MacAddr_G.c_str());
|
|
|
|
|
|
sprintf(buf2, "{\"dataWatchNo\":\"%s\",\"cmd\":\"12\",\"status\":\"REQ\"}", GlobalConfig::MacAddr_G.c_str());
|
|
|
|
|
|
std::string str = std::string(buf);
|
|
|
|
|
|
std::string str2 = std::string(buf2);
|
|
|
|
|
|
|
|
|
|
|
|
int iRet = data_publish(str.c_str(), GlobalConfig::Topic_G.mPubTiming.c_str());
|
|
|
|
|
|
iRet = data_publish(str.c_str(), GlobalConfig::Topic_G.mPubCmd.c_str());
|
|
|
|
|
|
iRet = data_publish(str2.c_str(), GlobalConfig::Topic_G.mPubTiming.c_str());
|
|
|
|
|
|
iRet = data_publish(str2.c_str(), GlobalConfig::Topic_G.mPubCmd.c_str());
|
|
|
|
|
|
if (iRet != 0) {
|
2025-02-12 17:36:41 +08:00
|
|
|
|
char localtimestamp[32] = { 0 };
|
|
|
|
|
|
GetTimeNet(localtimestamp, 1);
|
2026-01-16 15:14:01 +08:00
|
|
|
|
char insertSql[1024] = {0};
|
|
|
|
|
|
sprintf(insertSql, " '1','MQTT connect failed','%s'",localtimestamp);
|
|
|
|
|
|
sqlite_db_ctrl::instance().InsertData("t_process_info", insertSql);
|
|
|
|
|
|
zlog_error(zct, "MQTT connect failed ,time check");
|
|
|
|
|
|
#ifdef Q4G_MODULE
|
2025-02-12 17:36:41 +08:00
|
|
|
|
char whereCon[100]={0};
|
|
|
|
|
|
sprintf(whereCon,"DATE(timestamp, 'unixepoch') = DATE('now') ORDER BY timeStamp DESC limit 0,1");
|
|
|
|
|
|
std::string strCount = sqlite_db_ctrl::instance().GetData(" reboot_record ", "count", whereCon);
|
|
|
|
|
|
if (atoi(strCount.c_str()) < 3)//当天大于三次不再重启进程
|
|
|
|
|
|
{
|
|
|
|
|
|
char insertSql[64] = {0};
|
|
|
|
|
|
sprintf(insertSql, "'%s',%d,'%s'",localtimestamp,atoi(strCount.c_str())+1,"4G connect failed ");
|
|
|
|
|
|
sqlite_db_ctrl::instance().InsertData(" reboot_record ", insertSql);
|
|
|
|
|
|
gpio_set(GlobalConfig::GPIO_G.commPower,0);
|
|
|
|
|
|
zlog_warn(zct,"commPower start\n");
|
|
|
|
|
|
sleep(2);
|
|
|
|
|
|
gpio_set(GlobalConfig::GPIO_G.commPower,1);
|
|
|
|
|
|
zlog_warn(zct,"commPower End\n");
|
|
|
|
|
|
sleep(2);
|
2026-01-16 15:14:01 +08:00
|
|
|
|
char localtimestamp[32] = { 0 };
|
|
|
|
|
|
GetTimeNet(localtimestamp, 1);
|
|
|
|
|
|
memset(insertSql,0,sizeof(insertSql));
|
|
|
|
|
|
sprintf(insertSql, " '2','4G module reset','%s'",localtimestamp);
|
|
|
|
|
|
sqlite_db_ctrl::instance().InsertData("t_process_info", insertSql);
|
|
|
|
|
|
zlog_error(zct, "MQTT connect failed ,time check");
|
2025-02-12 17:36:41 +08:00
|
|
|
|
system("reboot");
|
|
|
|
|
|
}else{
|
|
|
|
|
|
zlog_error(zct,"Q4G_MODULE error\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
2025-01-23 11:13:58 +08:00
|
|
|
|
#ifdef NR5G_MODULE
|
2025-11-29 14:13:48 +08:00
|
|
|
|
Dial dial;
|
2025-01-23 11:13:58 +08:00
|
|
|
|
dial.closePort();
|
|
|
|
|
|
gpio_set(GlobalConfig::GPIO_G.commPower, 0);
|
|
|
|
|
|
zlog_warn(zct, "commPower start");
|
|
|
|
|
|
sleep(2);
|
|
|
|
|
|
gpio_set(GlobalConfig::GPIO_G.commPower, 1);
|
|
|
|
|
|
zlog_warn(zct, "commPower End");
|
2026-01-16 15:14:01 +08:00
|
|
|
|
char localtimestamp[32] = { 0 };
|
|
|
|
|
|
GetTimeNet(localtimestamp, 1);
|
|
|
|
|
|
memset(insertSql,0,sizeof(insertSql));
|
|
|
|
|
|
sprintf(insertSql, " '2','5G module reset','%s'",localtimestamp);
|
|
|
|
|
|
sqlite_db_ctrl::instance().InsertData("t_process_info", insertSql);
|
2025-01-23 11:13:58 +08:00
|
|
|
|
sleep(20);
|
|
|
|
|
|
connectCount++;
|
|
|
|
|
|
if (connectCount > 10) {
|
|
|
|
|
|
zlog_error(zct, "5G reset error ,reboot!");
|
|
|
|
|
|
system("reboot");
|
|
|
|
|
|
}
|
|
|
|
|
|
dial.openPort("/dev/ttyUSB2");
|
|
|
|
|
|
dial.setState();
|
|
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
#ifdef WIFI_MODULE
|
|
|
|
|
|
zlog_warn(zct, "WiFi reset!");
|
|
|
|
|
|
system("/etc/init.d/wpa_restart");
|
|
|
|
|
|
sleep(5);
|
2025-03-10 11:43:01 +08:00
|
|
|
|
std::string strip = GetGwIp_("wlan0");
|
|
|
|
|
|
zlog_warn(zct,"strip = %s", strip.c_str());
|
|
|
|
|
|
|
|
|
|
|
|
gpio_set(GlobalConfig::GPIO_G.wifiReset, 1);
|
|
|
|
|
|
sleep(5);
|
|
|
|
|
|
gpio_set(GlobalConfig::GPIO_G.wifiReset, 0);
|
2026-01-16 15:14:01 +08:00
|
|
|
|
char localtimestamp[32] = { 0 };
|
|
|
|
|
|
GetTimeNet(localtimestamp, 1);
|
|
|
|
|
|
memset(insertSql,0,sizeof(insertSql));
|
|
|
|
|
|
sprintf(insertSql, " '2','WiFi module reset','%s'",localtimestamp);
|
|
|
|
|
|
sqlite_db_ctrl::instance().InsertData("t_process_info", insertSql);
|
2025-03-10 11:43:01 +08:00
|
|
|
|
sleep(30);
|
|
|
|
|
|
wifi::WPAClient wpa;
|
|
|
|
|
|
wpa.ReconnectWiFi();
|
|
|
|
|
|
system("/etc/init.d/wpa_restart");
|
|
|
|
|
|
sleep(5);
|
|
|
|
|
|
system("udhcpc -b -i wlan0 &");
|
2025-01-23 11:13:58 +08:00
|
|
|
|
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (HardStatus == 3600) { // one hour 3600
|
|
|
|
|
|
JsonData jd;
|
|
|
|
|
|
jd.JsonCmd_07();
|
|
|
|
|
|
HardStatus = 0;
|
2026-01-16 15:14:01 +08:00
|
|
|
|
sqlite_db_ctrl::instance().SaveSystemHardStatus();
|
2025-01-23 11:13:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
if(checkNet0 == 5){
|
|
|
|
|
|
checkNet0 = 0;
|
|
|
|
|
|
int iStatus = get_netlink_status("eth0");
|
|
|
|
|
|
if(iStatus == 1 && GlobalConfig::net0Status == 0){
|
|
|
|
|
|
system("ifconfig eth0:1 192.168.188.188 netmask 255.255.255.0");
|
|
|
|
|
|
}
|
|
|
|
|
|
GlobalConfig::net0Status = iStatus;
|
|
|
|
|
|
}
|
|
|
|
|
|
if (mqttresend == 7200) {
|
|
|
|
|
|
mqttresend = 0;
|
|
|
|
|
|
zlog_info(zct, "mqttresend check");
|
|
|
|
|
|
Json::Value jsHeart;
|
|
|
|
|
|
Json::FastWriter fw;
|
|
|
|
|
|
jsHeart["dataNodeGatewayNo"] = GlobalConfig::MacAddr_G;
|
|
|
|
|
|
jsHeart["status"] = "online_V" + GlobalConfig::Version;
|
|
|
|
|
|
jsHeart["IP"] = GlobalConfig::IpAddr_G;
|
|
|
|
|
|
std::string strJson = fw.write(jsHeart);
|
|
|
|
|
|
int iRet = data_publish(strJson.c_str(), GlobalConfig::Topic_G.mPubHeart.c_str());
|
|
|
|
|
|
if (iRet == 0) {
|
|
|
|
|
|
sqlite_db_ctrl::instance().QueryofflineData();
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (1800 == online_check) {
|
|
|
|
|
|
online_check = 0;
|
|
|
|
|
|
int Count = sqlite_db_ctrl::instance().GetTableRows(T_SENSOR_INFO(TNAME), NULL);
|
|
|
|
|
|
if (Count > 0) {
|
|
|
|
|
|
JsonData jd;
|
|
|
|
|
|
jd.DataNodeStatusCheck();
|
|
|
|
|
|
char localtimestamp[32] = {0};
|
|
|
|
|
|
GetTimeNet(localtimestamp, 1);
|
|
|
|
|
|
std::string nowTimetamp = std::string(localtimestamp);
|
|
|
|
|
|
char selectCon[128] = {0};
|
|
|
|
|
|
sprintf(selectCon, " sendMsg <> '' ORDER BY timeStamp DESC LIMIT 0,1");
|
|
|
|
|
|
sleep(1);
|
|
|
|
|
|
std::string strTime = sqlite_db_ctrl::instance().GetData(T_DATASTATIC_INFO(TNAME), "timeStamp", selectCon);
|
|
|
|
|
|
long lTime = atol(nowTimetamp.c_str()) - atol(strTime.c_str());
|
|
|
|
|
|
zlog_info(zct, "online check = %ld", lTime);
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (7200 == Battery) {
|
|
|
|
|
|
Battery = 0;
|
|
|
|
|
|
zlog_warn(zct, "Battery");
|
|
|
|
|
|
sqlite_db_ctrl::instance().CalculateBattery();
|
|
|
|
|
|
JsonData jd;
|
|
|
|
|
|
jd.JsonCmd_30();
|
|
|
|
|
|
jd.JsonCmd_07();
|
|
|
|
|
|
jd.JsonCmd_29();
|
|
|
|
|
|
jd.JsonCmd_31();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (3500 == loose_check) {
|
|
|
|
|
|
loose_check = 0;
|
2025-10-16 18:13:26 +08:00
|
|
|
|
int looseEnable = readIntValue("config", "looseEnable", (char *)GlobalConfig::Config_G.c_str());
|
|
|
|
|
|
if (looseEnable == 1)
|
|
|
|
|
|
{
|
|
|
|
|
|
zlog_warn(zct, "loosecheck\n");
|
|
|
|
|
|
sqlite_db_ctrl::instance().CalculateDip();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
2025-01-23 11:13:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (18000 == commSignal) { // 5h
|
|
|
|
|
|
Json::Value jsBody, jsonVal;
|
|
|
|
|
|
Json::FastWriter showValue;
|
|
|
|
|
|
if (GlobalConfig::NetStatus == "\"NOCONN\"" || GlobalConfig::NetStatus == "\"CONNECT\"") {
|
|
|
|
|
|
if (GlobalConfig::NetSignal == 0) {
|
|
|
|
|
|
jsBody["communicationSignal"] = "未知";
|
|
|
|
|
|
} else if (GlobalConfig::NetSignal > -80) {
|
|
|
|
|
|
jsBody["commSignal"] = "优";
|
|
|
|
|
|
} else if (GlobalConfig::NetSignal > -90 && GlobalConfig::NetSignal < -80) {
|
|
|
|
|
|
jsBody["commSignal"] = "良";
|
|
|
|
|
|
} else if (GlobalConfig::NetSignal > -105 && GlobalConfig::NetSignal < -90) {
|
|
|
|
|
|
jsBody["commSignal"] = "一般";
|
|
|
|
|
|
} else if (GlobalConfig::NetSignal < -105) {
|
|
|
|
|
|
jsBody["commSignal"] = "弱";
|
|
|
|
|
|
} else if (GlobalConfig::NetSignal < -115) {
|
|
|
|
|
|
jsBody["commSignal"] = "不稳定";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
} else if (GlobalConfig::NetStatus == "\"SEARCH\"") {
|
|
|
|
|
|
jsBody["commSignal"] = "搜索网络";
|
|
|
|
|
|
} else if (GlobalConfig::NetStatus == "\"LIMSRV\"") {
|
|
|
|
|
|
jsBody["commSignal"] = "未插卡";
|
|
|
|
|
|
} else {
|
|
|
|
|
|
jsBody["commSignal"] = "未知";
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
jsonVal["cmd"] = "53";
|
|
|
|
|
|
std::string dataBody = showValue.write(jsBody);
|
|
|
|
|
|
jsonVal["cmdBody"] = dataBody;
|
|
|
|
|
|
data_publish(showValue.write(jsonVal).c_str(), GlobalConfig::Topic_G.mPubConfig.c_str());
|
|
|
|
|
|
}
|
|
|
|
|
|
if (21600 == logClean) {
|
|
|
|
|
|
logClean = 0;
|
|
|
|
|
|
char localtimestamp[32] = {0};
|
|
|
|
|
|
GetTimeNet(localtimestamp, 1);
|
|
|
|
|
|
char whereCon[1024] = {0};
|
|
|
|
|
|
sprintf(whereCon, " timestamp < '%ld' ", atol(localtimestamp) - 2592000 * 2); //删除2个月前的数据
|
|
|
|
|
|
sqlite_db_ctrl::instance().DeleteTableData(" t_battery_history ", whereCon);
|
|
|
|
|
|
|
|
|
|
|
|
sqlite_db_ctrl::instance().DeleteTableData(" receive_wave_status ", whereCon);
|
2025-05-27 15:37:11 +08:00
|
|
|
|
sqlite_db_ctrl::instance().ClearExpireData();
|
2025-01-23 11:13:58 +08:00
|
|
|
|
}
|
|
|
|
|
|
#ifdef WIFI_MODULE
|
|
|
|
|
|
if (wifi_reconnect_count == 600) { // 每 10分钟,重连WiFi网络
|
|
|
|
|
|
wifi_reconnect_count = 0;
|
|
|
|
|
|
wifi::WPAClient wpa;
|
|
|
|
|
|
std::string netssid = wpa.GetNetSsid();
|
|
|
|
|
|
std::string currentssid = "";
|
|
|
|
|
|
if (0 == netssid.compare("")) {
|
|
|
|
|
|
netssid = wpa.GetNetSsid();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
if (netssid.length() > 0) {
|
|
|
|
|
|
currentssid = wpa.GetCurrentSSID();
|
|
|
|
|
|
if (currentssid.length() > 0) {
|
|
|
|
|
|
char buf[64] = {0};
|
|
|
|
|
|
std::string rssiSend = "";
|
|
|
|
|
|
rssiSend = "/usr/sbin/wpa_cli signal_poll|grep RSSI | cut -f 2 -d '='";
|
|
|
|
|
|
system_custom(rssiSend.c_str(), buf);
|
|
|
|
|
|
std::string Rssi = std::string(buf);
|
|
|
|
|
|
|
|
|
|
|
|
memset(buf, 0, 64);
|
|
|
|
|
|
sprintf(buf, "wifi:true Rssi:%s", Rssi.c_str());
|
|
|
|
|
|
zlog_info(zct, "%s\n", buf);
|
|
|
|
|
|
|
|
|
|
|
|
} else {
|
|
|
|
|
|
std::string runinfo = "wifi:false\n";
|
|
|
|
|
|
zlog_info(zct, "%s\n", runinfo.c_str());
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
if (wpa.ReconnectWiFi()) {
|
|
|
|
|
|
zlog_info(zct, "wifi reconnect ok\n");
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|
|
|
|
|
|
#endif
|
|
|
|
|
|
|
|
|
|
|
|
if (reset_flag > 7200) {
|
|
|
|
|
|
reset_flag = 0;
|
|
|
|
|
|
}
|
|
|
|
|
|
Battery++;
|
|
|
|
|
|
reset_flag++;
|
|
|
|
|
|
time_check++;
|
|
|
|
|
|
heart_count++;
|
|
|
|
|
|
online_check++;
|
|
|
|
|
|
HardStatus++;
|
|
|
|
|
|
logClean++;
|
|
|
|
|
|
loose_check++;
|
|
|
|
|
|
mqttresend++;
|
|
|
|
|
|
checkNet0 ++;
|
|
|
|
|
|
#ifdef WIFI_MODULE
|
|
|
|
|
|
wifi_reconnect_count++;
|
|
|
|
|
|
#endif
|
|
|
|
|
|
}
|
|
|
|
|
|
}
|