try to add config.system.outputs to json, but esp8266 actually crashes at loading json
This commit is contained in:
parent
94e79b8fa2
commit
4c9c280d45
4 changed files with 69 additions and 20 deletions
|
@ -74,7 +74,7 @@ struct Pin_Index {
|
|||
const byte note;
|
||||
};
|
||||
|
||||
|
||||
const byte Max_Outputs = 16;
|
||||
|
||||
/*
|
||||
*
|
||||
|
@ -104,15 +104,28 @@ struct Config_WiFi {
|
|||
* Config System Outputs
|
||||
*
|
||||
* - type: output type like GPIO, I2C, URL
|
||||
* - gpio: which gpio
|
||||
* 1 - GPIO
|
||||
* 2 - I2C
|
||||
* 3 - URL
|
||||
* - gpio: which gpio is used
|
||||
* - gpio_invert: invert gpio output
|
||||
* - gpio_pwm: enable pwm for output
|
||||
* - i2c:
|
||||
* - ip: ip to smart plug (tasmota e.g.)
|
||||
* - ip_path: uri path
|
||||
* - enabled: enable output
|
||||
*
|
||||
*/
|
||||
struct Config_System_Outputs {
|
||||
byte type;
|
||||
char name[32];
|
||||
byte gpio;
|
||||
char url[64];
|
||||
bool httpLogSerial;
|
||||
unsigned short schedulerInterval = 1000;
|
||||
bool gpio_invert;
|
||||
bool gpio_pwm;
|
||||
char i2c[8];
|
||||
byte ip[4];
|
||||
char ip_path[32];
|
||||
bool enabled;
|
||||
};
|
||||
|
||||
/* main System struct */
|
||||
|
@ -124,7 +137,7 @@ struct Config_System {
|
|||
char httpPass[32];
|
||||
bool httpLogSerial;
|
||||
unsigned short schedulerInterval = 1000;
|
||||
Config_System_Outputs outputs;
|
||||
Config_System_Outputs outputs[Max_Outputs];
|
||||
};
|
||||
|
||||
|
||||
|
|
|
@ -30,8 +30,8 @@
|
|||
|
||||
#define PinWIPE 2
|
||||
#define PinWIPE_default LOW
|
||||
#define Pin_I2C_SCL = 22;
|
||||
#define Pin_I2C_SDA = 21;
|
||||
#define Pin_I2C_SCL = 22
|
||||
#define Pin_I2C_SDA = 21
|
||||
|
||||
/* https://randomnerdtutorials.com/esp32-pinout-reference-gpios/
|
||||
*
|
||||
|
|
|
@ -31,8 +31,8 @@
|
|||
// GPIO 2 Boot fails if pulled to LOW
|
||||
#define PinWIPE 2
|
||||
#define PinWIPE_default HIGH
|
||||
#define Pin_I2C_SCL = 5;
|
||||
#define Pin_I2C_SDA = 4;
|
||||
#define Pin_I2C_SCL = 5
|
||||
#define Pin_I2C_SDA = 4
|
||||
|
||||
/* https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/
|
||||
*
|
||||
|
|
|
@ -179,15 +179,15 @@ bool LoadConfig() {
|
|||
// Copy strings from the JsonDocument to the Config struct as char
|
||||
strlcpy(config.test, doc["test"], sizeof(config.test));
|
||||
|
||||
// * WiFi *
|
||||
/* WiFi */
|
||||
JsonObject objWifi = doc["wifi"][0];
|
||||
strlcpy(config.wifi.ssid, objWifi["ssid"], sizeof(config.wifi.ssid));
|
||||
strlcpy(config.wifi.password, objWifi["password"], sizeof(config.wifi.password));
|
||||
// Copy bool / int directly into struct
|
||||
config.wifi.dhcp = objWifi["dhcp"];
|
||||
// load the ip addresses as array
|
||||
int i;
|
||||
for(i=0; i <4 ; i++) {
|
||||
|
||||
for(byte i=0; i < 4 ; i++) {
|
||||
config.wifi.ip[i] = objWifi["ip"][i];
|
||||
config.wifi.netmask[i] = objWifi["netmask"][i];
|
||||
config.wifi.gateway[i] = objWifi["gateway"][i];
|
||||
|
@ -195,7 +195,7 @@ bool LoadConfig() {
|
|||
}
|
||||
|
||||
|
||||
// * System *
|
||||
/* System */
|
||||
JsonObject objSystem = doc["system"][0];
|
||||
config.system.ntpOffset = objSystem["ntpOffset"];
|
||||
config.system.maintenanceDuration = objSystem["maintenanceDuration"];
|
||||
|
@ -205,7 +205,22 @@ bool LoadConfig() {
|
|||
config.system.httpLogSerial = objSystem["httpLogSerial"];
|
||||
config.system.schedulerInterval = objSystem["schedulerInterval"];
|
||||
|
||||
// * Grow *
|
||||
/* System Outputs */
|
||||
for(byte i=0; i < Max_Outputs; i++) {
|
||||
JsonObject objSystemOutputs = doc["system"]["outputs"][i];
|
||||
config.system.outputs[i].type = objSystemOutputs["type"];
|
||||
strlcpy(config.system.outputs[i].name, objSystemOutputs["name"], sizeof(config.system.outputs[i].name));
|
||||
config.system.outputs[i].gpio = objSystemOutputs["gpio"];
|
||||
config.system.outputs[i].gpio_invert = objSystemOutputs["gpio_invert"];
|
||||
config.system.outputs[i].gpio_pwm = objSystemOutputs["gpio_pwm"];
|
||||
strlcpy(config.system.outputs[i].name, objSystemOutputs["name"], sizeof(config.system.outputs[i].i2c));
|
||||
for(byte j=0; j < 4 ; j++) {
|
||||
config.system.outputs[i].ip[j] = objSystemOutputs["ip"][j];
|
||||
}
|
||||
config.system.outputs[i].enabled = objSystemOutputs["enabled"];
|
||||
}
|
||||
|
||||
/* Grow */
|
||||
JsonObject objGrow = doc["grow"][0];
|
||||
strlcpy(config.grow.growName, objGrow["growName"], sizeof(config.grow.growName));
|
||||
config.grow.dayOfGrow = objGrow["dayOfGrow"];
|
||||
|
@ -224,6 +239,10 @@ bool LoadConfig() {
|
|||
// Close the file (Curiously, File's destructor doesn't close the file)
|
||||
file.close();
|
||||
Serial.println(":: [LittleFS:LoadConfig] config successfully loaded");
|
||||
Serial.println(":: [LittleFS:LoadConfig] --- runtime config ---");
|
||||
serializeJsonPretty(doc, Serial);
|
||||
Serial.println("");
|
||||
Serial.println(":: [LittleFS:LoadConfig] ----------------------");
|
||||
return true;
|
||||
}
|
||||
|
||||
|
@ -233,10 +252,10 @@ bool SaveConfig(bool writeToSerial = false) {
|
|||
*/
|
||||
JsonDocument doc;
|
||||
|
||||
// * Root *
|
||||
/* Root */
|
||||
doc["test"] = config.test;
|
||||
|
||||
// * WiFi *
|
||||
/* WiFi */
|
||||
JsonObject objWifi = doc["wifi"].add<JsonObject>();
|
||||
objWifi["ssid"] = config.wifi.ssid;
|
||||
objWifi["password"] = config.wifi.password;
|
||||
|
@ -250,7 +269,7 @@ bool SaveConfig(bool writeToSerial = false) {
|
|||
}
|
||||
objWifi["dhcp"] = config.wifi.dhcp;
|
||||
|
||||
// * System *
|
||||
/* System */
|
||||
JsonObject objSystem = doc["system"].add<JsonObject>();
|
||||
objSystem["ntpOffset"] = config.system.ntpOffset;
|
||||
objSystem["maintenanceDuration"] = config.system.maintenanceDuration;
|
||||
|
@ -260,7 +279,24 @@ bool SaveConfig(bool writeToSerial = false) {
|
|||
objSystem["httpLogSerial"] = config.system.httpLogSerial;
|
||||
objSystem["schedulerInterval"] = config.system.schedulerInterval;
|
||||
|
||||
// * Grow *
|
||||
/* System Outputs */
|
||||
JsonObject objSystemOutputs = doc["system"]["outputs"].add<JsonObject>();
|
||||
for(byte i=0; i < Max_Outputs; i++) {
|
||||
objSystemOutputs["type"] = config.system.outputs[i].type;
|
||||
objSystemOutputs["name"] = config.system.outputs[i].name;
|
||||
objSystemOutputs["gpio"] = config.system.outputs[i].gpio;
|
||||
objSystemOutputs["gpio_invert"] = config.system.outputs[i].gpio_invert;
|
||||
objSystemOutputs["gpio_pwm"] = config.system.outputs[i].gpio_pwm;
|
||||
objSystemOutputs["i2c"] = config.system.outputs[i].i2c;
|
||||
for(byte j=0; j < 4 ; j++) {
|
||||
objSystemOutputs["ip"][j] = config.system.outputs[i].ip[j];
|
||||
}
|
||||
objSystemOutputs["ip_path"] = config.system.outputs[i].ip_path;
|
||||
objSystemOutputs["enabled"] = config.system.outputs[i].enabled;
|
||||
}
|
||||
|
||||
|
||||
/* Grow */
|
||||
JsonObject objGrow = doc["grow"].add<JsonObject>();
|
||||
objGrow["growName"] = config.grow.growName;
|
||||
objGrow["dayOfGrow"] = config.grow.dayOfGrow;
|
||||
|
@ -306,7 +342,7 @@ bool SaveConfig(bool writeToSerial = false) {
|
|||
Serial.printf(":: [LittleFS:SaveConfig] --- %s ---\n", CANGROW_CFG);
|
||||
serializeJson(doc, Serial);
|
||||
Serial.println("");
|
||||
Serial.printf(":: [LittleFS:SaveConfig] --- %s ---\n", CANGROW_CFG);
|
||||
Serial.printf(":: [LittleFS:SaveConfig] ----------------------\n", CANGROW_CFG);
|
||||
}
|
||||
|
||||
return true;
|
||||
|
|
Loading…
Reference in a new issue