Skip to content

Commit 13f7183

Browse files
Merge pull request #485 from KipK/auto-release
improvment & fixes of MQTT /override topic
2 parents 67a924a + 71663dd commit 13f7183

File tree

5 files changed

+25
-16
lines changed

5 files changed

+25
-16
lines changed

src/evse_man.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
#include "event_log.h"
1111
#include "divert.h"
1212
#include "current_shaper.h"
13+
#include "manual.h"
1314

1415
static EvseProperties nullProperties;
1516

@@ -79,6 +80,7 @@ bool EvseProperties::deserialize(JsonObject &obj)
7980

8081
if(obj.containsKey("auto_release")) {
8182
_auto_release = obj["auto_release"];
83+
_has_auto_release = true;
8284
}
8385

8486
return true;
@@ -266,15 +268,7 @@ bool EvseManager::evaluateClaims(EvseProperties &properties)
266268
DynamicJsonDocument event(capacity);
267269
event["manual_override"] = 1;
268270
event_send(event);
269-
// update /override topic to mqtt
270271
event.clear();
271-
EvseState state = properties.getState();
272-
if(state != EvseState::None) {
273-
properties.serialize(event);
274-
}
275-
else {
276-
event["state"] = "null";
277-
}
278272
mqtt_publish_json(event, "/override");
279273
}
280274
}
@@ -445,6 +439,12 @@ unsigned long EvseManager::loop(MicroTasks::WakeReason reason)
445439
{
446440
_evaluateTargetState = false;
447441
setTargetState(_targetProperties);
442+
443+
if ( manual.isActive() ) {
444+
// update /override topic to mqtt
445+
mqtt_publish_override();
446+
}
447+
448448
}
449449
return MicroTask.Infinate;
450450
}

src/evse_man.h

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,7 @@ class EvseProperties : virtual public JsonSerialize<512>
7171
uint32_t _energy_limit;
7272
uint32_t _time_limit;
7373
bool _auto_release;
74+
bool _has_auto_release = false;
7475
public:
7576
EvseProperties();
7677
EvseProperties(EvseState state);
@@ -125,8 +126,14 @@ class EvseProperties : virtual public JsonSerialize<512>
125126
bool isAutoRelease() {
126127
return _auto_release;
127128
}
129+
130+
bool hasAutoRelease() {
131+
return _has_auto_release;
132+
}
133+
128134
void setAutoRelease(bool auto_release) {
129135
_auto_release = auto_release;
136+
_has_auto_release = true;
130137
}
131138

132139
EvseProperties & operator = (EvseProperties &rhs);
@@ -225,6 +232,10 @@ class EvseManager : public MicroTasks::Task
225232
return _properties.isAutoRelease();
226233
}
227234

235+
bool hasAutoRelease() {
236+
return _properties.hasAutoRelease();
237+
}
238+
228239
EvseProperties &getProperties() {
229240
return _properties;
230241
}

src/manual.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ bool ManualOverride::claim()
1717

1818
bool ManualOverride::claim(EvseProperties &props)
1919
{
20-
props.setAutoRelease(true);
20+
if (!props.hasAutoRelease()) props.setAutoRelease(true);
2121
return _evse->claim(EvseClient_OpenEVSE_Manual, EvseManager_Priority_Manual, props);
2222
}
2323

src/mqtt.cpp

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -404,22 +404,18 @@ mqtt_publish_claim() {
404404

405405
void
406406
mqtt_publish_override() {
407+
DBUGLN("MQTT publish_override()");
407408
if(!config_mqtt_enabled() || !mqttclient.connected()) {
408409
return;
409410
}
410411
const size_t capacity = JSON_OBJECT_SIZE(40) + 1024;
411412
DynamicJsonDocument override_data(capacity);
412413
EvseProperties props;
413414
//check if there an override claim
414-
if (evse.clientHasClaim(EvseClient_OpenEVSE_Manual)) {
415+
if (evse.clientHasClaim(EvseClient_OpenEVSE_Manual) || manual.isActive()) {
415416
props = evse.getClaimProperties(EvseClient_OpenEVSE_Manual);
416417
//check if there's state property in override
417-
if(props.getState() != 0) {
418-
props.serialize(override_data);
419-
}
420-
else {
421-
override_data["state"] = "null";
422-
}
418+
props.serialize(override_data);
423419
}
424420
else override_data["state"] = "null";
425421
mqtt_publish_json(override_data, "/override");

src/web_server.cpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -919,6 +919,7 @@ void handleOverrideDelete(MongooseHttpServerRequest *request, MongooseHttpServer
919919
if(manual.release()) {
920920
response->setCode(200);
921921
response->print("{\"msg\":\"Deleted\"}");
922+
mqtt_publish_override(); // update override state to mqtt
922923
} else {
923924
response->setCode(500);
924925
response->print("{\"msg\":\"Failed to release manual overide\"}");
@@ -931,6 +932,7 @@ void handleOverridePatch(MongooseHttpServerRequest *request, MongooseHttpServerR
931932
{
932933
response->setCode(200);
933934
response->print("{\"msg\":\"Updated\"}");
935+
mqtt_publish_override(); // update override state to mqtt
934936
} else {
935937
response->setCode(500);
936938
response->print("{\"msg\":\"Failed to toggle manual overide\"}");

0 commit comments

Comments
 (0)