LoRa_APRS_iGate/src/configuration.cpp

340 lines
14 KiB
C++
Raw Normal View History

2023-06-12 01:33:16 +02:00
#include <ArduinoJson.h>
2023-08-30 00:09:51 +02:00
#include <SPIFFS.h>
2023-06-06 17:21:59 +02:00
#include "configuration.h"
2023-06-08 06:44:13 +02:00
#include "display.h"
2023-06-06 17:21:59 +02:00
2024-05-14 05:30:15 +02:00
2024-02-24 14:09:05 +01:00
void Configuration::writeFile() {
Serial.println("Saving config..");
2024-05-24 02:13:05 +02:00
StaticJsonDocument<2560> data;
2024-02-24 14:09:05 +01:00
File configFile = SPIFFS.open("/igate_conf.json", "w");
if (wifiAPs[0].ssid != "") { // We don't want to save Auto AP empty SSID
for (int i = 0; i < wifiAPs.size(); i++) {
data["wifi"]["AP"][i]["ssid"] = wifiAPs[i].ssid;
data["wifi"]["AP"][i]["password"] = wifiAPs[i].password;
}
2023-06-06 17:21:59 +02:00
}
2024-08-14 18:07:17 +02:00
data["wifi"]["autoAP"]["password"] = wifiAutoAP.password;
2024-10-07 03:30:44 +02:00
data["wifi"]["autoAP"]["timeout"] = wifiAutoAP.timeout;
2024-08-14 18:07:17 +02:00
data["callsign"] = callsign;
data["aprs_is"]["active"] = aprs_is.active;
data["aprs_is"]["passcode"] = aprs_is.passcode;
data["aprs_is"]["server"] = aprs_is.server;
data["aprs_is"]["port"] = aprs_is.port;
data["aprs_is"]["filter"] = aprs_is.filter;
data["aprs_is"]["messagesToRF"] = aprs_is.messagesToRF;
data["aprs_is"]["objectsToRF"] = aprs_is.objectsToRF;
data["beacon"]["comment"] = beacon.comment;
data["beacon"]["interval"] = beacon.interval;
data["beacon"]["latitude"] = beacon.latitude;
data["beacon"]["longitude"] = beacon.longitude;
data["beacon"]["overlay"] = beacon.overlay;
data["beacon"]["symbol"] = beacon.symbol;
data["beacon"]["sendViaAPRSIS"] = beacon.sendViaAPRSIS;
data["beacon"]["sendViaRF"] = beacon.sendViaRF;
data["beacon"]["path"] = beacon.path;
data["digi"]["mode"] = digi.mode;
2024-10-08 06:03:58 +02:00
data["digi"]["ecoMode"] = digi.ecoMode;
2024-08-14 18:07:17 +02:00
data["lora"]["rxFreq"] = loramodule.rxFreq;
data["lora"]["txFreq"] = loramodule.txFreq;
data["lora"]["spreadingFactor"] = loramodule.spreadingFactor;
data["lora"]["signalBandwidth"] = loramodule.signalBandwidth;
data["lora"]["codingRate4"] = loramodule.codingRate4;
data["lora"]["power"] = loramodule.power;
data["lora"]["txActive"] = loramodule.txActive;
data["lora"]["rxActive"] = loramodule.rxActive;
data["display"]["alwaysOn"] = display.alwaysOn;
data["display"]["timeout"] = display.timeout;
data["display"]["turn180"] = display.turn180;
2023-06-06 17:21:59 +02:00
2024-05-24 16:43:06 +02:00
data["battery"]["sendInternalVoltage"] = battery.sendInternalVoltage;
data["battery"]["monitorInternalVoltage"] = battery.monitorInternalVoltage;
data["battery"]["internalSleepVoltage"] = battery.internalSleepVoltage;
data["battery"]["sendExternalVoltage"] = battery.sendExternalVoltage;
data["battery"]["externalVoltagePin"] = battery.externalVoltagePin;
data["battery"]["monitorExternalVoltage"] = battery.monitorExternalVoltage;
data["battery"]["externalSleepVoltage"] = battery.externalSleepVoltage;
2024-08-14 18:07:17 +02:00
data["battery"]["voltageDividerR1"] = battery.voltageDividerR1;
data["battery"]["voltageDividerR2"] = battery.voltageDividerR2;
2024-09-22 18:34:13 +02:00
data["battery"]["sendVoltageAsTelemetry"] = battery.sendVoltageAsTelemetry;
2024-06-27 00:13:02 +02:00
2024-10-05 13:48:08 +02:00
data["wxsensor"]["active"] = wxsensor.active;
data["wxsensor"]["heightCorrection"] = wxsensor.heightCorrection;
data["wxsensor"]["temperatureCorrection"] = wxsensor.temperatureCorrection;
2024-02-24 14:09:05 +01:00
2024-08-14 18:07:17 +02:00
data["syslog"]["active"] = syslog.active;
data["syslog"]["server"] = syslog.server;
data["syslog"]["port"] = syslog.port;
2024-05-24 16:43:06 +02:00
2024-08-14 18:07:17 +02:00
data["tnc"]["enableServer"] = tnc.enableServer;
data["tnc"]["enableSerial"] = tnc.enableSerial;
data["tnc"]["acceptOwn"] = tnc.acceptOwn;
2024-05-24 16:43:06 +02:00
2024-08-14 18:07:17 +02:00
data["other"]["rebootMode"] = rebootMode;
data["other"]["rebootModeTime"] = rebootModeTime;
2024-05-24 16:43:06 +02:00
2024-08-14 18:07:17 +02:00
data["ota"]["username"] = ota.username;
data["ota"]["password"] = ota.password;
2024-03-07 17:46:38 +01:00
2024-05-24 16:43:06 +02:00
data["other"]["rememberStationTime"] = rememberStationTime;
2024-03-28 18:00:46 +01:00
2024-08-14 18:07:17 +02:00
data["other"]["backupDigiMode"] = backupDigiMode;
2024-05-23 01:19:25 +02:00
2024-08-14 18:07:17 +02:00
data["other"]["lowPowerMode"] = lowPowerMode;
data["other"]["lowVoltageCutOff"] = lowVoltageCutOff;
2024-06-26 19:24:36 +02:00
2024-08-14 18:07:17 +02:00
data["personalNote"] = personalNote;
2024-08-13 20:48:08 +02:00
2024-08-14 18:07:17 +02:00
data["webadmin"]["active"] = webadmin.active;
data["webadmin"]["username"] = webadmin.username;
data["webadmin"]["password"] = webadmin.password;
2024-05-22 22:19:45 +02:00
2024-02-24 14:09:05 +01:00
serializeJson(data, configFile);
2023-06-06 17:21:59 +02:00
configFile.close();
2024-02-24 14:09:05 +01:00
Serial.println("Config saved");
}
bool Configuration::readFile() {
Serial.println("Reading config..");
File configFile = SPIFFS.open("/igate_conf.json", "r");
if (configFile) {
2024-05-24 02:13:05 +02:00
StaticJsonDocument<2560> data;
2024-02-24 14:09:05 +01:00
DeserializationError error = deserializeJson(data, configFile);
if (error) {
Serial.println("Failed to read file, using default configuration");
}
JsonArray WiFiArray = data["wifi"]["AP"];
for (int i = 0; i < WiFiArray.size(); i++) {
WiFi_AP wifiap;
wifiap.ssid = WiFiArray[i]["ssid"].as<String>();
wifiap.password = WiFiArray[i]["password"].as<String>();
wifiAPs.push_back(wifiap);
}
2024-08-14 17:50:39 +02:00
wifiAutoAP.password = data["wifi"]["autoAP"]["password"] | "1234567890";
2024-10-07 03:30:44 +02:00
wifiAutoAP.timeout = data["wifi"]["autoAP"]["timeout"] | 10;
2024-08-14 17:50:39 +02:00
callsign = data["callsign"] | "NOCALL-10";
rememberStationTime = data["other"]["rememberStationTime"] | 30;
2024-08-14 18:07:17 +02:00
beacon.latitude = data["beacon"]["latitude"] | 0.0;
beacon.longitude = data["beacon"]["longitude"] | 0.0;
beacon.comment = data["beacon"]["comment"] | "LoRa APRS";
beacon.interval = data["beacon"]["interval"] | 15;
beacon.overlay = data["beacon"]["overlay"] | "L";
2024-08-19 16:41:46 +02:00
beacon.symbol = data["beacon"]["symbol"] | "a";
beacon.path = data["beacon"]["path"] | "WIDE1-1";
2024-08-14 18:07:17 +02:00
beacon.sendViaAPRSIS = data["beacon"]["sendViaAPRSIS"] | false;
beacon.sendViaRF = data["beacon"]["sendViaRF"] | false;
2024-08-14 17:50:39 +02:00
2024-08-14 18:07:17 +02:00
aprs_is.active = data["aprs_is"]["active"] | false;
2024-08-14 17:50:39 +02:00
aprs_is.passcode = data["aprs_is"]["passcode"] | "XYZWV";
aprs_is.server = data["aprs_is"]["server"] | "rotate.aprs2.net";
aprs_is.port = data["aprs_is"]["port"] | 14580;
2024-08-14 18:07:17 +02:00
aprs_is.filter = data["aprs_is"]["filter"] | "m/10";
aprs_is.messagesToRF = data["aprs_is"]["messagesToRF"] | false;
aprs_is.objectsToRF = data["aprs_is"]["objectsToRF"] | false;
2024-08-14 17:50:39 +02:00
2024-08-21 01:01:04 +02:00
digi.mode = data["digi"]["mode"] | 0;
2024-10-08 06:03:58 +02:00
digi.ecoMode = data["digi"]["ecoMode"] | false;
2024-03-17 12:21:11 +01:00
2024-08-14 18:07:17 +02:00
loramodule.txFreq = data["lora"]["txFreq"] | 433775000;
loramodule.rxFreq = data["lora"]["rxFreq"] | 433775000;
2024-08-14 17:50:39 +02:00
loramodule.spreadingFactor = data["lora"]["spreadingFactor"] | 12;
loramodule.signalBandwidth = data["lora"]["signalBandwidth"] | 125000;
loramodule.codingRate4 = data["lora"]["codingRate4"] | 5;
loramodule.power = data["lora"]["power"] | 20;
2024-08-14 18:07:17 +02:00
loramodule.txActive = data["lora"]["txActive"] | false;
loramodule.rxActive = data["lora"]["rxActive"] | false;
2024-03-28 18:00:46 +01:00
2024-08-14 17:50:39 +02:00
display.alwaysOn = data["display"]["alwaysOn"] | true;
display.timeout = data["display"]["timeout"] | 4;
display.turn180 = data["display"]["turn180"] | false;
2024-05-22 22:19:45 +02:00
2024-08-14 17:50:39 +02:00
battery.sendInternalVoltage = data["battery"]["sendInternalVoltage"] | false;
battery.monitorInternalVoltage = data["battery"]["monitorInternalVoltage"] | false;
battery.internalSleepVoltage = data["battery"]["internalSleepVoltage"] | 2.9;
2024-05-23 01:19:25 +02:00
2024-08-14 17:50:39 +02:00
battery.sendExternalVoltage = data["battery"]["sendExternalVoltage"] | false;
battery.externalVoltagePin = data["battery"]["externalVoltagePin"] | 34;
battery.monitorExternalVoltage = data["battery"]["monitorExternalVoltage"] | false;
battery.externalSleepVoltage = data["battery"]["externalSleepVoltage"] | 10.9;
2024-08-14 18:07:17 +02:00
battery.voltageDividerR1 = data["battery"]["voltageDividerR1"] | 100.0;
battery.voltageDividerR2 = data["battery"]["voltageDividerR2"] | 27.0;
2024-06-26 19:05:45 +02:00
2024-09-25 16:23:38 +02:00
battery.sendVoltageAsTelemetry = data["battery"]["sendVoltageAsTelemetry"] | false;
2024-09-22 18:34:13 +02:00
2024-10-05 13:48:08 +02:00
wxsensor.active = data["wxsensor"]["active"] | false;
wxsensor.heightCorrection = data["wxsensor"]["heightCorrection"] | 0;
wxsensor.temperatureCorrection = data["wxsensor"]["temperatureCorrection"] | 0.0;
2024-08-13 20:48:08 +02:00
2024-08-14 17:50:39 +02:00
syslog.active = data["syslog"]["active"] | false;
syslog.server = data["syslog"]["server"] | "192.168.0.100";
syslog.port = data["syslog"]["port"] | 514;
2024-03-07 17:46:38 +01:00
2024-08-14 17:50:39 +02:00
tnc.enableServer = data["tnc"]["enableServer"] | false;
tnc.enableSerial = data["tnc"]["enableSerial"] | false;
tnc.acceptOwn = data["tnc"]["acceptOwn"] | false;
2024-03-07 17:46:38 +01:00
2024-08-14 17:50:39 +02:00
ota.username = data["ota"]["username"] | "";
ota.password = data["ota"]["password"] | "";
2024-03-07 17:46:38 +01:00
2024-08-14 17:50:39 +02:00
webadmin.active = data["webadmin"]["active"] | false;
webadmin.username = data["webadmin"]["username"] | "admin";
webadmin.password = data["webadmin"]["password"] | "";
2024-03-07 17:46:38 +01:00
2024-08-14 17:50:39 +02:00
lowPowerMode = data["other"]["lowPowerMode"] | false;
lowVoltageCutOff = data["other"]["lowVoltageCutOff"] | 0;
2024-03-07 17:46:38 +01:00
2024-08-14 17:50:39 +02:00
backupDigiMode = data["other"]["backupDigiMode"] | false;
2024-03-07 17:46:38 +01:00
2024-08-14 17:50:39 +02:00
rebootMode = data["other"]["rebootMode"] | false;
rebootModeTime = data["other"]["rebootModeTime"] | 6;
2024-03-07 17:46:38 +01:00
2024-08-14 17:50:39 +02:00
personalNote = data["personalNote"] | "personal note here...";
2024-03-07 17:46:38 +01:00
2024-02-24 14:09:05 +01:00
if (wifiAPs.size() == 0) { // If we don't have any WiFi's from config we need to add "empty" SSID for AUTO AP
WiFi_AP wifiap;
wifiap.ssid = "";
wifiap.password = "";
wifiAPs.push_back(wifiap);
}
configFile.close();
Serial.println("Config read successfuly");
return true;
} else {
Serial.println("Config file not found");
return false;
}
}
void Configuration::init() {
2024-03-07 17:46:38 +01:00
2024-02-24 14:09:05 +01:00
WiFi_AP wifiap;
2024-08-14 18:07:17 +02:00
wifiap.ssid = "";
wifiap.password = "";
2024-05-24 16:43:06 +02:00
2024-02-24 14:09:05 +01:00
wifiAPs.push_back(wifiap);
2024-08-14 18:07:17 +02:00
wifiAutoAP.password = "1234567890";
2024-10-07 03:30:44 +02:00
wifiAutoAP.timeout = 10;
2024-02-24 14:09:05 +01:00
2024-08-14 18:07:17 +02:00
callsign = "N0CALL-10";
2024-08-14 17:50:39 +02:00
2024-08-14 18:07:17 +02:00
beacon.comment = "LoRa APRS";
beacon.latitude = 0.0;
beacon.longitude = 0.0;
beacon.interval = 15;
beacon.overlay = "L";
beacon.symbol = "a";
beacon.sendViaAPRSIS = true;
beacon.sendViaRF = false;
beacon.path = "WIDE1-1";
2024-03-07 17:46:38 +01:00
2024-10-08 06:03:58 +02:00
digi.mode = 0;
digi.ecoMode = false;
2024-02-24 14:09:05 +01:00
2024-08-14 18:07:17 +02:00
tnc.enableServer = false;
tnc.enableSerial = false;
tnc.acceptOwn = false;
2024-03-17 12:21:11 +01:00
2024-08-14 18:07:17 +02:00
aprs_is.active = false;
aprs_is.passcode = "XYZVW";
aprs_is.server = "rotate.aprs2.net";
aprs_is.port = 14580;
aprs_is.filter = "m/10";
aprs_is.messagesToRF = false;
aprs_is.objectsToRF = false;
2024-03-07 17:46:38 +01:00
2024-08-14 18:07:17 +02:00
loramodule.txFreq = 433775000;
loramodule.rxFreq = 433775000;
loramodule.spreadingFactor = 12;
loramodule.signalBandwidth = 125000;
loramodule.codingRate4 = 5;
loramodule.power = 20;
loramodule.txActive = false;
loramodule.rxActive = true;
2024-05-20 23:57:58 +02:00
2024-08-14 18:07:17 +02:00
display.alwaysOn = true;
display.timeout = 4;
display.turn180 = false;
2024-05-20 23:57:58 +02:00
2024-08-14 18:07:17 +02:00
syslog.active = false;
syslog.server = "192.168.0.100";
syslog.port = 514;
2024-05-20 23:57:58 +02:00
2024-10-05 13:48:08 +02:00
wxsensor.active = false;
wxsensor.heightCorrection = 0;
wxsensor.temperatureCorrection = 0.0;
2024-05-20 23:57:58 +02:00
2024-08-14 18:07:17 +02:00
ota.username = "";
ota.password = "";
2024-02-24 14:09:05 +01:00
2024-08-14 18:07:17 +02:00
rememberStationTime = 30;
2024-05-24 16:43:06 +02:00
battery.sendInternalVoltage = false;
battery.monitorInternalVoltage = false;
battery.internalSleepVoltage = 2.9;
2024-05-24 16:43:06 +02:00
battery.sendExternalVoltage = false;
battery.externalVoltagePin = 34;
battery.monitorExternalVoltage = false;
2024-08-14 17:50:39 +02:00
battery.externalSleepVoltage = 10.9;
battery.voltageDividerR1 = 100.0;
battery.voltageDividerR2 = 27.0;
2024-02-24 14:09:05 +01:00
2024-09-22 18:34:13 +02:00
battery.sendVoltageAsTelemetry = true;
2024-08-14 18:07:17 +02:00
lowPowerMode = false;
lowVoltageCutOff = 0;
2024-03-28 18:00:46 +01:00
2024-08-14 18:07:17 +02:00
backupDigiMode = false;
2024-05-22 22:19:45 +02:00
2024-08-14 18:07:17 +02:00
rebootMode = false;
rebootModeTime = 0;
2024-05-23 01:19:25 +02:00
2024-08-14 18:07:17 +02:00
personalNote = "";
2024-06-26 19:05:45 +02:00
2024-08-14 18:07:17 +02:00
webadmin.active = false;
webadmin.username = "admin";
webadmin.password = "";
2024-08-13 20:48:08 +02:00
2024-05-22 22:19:45 +02:00
Serial.println("All is Written!");
2023-06-06 17:21:59 +02:00
}
2024-02-24 14:09:05 +01:00
Configuration::Configuration() {
if (!SPIFFS.begin(false)) {
Serial.println("SPIFFS Mount Failed");
return;
} else {
2024-03-07 17:46:38 +01:00
Serial.println("SPIFFS Mounted");
2024-02-24 14:09:05 +01:00
}
2024-03-07 17:46:38 +01:00
2024-02-24 14:09:05 +01:00
bool exists = SPIFFS.exists("/igate_conf.json");
if (!exists) {
init();
writeFile();
ESP.restart();
2023-06-06 17:21:59 +02:00
}
2024-03-07 17:46:38 +01:00
2024-02-24 14:09:05 +01:00
readFile();
2023-06-06 17:21:59 +02:00
}