Skip to content

Commit f4f432c

Browse files
committed
Allow setting of the default state and fixes to the default limit logic
1 parent eb9beba commit f4f432c

File tree

4 files changed

+53
-22
lines changed

4 files changed

+53
-22
lines changed

src/app_config.cpp

Lines changed: 12 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -133,10 +133,14 @@ String esp_hostname_default = "openevse-"+ESPAL.getShortId();
133133

134134
void config_changed(String name);
135135

136+
#ifndef CONFIG_DEFAULT_STATE_DEFAULT
137+
#define CONFIG_DEFAULT_STATE_DEFAULT CONFIG_DEFAULT_STATE
138+
#endif
139+
136140
#define CONFIG_DEFAULT_FLAGS (CONFIG_SERVICE_SNTP | \
137141
CONFIG_OCPP_AUTO_AUTH | \
138142
CONFIG_OCPP_OFFLINE_AUTH | \
139-
CONFIG_DEFAULT_STATE)
143+
CONFIG_DEFAULT_STATE_DEFAULT)
140144

141145
ConfigOptDefinition<uint32_t> flagsOpt = ConfigOptDefinition<uint32_t>(flags, CONFIG_DEFAULT_FLAGS, "flags", "f");
142146
ConfigOptDefinition<uint32_t> flagsChanged = ConfigOptDefinition<uint32_t>(flags_changed, 0, "flags_changed", "c");
@@ -165,8 +169,8 @@ ConfigOpt *opts[] =
165169
new ConfigOptDefinition<String>(time_zone, DEFAULT_TIME_ZONE, "time_zone", "tz"),
166170

167171
// Limit
168-
new ConfigOptDefinition<String>(limit_default_type, {}, "limit_default_type", "ldt"),
169-
new ConfigOptDefinition<uint32_t>(limit_default_value, {}, "limit_default_value", "ldv"),
172+
new ConfigOptDefinition<String>(limit_default_type, LIMIT_DEFAULT_TYPE_DEFAULT, "limit_default_type", "ldt"),
173+
new ConfigOptDefinition<uint32_t>(limit_default_value, LIMIT_DEFAULT_VALUE_DEFAULT, "limit_default_value", "ldv"),
170174

