Skip to content

Commit 0862537

Browse files
committed
Set the default mode to active
This adds a change to allow the default flags to be updated. Only the flags explicitly saved by the user are loaded. This may loose the current configured default state, but it is causing confusion for many users.
1 parent f4a3d31 commit 0862537

File tree

3 files changed

+87
-40
lines changed

3 files changed

+87
-40
lines changed

src/app_config.cpp

Lines changed: 59 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,7 @@ String time_zone;
8686

8787
// 24-bits of Flags
8888
uint32_t flags;
89+
uint32_t flags_changed;
8990

9091
// Ohm Connect Settings
9192
String ohm;
@@ -130,11 +131,13 @@ String esp_hostname_default = "openevse-"+ESPAL.getShortId();
130131

131132
void config_changed(String name);
132133

133-
ConfigOptDefenition<uint32_t> flagsOpt = ConfigOptDefenition<uint32_t>(flags,
134-
CONFIG_SERVICE_SNTP |
135-
CONFIG_OCPP_AUTO_AUTH |
136-
CONFIG_OCPP_OFFLINE_AUTH,
137-
"flags", "f");
134+
#define CONFIG_DEFAULT_FLAGS (CONFIG_SERVICE_SNTP | \
135+
CONFIG_OCPP_AUTO_AUTH | \
136+
CONFIG_OCPP_OFFLINE_AUTH | \
137+
CONFIG_DEFAULT_STATE)
138+
139+
ConfigOptDefenition<uint32_t> flagsOpt = ConfigOptDefenition<uint32_t>(flags, CONFIG_DEFAULT_FLAGS, "flags", "f");
140+
ConfigOptDefenition<uint32_t> flagsChanged = ConfigOptDefenition<uint32_t>(flags_changed, 0, "flags_changed", "c");
138141

