Merge pull request #15 from lora-aprs/config_management

Improve config management
This commit is contained in:
Peter Buchegger 2020-11-06 21:59:07 +01:00 committed by GitHub
commit 2caf2a99f0
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 81 additions and 86 deletions

View file

@ -1,10 +1,6 @@
name: PlatformIO CI
on:
push:
branches: [ master ]
pull_request:
branches: [ master ]
on: [push, pull_request]
jobs:
PlatformIO-Check:

View file

@ -2,7 +2,6 @@
#include "configuration.h"
ConfigurationManagement::ConfigurationManagement(String FilePath)
: mFilePath(FilePath)
{
@ -13,14 +12,8 @@ ConfigurationManagement::ConfigurationManagement(String FilePath)
if(!SPIFFS.begin())
{
Serial.println("[ERROR] Formating SPIFFS was not okay!");
return;
}
}
if(!SPIFFS.exists(mFilePath))
{
Configuration conf;
writeConfiguration(conf);
}
}
Configuration ConfigurationManagement::readConfiguration()
@ -32,62 +25,70 @@ Configuration ConfigurationManagement::readConfiguration()
return Configuration();
}
DynamicJsonDocument data(2048);
deserializeJson(data, file);
DeserializationError error = deserializeJson(data, file);
if(error)
{
Serial.println("Failed to read file, using default configuration.");
}
//serializeJson(data, Serial);
//Serial.println();
file.close();
Configuration conf;
conf.callsign = data["callsign"].as<String>();
conf.wifi.active = data["wifi"]["active"];
JsonArray aps = data["wifi"]["AP"].as<JsonArray>();
if(data.containsKey("callsign"))
conf.callsign = data["callsign"].as<String>();
conf.wifi.active = data["wifi"]["active"] | false;
JsonArray aps = data["wifi"]["AP"].as<JsonArray>();
for(JsonVariant v : aps)
{
Configuration::Wifi::AP ap;
ap.SSID = v["SSID"].as<String>();
ap.password = v["password"].as<String>();
ap.SSID = v["SSID"].as<String>();
ap.password = v["password"].as<String>();
conf.wifi.APs.push_back(ap);
}
conf.beacon.message = data["beacon"]["message"].as<String>();
conf.beacon.positionLatitude = data["beacon"]["position"]["latitude"];
conf.beacon.positionLongitude = data["beacon"]["position"]["longitude"];
conf.aprs_is.active = data["aprs_is"]["active"];
conf.aprs_is.password = data["aprs_is"]["password"].as<String>();
conf.aprs_is.server = data["aprs_is"]["server"].as<String>();
conf.aprs_is.port = data["aprs_is"]["port"];
conf.aprs_is.beacon = data["aprs_is"]["beacon"];
conf.aprs_is.beaconTimeout = data["aprs_is"]["beacon_timeout"];
conf.digi.active = data["digi"]["active"];
conf.digi.forwardTimeout = data["digi"]["forward_timeout"];
conf.digi.beacon = data["digi"]["beacon"];
conf.digi.beaconTimeout = data["digi"]["beacon_timeout"];
if(data.containsKey("beacon") && data.containsKey("message"))
conf.beacon.message = data["beacon"]["message"].as<String>();
conf.beacon.positionLatitude = data["beacon"]["position"]["latitude"] | 0.0;
conf.beacon.positionLongitude = data["beacon"]["position"]["longitude"] | 0.0;
conf.aprs_is.active = data["aprs_is"]["active"] | false;
if(data.containsKey("aprs_is") && data.containsKey("password"))
conf.aprs_is.password = data["aprs_is"]["password"].as<String>();
if(data.containsKey("aprs_is") && data.containsKey("server"))
conf.aprs_is.server = data["aprs_is"]["server"].as<String>();
conf.aprs_is.port = data["aprs_is"]["port"] | 14580;
conf.aprs_is.beacon = data["aprs_is"]["beacon"] | true;
conf.aprs_is.beaconTimeout = data["aprs_is"]["beacon_timeout"] | 15;
conf.digi.active = data["digi"]["active"] | false;
conf.digi.forwardTimeout = data["digi"]["forward_timeout"] | 5;
conf.digi.beacon = data["digi"]["beacon"] | true;
conf.digi.beaconTimeout = data["digi"]["beacon_timeout"] | 30;
if(data["version"] >= 2)
conf.lora.frequencyRx = data["lora"]["frequency_rx"] | 433775000;
conf.lora.frequencyTx = data["lora"]["frequency_tx"] | 433775000;
conf.lora.power = data["lora"]["power"] | 20;
conf.lora.spreadingFactor = data["lora"]["spreading_factor"] | 12;
conf.lora.signalBandwidth = data["lora"]["signal_bandwidth"] | 125000;
conf.lora.codingRate4 = data["lora"]["coding_rate4"] | 5;
conf.display.alwaysOn = data["display"]["always_on"] | true;
conf.display.timeout = data["display"]["timeout"] | 10;
conf.display.overwritePin = data["display"]["overwrite_pin"] | 0;
conf.ftp.active = data["ftp"]["active"] | false;
JsonArray users = data["ftp"]["user"].as<JsonArray>();
for(JsonVariant u : users)
{
conf.lora.frequencyRx = data["lora"]["frequency_rx"];
conf.lora.frequencyTx = data["lora"]["frequency_tx"];
conf.lora.power = data["lora"]["power"];
conf.display.alwaysOn = data["display"]["always_on"];
conf.display.timeout = data["display"]["timeout"];
conf.display.overwritePin = data["display"]["overwrite_pin"];
Configuration::Ftp::User us;
us.name = u["name"].as<String>();
us.password = u["password"].as<String>();
conf.ftp.users.push_back(us);
}
if(data["version"] >= 3)
if(conf.ftp.users.empty())
{
conf.lora.spreadingFactor = data["lora"]["spreading_factor"];
conf.lora.signalBandwidth = data["lora"]["signal_bandwidth"];
conf.lora.codingRate4 = data["lora"]["coding_rate4"];
}
if(data["version"] >= 4)
{
conf.ftp.active = data["ftp"]["active"];
JsonArray users = data["ftp"]["user"].as<JsonArray>();
for(JsonVariant u : users)
{
Configuration::Ftp::User us;
us.name = u["name"].as<String>();
us.password = u["password"].as<String>();
conf.ftp.users.push_back(us);
}
Configuration::Ftp::User us;
us.name = "ftp";
us.password = "ftp";
conf.ftp.users.push_back(us);
}
// update config in memory to get the new fields:
@ -106,45 +107,44 @@ void ConfigurationManagement::writeConfiguration(Configuration conf)
}
DynamicJsonDocument data(2048);
data["version"] = conf.version;
data["callsign"] = conf.callsign;
data["wifi"]["active"] = conf.wifi.active;
data["callsign"] = conf.callsign;
data["wifi"]["active"] = conf.wifi.active;
JsonArray aps = data["wifi"].createNestedArray("AP");
for(Configuration::Wifi::AP ap : conf.wifi.APs)
{
JsonObject v = aps.createNestedObject();
v["SSID"] = ap.SSID;
v["password"] = ap.password;
v["SSID"] = ap.SSID;
v["password"] = ap.password;
}
data["beacon"]["message"] = conf.beacon.message;
data["beacon"]["position"]["latitude"] = conf.beacon.positionLatitude;
data["beacon"]["position"]["longitude"] = conf.beacon.positionLongitude;
data["aprs_is"]["active"] = conf.aprs_is.active;
data["aprs_is"]["password"] = conf.aprs_is.password;
data["aprs_is"]["server"] = conf.aprs_is.server;
data["aprs_is"]["port"] = conf.aprs_is.port;
data["aprs_is"]["beacon"] = conf.aprs_is.beacon;
data["aprs_is"]["beacon_timeout"] = conf.aprs_is.beaconTimeout;
data["digi"]["active"] = conf.digi.active;
data["digi"]["forward_timeout"] = conf.digi.forwardTimeout;
data["digi"]["beacon"] = conf.digi.beacon;
data["digi"]["beacon_timeout"] = conf.digi.beaconTimeout;
data["lora"]["frequency_rx"] = conf.lora.frequencyRx;
data["lora"]["frequency_tx"] = conf.lora.frequencyTx;
data["lora"]["power"] = conf.lora.power;
data["lora"]["spreading_factor"] = conf.lora.spreadingFactor;
data["lora"]["signal_bandwidth"] = conf.lora.signalBandwidth;
data["lora"]["coding_rate4"] = conf.lora.codingRate4;
data["display"]["always_on"] = conf.display.alwaysOn;
data["display"]["timeout"] = conf.display.timeout;
data["display"]["overwrite_pin"] = conf.display.overwritePin;
data["ftp"]["active"] = conf.ftp.active;
data["beacon"]["message"] = conf.beacon.message;
data["beacon"]["position"]["latitude"] = conf.beacon.positionLatitude;
data["beacon"]["position"]["longitude"] = conf.beacon.positionLongitude;
data["aprs_is"]["active"] = conf.aprs_is.active;
data["aprs_is"]["password"] = conf.aprs_is.password;
data["aprs_is"]["server"] = conf.aprs_is.server;
data["aprs_is"]["port"] = conf.aprs_is.port;
data["aprs_is"]["beacon"] = conf.aprs_is.beacon;
data["aprs_is"]["beacon_timeout"] = conf.aprs_is.beaconTimeout;
data["digi"]["active"] = conf.digi.active;
data["digi"]["forward_timeout"] = conf.digi.forwardTimeout;
data["digi"]["beacon"] = conf.digi.beacon;
data["digi"]["beacon_timeout"] = conf.digi.beaconTimeout;
data["lora"]["frequency_rx"] = conf.lora.frequencyRx;
data["lora"]["frequency_tx"] = conf.lora.frequencyTx;
data["lora"]["power"] = conf.lora.power;
data["lora"]["spreading_factor"] = conf.lora.spreadingFactor;
data["lora"]["signal_bandwidth"] = conf.lora.signalBandwidth;
data["lora"]["coding_rate4"] = conf.lora.codingRate4;
data["display"]["always_on"] = conf.display.alwaysOn;
data["display"]["timeout"] = conf.display.timeout;
data["display"]["overwrite_pin"] = conf.display.overwritePin;
data["ftp"]["active"] = conf.ftp.active;
JsonArray users = data["ftp"].createNestedArray("user");
for(Configuration::Ftp::User u : conf.ftp.users)
{
JsonObject v = users.createNestedObject();
v["name"] = u.name;
v["password"] = u.password;
v["name"] = u.name;
v["password"] = u.password;
}
serializeJson(data, file);

View file

@ -98,9 +98,8 @@ public:
std::list<User> users;
};
Configuration() : version(4), callsign("NOCALL-10") {};
Configuration() : callsign("NOCALL-10") {};
int version;
String callsign;
Wifi wifi;
Beacon beacon;