171175
// EMONCMS SERVER strings
172176
new ConfigOptDefinition<String>(emoncms_server, "https://data.openevse.com/emoncms", "emoncms_server", "es"),
@@ -324,16 +328,19 @@ config_load_settings()
324328
if(0 == flags_changed)
325329
{
326330
// Assume all flags that do not match the default value have changed
327-
uint32_t new_changed = (flags ^ CONFIG_DEFAULT_FLAGS) & ~CONFIG_DEFAULT_STATE;
331+
uint32_t new_changed = (flags ^ CONFIG_DEFAULT_FLAGS);
328332

333+
#if CONFIG_DEFAULT_STATE_DEFAULT != 0
329334
// Handle the default charge state differently as that was set as a default to 0 previously, but is now 1
330335
// We will assume that if set to 1 it was intentional, but if 0 we will assume it was the just the default
331336
// and not an intentinal change
337+
new_changed &= ~CONFIG_DEFAULT_STATE;
332338
if(flags != CONFIG_DEFAULT_FLAGS &&
333339
CONFIG_DEFAULT_STATE == (flags & CONFIG_DEFAULT_STATE))
334340
{
335341
new_changed |= CONFIG_DEFAULT_STATE;
336342
}
343+
#endif
337344

338345
// Save any changes
339346
if(flagsChanged.set(new_changed)) {
@@ -386,23 +393,7 @@ void config_changed(String name)
386393
ledManager.setBrightness(led_brightness);
387394
#endif
388395
} else if(name.startsWith("limit_default_")) {
389-
LimitProperties limitprops;
390-
LimitType limitType;
391-
DBUGVAR(limit_default_type);
392-
DBUGVAR((int)limit_default_value);
393-
limitType.fromString(limit_default_type.c_str());
394-
limitprops.setType(limitType);
395-
limitprops.setValue(limit_default_value);
396-
limitprops.setAutoRelease(false);
397-
if (limitType == LimitType::None) {
398-
limit.clear();
399-
DBUGLN("No limit to set");
400-
}
401-
else if (limitprops.getValue())
402-
limit.set(limitprops);
403-
DBUGLN("Limit set");
404-
DBUGVAR(limitprops.getType().toString());
405-
DBUGVAR(limitprops.getValue());
396+
limit.setDefaultLimit(limit_default_type.c_str(), limit_default_value);
406397
} else if(name == "sntp_enabled") {
407398
timeManager.setSntpEnabled(config_sntp_enabled());
408399
}

src/emonesp.h

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,14 @@
101101
#define DEFAULT_TIME_ZONE "Europe/London|GMT0BST,M3.5.0/1,M10.5.0"
102102
#endif
103103

104+
#ifndef LIMIT_DEFAULT_TYPE_DEFAULT
105+
#define LIMIT_DEFAULT_TYPE_DEFAULT ""
106+
#endif
107+
108+
#ifndef LIMIT_DEFAULT_VALUE_DEFAULT
109+
#define LIMIT_DEFAULT_VALUE_DEFAULT 0
110+
#endif
111+
104112
#ifndef VOLTAGE_DEFAULT
105113
#define VOLTAGE_DEFAULT 240
106114
#endif

src/limit.cpp

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ void Limit::begin(EvseManager &evse) {
159159
// todo get saved default limit
160160
DBUGLN("Starting Limit task");
161161
this->_evse = &evse;
162+
setDefaultLimit(limit_default_type.c_str(), limit_default_value);
162163
MicroTask.startTask(this);
163164
_evse->onSessionComplete(&_sessionCompleteListener);
164165
};
@@ -217,7 +218,9 @@ unsigned long Limit::loop(MicroTasks::WakeReason reason)
217218
_evse->claim(EvseClient_OpenEVSE_Limit, EvseManager_Priority_Limit, props);
218219
}
219220
}
220-
else if(EvseState::Disabled == config_default_state() && !_evse->clientHasClaim(EvseClient_OpenEVSE_Limit))
221+
else if(_limit_properties.getAutoRelease() &&
222+
EvseState::Disabled == config_default_state() &&
223+
!_evse->clientHasClaim(EvseClient_OpenEVSE_Limit))
221224
{
222225
// The default state is disabled, so we need to make a claim to enable charging
223226
DBUGLN("Claiming EVSE due to default state");
@@ -324,3 +327,31 @@ bool Limit::clear() {
324327
uint8_t Limit::getVersion() {
325328
return _version;
326329
}
330+
331+
bool Limit::setDefaultLimit(const char* typeStr, uint32_t value) {
332+
LimitProperties limitprops;
333+
LimitType limitType;
334+
335+
DBUGVAR(typeStr);
336+
DBUGVAR((int)value);
337+
338+
limitType.fromString(typeStr);
339+
limitprops.setType(limitType);
340+
limitprops.setValue(value);
341+
limitprops.setAutoRelease(false);
342+
343+
if (limitType == LimitType::None) {
344+
clear();
345+
DBUGLN("No limit to set");
346+
return true;
347+
}
348+
else if (limitprops.getValue()) {
349+
set(limitprops);
350+
DBUGLN("Limit set");
351+
DBUGVAR(limitprops.getType().toString());
352+
DBUGVAR(limitprops.getValue());
353+
return true;
354+
}
355+
356+
return false;
357+
}

src/limit.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,7 @@ class Limit: public MicroTasks::Task
8282
bool set(LimitProperties props);
8383
LimitProperties get();
8484
bool clear();
85+
bool setDefaultLimit(const char* typeStr, uint32_t value);
8586
uint8_t getVersion();
8687
};
8788

0 commit comments

Comments
 (0)