139142
ConfigOpt *opts[] =
140143
{
@@ -228,31 +231,33 @@ ConfigOpt *opts[] =
228231

229232
// Flags
230233
&flagsOpt,
234+
&flagsChanged,
231235

232236
// Virtual Options
233-
new ConfigOptVirtualBool(flagsOpt, CONFIG_SERVICE_EMONCMS, CONFIG_SERVICE_EMONCMS, "emoncms_enabled", "ee"),
234-
new ConfigOptVirtualBool(flagsOpt, CONFIG_SERVICE_MQTT, CONFIG_SERVICE_MQTT, "mqtt_enabled", "me"),
235-
new ConfigOptVirtualBool(flagsOpt, CONFIG_MQTT_ALLOW_ANY_CERT, 0, "mqtt_reject_unauthorized", "mru"),
236-
new ConfigOptVirtualBool(flagsOpt, CONFIG_MQTT_RETAINED, CONFIG_MQTT_RETAINED, "mqtt_retained", "mrt"),
237-
new ConfigOptVirtualBool(flagsOpt, CONFIG_SERVICE_OHM, CONFIG_SERVICE_OHM, "ohm_enabled", "oe"),
238-
new ConfigOptVirtualBool(flagsOpt, CONFIG_SERVICE_SNTP, CONFIG_SERVICE_SNTP, "sntp_enabled", "se"),
239-
new ConfigOptVirtualBool(flagsOpt, CONFIG_SERVICE_TESLA, CONFIG_SERVICE_TESLA, "tesla_enabled", "te"),
240-
new ConfigOptVirtualBool(flagsOpt, CONFIG_SERVICE_DIVERT, CONFIG_SERVICE_DIVERT, "divert_enabled", "de"),
241-
new ConfigOptVirtualBool(flagsOpt, CONFIG_SERVICE_CUR_SHAPER, CONFIG_SERVICE_CUR_SHAPER, "current_shaper_enabled", "cse"),
242-
new ConfigOptVirtualBool(flagsOpt, CONFIG_PAUSE_USES_DISABLED, CONFIG_PAUSE_USES_DISABLED, "pause_uses_disabled", "pd"),
243-
new ConfigOptVirtualBool(flagsOpt, CONFIG_VEHICLE_RANGE_MILES, CONFIG_VEHICLE_RANGE_MILES, "mqtt_vehicle_range_miles", "mvru"),
244-
new ConfigOptVirtualBool(flagsOpt, CONFIG_SERVICE_OCPP, CONFIG_SERVICE_OCPP, "ocpp_enabled", "ope"),
245-
new ConfigOptVirtualBool(flagsOpt, CONFIG_OCPP_AUTO_AUTH, CONFIG_OCPP_AUTO_AUTH, "ocpp_auth_auto", "oaa"),
246-
new ConfigOptVirtualBool(flagsOpt, CONFIG_OCPP_OFFLINE_AUTH, CONFIG_OCPP_OFFLINE_AUTH, "ocpp_auth_offline", "ooa"),
247-
new ConfigOptVirtualBool(flagsOpt, CONFIG_OCPP_ACCESS_SUSPEND, CONFIG_OCPP_ACCESS_SUSPEND, "ocpp_suspend_evse", "ops"),
248-
new ConfigOptVirtualBool(flagsOpt, CONFIG_OCPP_ACCESS_ENERGIZE, CONFIG_OCPP_ACCESS_ENERGIZE, "ocpp_energize_plug", "opn"),
249-
new ConfigOptVirtualBool(flagsOpt, CONFIG_RFID, CONFIG_RFID, "rfid_enabled", "rf"),
250-
new ConfigOptVirtualBool(flagsOpt, CONFIG_FACTORY_WRITE_LOCK, CONFIG_FACTORY_WRITE_LOCK, "factory_write_lock", "fwl"),
251-
new ConfigOptVirtualBool(flagsOpt, CONFIG_THREEPHASE, CONFIG_THREEPHASE, "is_threephase", "itp"),
252-
new ConfigOptVirtualBool(flagsOpt, CONFIG_WIZARD, CONFIG_WIZARD, "wizard_passed", "wzp"),
253-
new ConfigOptVirtualBool(flagsOpt, CONFIG_DEFAULT_STATE, CONFIG_DEFAULT_STATE, "default_state", "dfs"),
254-
new ConfigOptVirtualMqttProtocol(flagsOpt, "mqtt_protocol", "mprt"),
255-
new ConfigOptVirtualChargeMode(flagsOpt, "charge_mode", "chmd")};
237+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_SERVICE_EMONCMS, CONFIG_SERVICE_EMONCMS, "emoncms_enabled", "ee"),
238+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_SERVICE_MQTT, CONFIG_SERVICE_MQTT, "mqtt_enabled", "me"),
239+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_MQTT_ALLOW_ANY_CERT, 0, "mqtt_reject_unauthorized", "mru"),
240+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_MQTT_RETAINED, CONFIG_MQTT_RETAINED, "mqtt_retained", "mrt"),
241+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_SERVICE_OHM, CONFIG_SERVICE_OHM, "ohm_enabled", "oe"),
242+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_SERVICE_SNTP, CONFIG_SERVICE_SNTP, "sntp_enabled", "se"),
243+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_SERVICE_TESLA, CONFIG_SERVICE_TESLA, "tesla_enabled", "te"),
244+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_SERVICE_DIVERT, CONFIG_SERVICE_DIVERT, "divert_enabled", "de"),
245+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_SERVICE_CUR_SHAPER, CONFIG_SERVICE_CUR_SHAPER, "current_shaper_enabled", "cse"),
246+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_PAUSE_USES_DISABLED, CONFIG_PAUSE_USES_DISABLED, "pause_uses_disabled", "pd"),
247+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_VEHICLE_RANGE_MILES, CONFIG_VEHICLE_RANGE_MILES, "mqtt_vehicle_range_miles", "mvru"),
248+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_SERVICE_OCPP, CONFIG_SERVICE_OCPP, "ocpp_enabled", "ope"),
249+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_OCPP_AUTO_AUTH, CONFIG_OCPP_AUTO_AUTH, "ocpp_auth_auto", "oaa"),
250+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_OCPP_OFFLINE_AUTH, CONFIG_OCPP_OFFLINE_AUTH, "ocpp_auth_offline", "ooa"),
251+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_OCPP_ACCESS_SUSPEND, CONFIG_OCPP_ACCESS_SUSPEND, "ocpp_suspend_evse", "ops"),
252+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_OCPP_ACCESS_ENERGIZE, CONFIG_OCPP_ACCESS_ENERGIZE, "ocpp_energize_plug", "opn"),
253+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_RFID, CONFIG_RFID, "rfid_enabled", "rf"),
254+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_FACTORY_WRITE_LOCK, CONFIG_FACTORY_WRITE_LOCK, "factory_write_lock", "fwl"),
255+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_THREEPHASE, CONFIG_THREEPHASE, "is_threephase", "itp"),
256+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_WIZARD, CONFIG_WIZARD, "wizard_passed", "wzp"),
257+
new ConfigOptVirtualMaskedBool(flagsOpt, flagsChanged, CONFIG_DEFAULT_STATE, CONFIG_DEFAULT_STATE, "default_state", "dfs"),
258+
new ConfigOptVirtualMqttProtocol(flagsOpt, flagsChanged, "mqtt_protocol", "mprt"),
259+
new ConfigOptVirtualChargeMode(flagsOpt, flagsChanged, "charge_mode", "chmd")
260+
};
256261

257262
ConfigJson user_config(opts, sizeof(opts) / sizeof(opts[0]), EEPROM_SIZE, CONFIG_OFFSET);
258263
ConfigJson factory_config(opts, sizeof(opts) / sizeof(opts[0]), EEPROM_SIZE, FACTORY_OFFSET);
@@ -265,7 +270,7 @@ config_version() {
265270
return config_ver;
266271
}
267272

