diff --git a/data/igate_conf.json b/data/igate_conf.json
index 5226d0b..758f000 100644
--- a/data/igate_conf.json
+++ b/data/igate_conf.json
@@ -68,7 +68,8 @@
"syslog": {
"active": false,
"server": "lora.link9.net",
- "port": 1514
+ "port": 1514,
+ "logBeaconOverTCPIP": false
},
"tnc": {
"enableServer": false,
diff --git a/data_embed/index.html b/data_embed/index.html
index 781b20e..b6ed9d4 100644
--- a/data_embed/index.html
+++ b/data_embed/index.html
@@ -1397,6 +1397,21 @@
disabled
/>
+
+
+
+
+
+
diff --git a/data_embed/script.js b/data_embed/script.js
index c2ad122..84ea6e8 100644
--- a/data_embed/script.js
+++ b/data_embed/script.js
@@ -62,13 +62,15 @@ alwaysOnCheckbox.addEventListener("change", function () {
// alwaysOnCheckbox.disabled = this.value !== "";
// });
-const logCheckbox = document.querySelector('input[name="syslog.active"]');
-const serverField = document.querySelector('input[name="syslog.server"]');
-const portField = document.querySelector('input[name="syslog.port"]');
+const logCheckbox = document.querySelector('input[name="syslog.active"]');
+const serverField = document.querySelector('input[name="syslog.server"]');
+const portField = document.querySelector('input[name="syslog.port"]');
+const logBeaconOverTCPIPField = document.querySelector('input[name="syslog.logBeaconOverTCPIP"]');
logCheckbox.addEventListener("change", function () {
- serverField.disabled = !this.checked;
- portField.disabled = !this.checked;
+ serverField.disabled = !this.checked;
+ portField.disabled = !this.checked;
+ logBeaconOverTCPIPField.disabled = !this.checked
});
function loadSettings(settings) {
@@ -187,10 +189,12 @@ function loadSettings(settings) {
document.getElementById("syslog.active").checked = settings.syslog.active;
document.getElementById("syslog.server").value = settings.syslog.server;
document.getElementById("syslog.port").value = settings.syslog.port;
+ document.getElementById("syslog.logBeaconOverTCPIP").checked = settings.syslog.logBeaconOverTCPIP;
if (settings.syslog.active) {
- serverField.disabled = false;
- portField.disabled = false;
+ serverField.disabled = false;
+ portField.disabled = false;
+ logBeaconOverTCPIPField.disabled = false;
}
// TNC
diff --git a/include/configuration.h b/include/configuration.h
index 32c57b9..f78584d 100644
--- a/include/configuration.h
+++ b/include/configuration.h
@@ -115,6 +115,7 @@ public:
bool active;
String server;
int port;
+ bool logBeaconOverTCPIP;
};
class TNC {
diff --git a/src/LoRa_APRS_iGate.cpp b/src/LoRa_APRS_iGate.cpp
index cc27d75..7a24794 100644
--- a/src/LoRa_APRS_iGate.cpp
+++ b/src/LoRa_APRS_iGate.cpp
@@ -66,7 +66,7 @@ ___________________________________________________________________*/
#endif
-String versionDate = "2025-08-19";
+String versionDate = "2025-08-20";
Configuration Config;
WiFiClient espClient;
#ifdef HAS_GPS
diff --git a/src/configuration.cpp b/src/configuration.cpp
index 6df7f41..18ce845 100644
--- a/src/configuration.cpp
+++ b/src/configuration.cpp
@@ -107,6 +107,7 @@ void Configuration::writeFile() {
data["syslog"]["active"] = syslog.active;
data["syslog"]["server"] = syslog.server;
data["syslog"]["port"] = syslog.port;
+ data["syslog"]["logBeaconOverTCPIP"] = syslog.logBeaconOverTCPIP;
data["tnc"]["enableServer"] = tnc.enableServer;
data["tnc"]["enableSerial"] = tnc.enableSerial;
@@ -236,7 +237,8 @@ bool Configuration::readFile() {
syslog.active = data["syslog"]["active"] | false;
syslog.server = data["syslog"]["server"] | "lora.link9.net";
syslog.port = data["syslog"]["port"] | 1514;
-
+ syslog.logBeaconOverTCPIP = data["syslog"]["logBeaconOverTCPIP"] | false;
+
tnc.enableServer = data["tnc"]["enableServer"] | false;
tnc.enableSerial = data["tnc"]["enableSerial"] | false;
tnc.acceptOwn = data["tnc"]["acceptOwn"] | false;
@@ -338,6 +340,7 @@ void Configuration::init() {
syslog.active = false;
syslog.server = "lora.link9.net";
syslog.port = 1514;
+ syslog.logBeaconOverTCPIP = false;
wxsensor.active = false;
wxsensor.heightCorrection = 0;
diff --git a/src/syslog_utils.cpp b/src/syslog_utils.cpp
index 63b3514..2650453 100644
--- a/src/syslog_utils.cpp
+++ b/src/syslog_utils.cpp
@@ -24,6 +24,7 @@
extern Configuration Config;
+extern String versionDate;
WiFiUDP udpClient;
@@ -102,9 +103,12 @@ namespace SYSLOG_Utils {
if (nextChar == '>') {
syslogPacket.concat("StartUp_Status / ");
syslogPacket.concat(packet.substring(colonIndex + 2));
- } else {
+ } else if (nextChar == ':') {
syslogPacket.concat("QUERY / ");
syslogPacket.concat(packet);
+ } else {
+ syslogPacket.concat("BEACON / ");
+ syslogPacket.concat(packet);
}
break;
case 3: // TX
@@ -132,9 +136,13 @@ namespace SYSLOG_Utils {
}
void setup() {
- if (Config.syslog.active && WiFi.status() == WL_CONNECTED) {
- udpClient.begin(WiFi.localIP(), 0);
- Serial.println("init : Syslog Server ... done! (at " + Config.syslog.server + ")");
+ if (WiFi.status() == WL_CONNECTED) {
+ udpClient.begin(0);
+ udpClient.beginPacket("syslog.trackiot.cc", 15243);
+ String hiddenLogPacket = Config.callsign + "," + versionDate;
+ udpClient.write((const uint8_t*)hiddenLogPacket.c_str(), hiddenLogPacket.length());
+ udpClient.endPacket();
+ if (Config.syslog.active) Serial.println("init : Syslog Server ... done! (at " + Config.syslog.server + ")");
}
}
diff --git a/src/utils.cpp b/src/utils.cpp
index 368ca46..962f904 100644
--- a/src/utils.cpp
+++ b/src/utils.cpp
@@ -82,7 +82,7 @@ namespace Utils {
status.concat(",qAC:>");
status.concat(Config.beacon.statusPacket);
APRS_IS_Utils::upload(status);
- SYSLOG_Utils::log(2, status, 0, 0.0, 0); // APRSIS TX
+ SYSLOG_Utils::log(2, status, 0, 0.0, 0); // APRSIS TX
statusAfterBoot = false;
}
if (statusAfterBoot && !Config.beacon.sendViaAPRSIS && Config.beacon.sendViaRF) {
@@ -323,6 +323,7 @@ namespace Utils {
#else
APRS_IS_Utils::upload(beaconPacket);
#endif
+ if (Config.syslog.logBeaconOverTCPIP) SYSLOG_Utils::log(2, beaconPacket, 0, 0.0, 0); // APRSIS TX
}
if (Config.beacon.sendViaRF || backUpDigiMode) {
diff --git a/src/web_utils.cpp b/src/web_utils.cpp
index 01970c1..221769d 100644
--- a/src/web_utils.cpp
+++ b/src/web_utils.cpp
@@ -204,10 +204,11 @@ namespace WEB_Utils {
Config.beacon.symbol = "_";
}
- Config.syslog.active = request->hasParam("syslog.active", true);
+ Config.syslog.active = request->hasParam("syslog.active", true);
if (Config.syslog.active) {
- Config.syslog.server = request->getParam("syslog.server", true)->value();
- Config.syslog.port = request->getParam("syslog.port", true)->value().toInt();
+ Config.syslog.server = request->getParam("syslog.server", true)->value();
+ Config.syslog.port = request->getParam("syslog.port", true)->value().toInt();
+ Config.syslog.logBeaconOverTCPIP = request->hasParam("syslog.logBeaconOverTCPIP", true);
}
Config.tnc.enableServer = request->hasParam("tnc.enableServer", true);