@@ -86,6 +86,7 @@ String time_zone;
8686
8787// 24-bits of Flags
8888uint32_t flags;
89+ uint32_t flags_changed;
8990
9091// Ohm Connect Settings
9192String ohm;
@@ -130,11 +131,13 @@ String esp_hostname_default = "openevse-"+ESPAL.getShortId();
130131
131132void 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
139142ConfigOpt *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
257262ConfigJson user_config (opts, sizeof (opts) / sizeof(opts[0 ]), EEPROM_SIZE, CONFIG_OFFSET);
258263ConfigJson 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
269274increment_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
315344void 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 ) {
0 commit comments