268-
void
273+
void
269274
increment_config() {
270275
config_ver++;
271276
DBUGVAR(config_ver);
@@ -310,6 +315,30 @@ config_load_settings()
310315
DBUGF("No JSON config found, using defaults");
311316
#endif
312317
}
318+
319+
// Handle setting the newly added flag changed bits
320+
if(0 == flags_changed)
321+
{
322+
// Assume all flags that do not match the default value have changed
323+
uint32_t new_changed = (flags ^ CONFIG_DEFAULT_FLAGS) & ~CONFIG_DEFAULT_STATE;
324+
325+
// Handle the default charge state differently as that was set as a default to 0 previously, but is now 1
326+
// We will assume that if set to 1 it was intentional, but if 0 we will assume it was the just the default
327+
// and not an intentinal change
328+
if(flags != CONFIG_DEFAULT_FLAGS &&
329+
CONFIG_DEFAULT_STATE == (flags & CONFIG_DEFAULT_STATE))
330+
{
331+
new_changed |= CONFIG_DEFAULT_STATE;
332+
}
333+
334+
// Save any changes
335+
if(flagsChanged.set(new_changed)) {
336+
user_config.commit();
337+
}
338+
}
339+
340+
// now lets apply any default flags that have not explicitly been set by the user
341+
flags |= CONFIG_DEFAULT_FLAGS & ~flags_changed;
313342
}
314343

315344
void config_changed(String name)
@@ -527,7 +556,7 @@ bool config_serialize(DynamicJsonDocument &doc, bool longNames, bool compactOutp
527556
doc["wifi_serial"] = serial;
528557
doc["protocol"] = "-";
529558
doc["espinfo"] = ESPAL.getChipInfo();
530-
doc["espflash"] = ESPAL.getFlashChipSize();
559+
doc["espflash"] = ESPAL.getFlashChipSize();
531560

532561
// EVSE information are only evailable when config_version is incremented
533562
if(config_ver > 0) {

src/app_config_mode.h

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ class ConfigOptVirtualChargeMode : public ConfigOpt
1111
{
1212
protected:
1313
ConfigOptDefenition<uint32_t> &_base;
14+
ConfigOptDefenition<uint32_t> &_change;
1415

1516
public:
16-
ConfigOptVirtualChargeMode(ConfigOptDefenition<uint32_t> &b, const char *l, const char *s) :
17-
ConfigOpt(l, s),
18-
_base(b)
17+
ConfigOptVirtualChargeMode(ConfigOptDefenition<uint32_t> &base, ConfigOptDefenition<uint32_t> &change, const char *long_name, const char *short_name) :
18+
ConfigOpt(long_name, short_name),
19+
_base(base),
20+
_change(change)
1921
{
2022
}
2123

@@ -30,15 +32,22 @@ class ConfigOptVirtualChargeMode : public ConfigOpt
3032
if(value == "eco") {
3133
newVal |= 1 << 10;
3234
}
33-
return _base.set(newVal);
35+
36+
if(_base.set(newVal)) {
37+
uint32_t new_change = _change.get() | CONFIG_CHARGE_MODE;
38+
_change.set(new_change);
39+
return true;
40+
}
41+
42+
return false;
3443
}
3544

3645
virtual bool serialize(DynamicJsonDocument &doc, bool longNames, bool compactOutput, bool hideSecrets) {
3746
if(!compactOutput) {
3847
doc[name(longNames)] = get();
3948
return true;
4049
}
41-
50+
4251
return false;
4352
}
4453

src/app_config_mqtt.h

Lines changed: 14 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -11,11 +11,13 @@ class ConfigOptVirtualMqttProtocol : public ConfigOpt
1111
{
1212
protected:
1313
ConfigOptDefenition<uint32_t> &_base;
14+
ConfigOptDefenition<uint32_t> &_change;
1415

1516
public:
16-
ConfigOptVirtualMqttProtocol(ConfigOptDefenition<uint32_t> &b, const char *l, const char *s) :
17-
ConfigOpt(l, s),
18-
_base(b)
17+
ConfigOptVirtualMqttProtocol(ConfigOptDefenition<uint32_t> &base, ConfigOptDefenition<uint32_t> &change, const char *long_name, const char *short_name) :
18+
ConfigOpt(long_name, short_name),
19+
_base(base),
20+
_change(change)
1921
{
2022
}
2123

@@ -29,15 +31,22 @@ class ConfigOptVirtualMqttProtocol : public ConfigOpt
2931
if(value == "mqtts") {
3032
newVal |= 1 << 4;
3133
}
32-
return _base.set(newVal);
34+
35+
if(_base.set(newVal)) {
36+
uint32_t new_change = _change.get() | CONFIG_MQTT_PROTOCOL;
37+
_change.set(new_change);
38+
return true;
39+
}
40+
41+
return false;
3342
}
3443

3544
virtual bool serialize(DynamicJsonDocument &doc, bool longNames, bool compactOutput, bool hideSecrets) {
3645
if(!compactOutput) {
3746
doc[name(longNames)] = get();
3847
return true;
3948
}
40-
49+
4150
return false;
4251
}
4352

0 commit comments

Comments
 (0)