Skip to content

Commit

Permalink
new /limit endpoint
Browse files Browse the repository at this point in the history
  • Loading branch information
KipK committed Jan 30, 2023
1 parent 2033db8 commit 6700e9d
Show file tree
Hide file tree
Showing 3 changed files with 91 additions and 12 deletions.
9 changes: 0 additions & 9 deletions src/evse_man.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
#include "divert.h"
#include "current_shaper.h"
#include "manual.h"
#include "limit.h"

static EvseProperties nullProperties;

Expand Down Expand Up @@ -338,14 +337,6 @@ bool EvseManager::setTargetState(EvseProperties &target)
changeMade = true;
}

if(target.getTimeLimit() != UINT32_MAX && target.getTimeLimit() != limit.getTimeLimit()) {
limit.setTimeLimit(target.getTimeLimit());
}

if(target.getEnergyLimit() != UINT32_MAX && target.getEnergyLimit() != limit.getEnergyLimit()) {
limit.setEnergyLimit(target.getEnergyLimit());
}

return changeMade;
}

Expand Down
13 changes: 10 additions & 3 deletions src/limit.h
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,7 @@ class LimitType {

LimitType() = default;
constexpr LimitType(Value value) : _value(value) { }
bool fromString(const char *value)

uint8_t fromString(const char *value)
{
// Cheat a bit and just check the first char
switch (value[0]) {
Expand All @@ -49,6 +48,7 @@ class LimitType {
_value = LimitType::Range;
break;
}
return _value;
}

const char *toString()
Expand Down Expand Up @@ -88,9 +88,11 @@ class LimitProperties : virtual public JsonSerialize<512> {

bool setType(LimitType type) {
_type = type;
return true;
};
bool setValue(uint32_t value) {
_value = value;
return true;
};
LimitType getType() {
return _type;
Expand Down Expand Up @@ -131,9 +133,14 @@ class Limit: public MicroTasks::Task
bool hasLimit() {
return _limit_properties.getType() != LimitType::None;
}
void setLimit(LimitProperties props) {
bool set(LimitProperties props) {
_limit_properties = props;
return true;
};
bool clear() {
_limit_properties.init();
return true;
}
LimitProperties getLimitProperties() {
return _limit_properties;
};
Expand Down
81 changes: 81 additions & 0 deletions src/web_server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ typedef const __FlashStringHelper *fstr_t;
#include "rfid.h"
#include "current_shaper.h"
#include "evse_man.h"
#include "limit.h"

MongooseHttpServer server; // Create class for Web server

Expand Down Expand Up @@ -887,6 +888,84 @@ handleSchedulePlan(MongooseHttpServerRequest *request)
request->send(response);
}

//----------------------------------------------------------
//
// Limit
//
//----------------------------------------------------------

void handleLimitGet(MongooseHttpServerRequest *request, MongooseHttpServerResponseStream *response)
{
if(limit.hasLimit())
{
LimitProperties props = limit.getLimitProperties();
props.serialize(response);
} else {
response->setCode(404);
response->print("{\"msg\":\"No limit\"}");
}
}

void handleLimitPost(MongooseHttpServerRequest *request, MongooseHttpServerResponseStream *response)
{
String body = request->body().toString();
LimitProperties props;
if (props.deserialize(body)) {
if (limit.set(props)) {
response->setCode(201);
response->print("{\"msg\":\"Created\"}");
// todo: mqtt_publish_limit(); // update limit props to mqtt
} else {
// unused for now
response->setCode(500);
response->print("{\"msg\":\"Failed to set limit\"}");
}
} else {
response->setCode(500);
response->print("{\"msg\":\"Failed to parse JSON\"}");
}
}

void handleLimitDelete(MongooseHttpServerRequest *request, MongooseHttpServerResponseStream *response)
{
if(limit.hasLimit()) {
if (limit.clear()) {
response->setCode(200);
response->print("{\"msg\":\"Deleted\"}");
mqtt_publish_override(); // update override state to mqtt
} else {
response->setCode(500);
response->print("{\"msg\":\"Failed to clear Limit\"}");
}
} else {
response->setCode(404);
response->print("{\"msg\":\"No limit to clear\"}");
}
}

void handleLimit(MongooseHttpServerRequest *request)
{
MongooseHttpServerResponseStream *response;
if(false == requestPreProcess(request, response)) {
return;
}

if(HTTP_GET == request->method()) {
handleLimitGet(request, response);
} else if(HTTP_POST == request->method()) {
handleLimitPost(request, response);
} else if(HTTP_DELETE == request->method()) {
handleLimitDelete(request, response);
} else {
response->setCode(405);
response->print("{\"msg\":\"Method not allowed\"}");
}

request->send(response);
}

//----------------------------------------------------------

void handleOverrideGet(MongooseHttpServerRequest *request, MongooseHttpServerResponseStream *response)
{
if(manual.isActive())
Expand Down Expand Up @@ -1259,6 +1338,8 @@ web_server_setup() {

server.on("/logs", handleEventLogs);

server.on("/limit", handleLimit);

// Simple Firmware Update Form
server.on("/update$")->
onRequest(handleUpdateRequest)->
Expand Down

0 comments on commit 6700e9d

Please sign in to comment.