|
12 | 12 | #include "web_server.h" |
13 | 13 | #include "event.h" |
14 | 14 | #include "manual.h" |
| 15 | +#include "scheduler.h" |
15 | 16 |
|
16 | 17 |
|
17 | 18 | #include "openevse.h" |
@@ -159,6 +160,15 @@ void mqttmsg_callback(MongooseString topic, MongooseString payload) { |
159 | 160 | mqtt_set_claim(false, claim_props); |
160 | 161 | } |
161 | 162 | } |
| 163 | + |
| 164 | + //Schedule |
| 165 | + else if (topic_string == mqtt_topic + "/schedule/set") { |
| 166 | + mqtt_set_schedule(payload_str); |
| 167 | + } |
| 168 | + else if (topic_string == mqtt_topic + "/schedule/clear") { |
| 169 | + mqtt_clear_schedule(payload_str.toInt()); |
| 170 | + } |
| 171 | + |
162 | 172 | else |
163 | 173 | { |
164 | 174 | // If MQTT message is RAPI command |
@@ -254,6 +264,7 @@ mqtt_connect() |
254 | 264 | // Publish MQTT override/claim |
255 | 265 | mqtt_publish_override(); |
256 | 266 | mqtt_publish_claim(); |
| 267 | + mqtt_publish_schedule(); |
257 | 268 |
|
258 | 269 | // MQTT Topic to subscribe to receive RAPI commands via MQTT |
259 | 270 | String mqtt_sub_topic = mqtt_topic + "/rapi/in/#"; |
@@ -305,6 +316,11 @@ mqtt_connect() |
305 | 316 | mqtt_sub_topic = mqtt_topic + "/claim/set"; |
306 | 317 | mqttclient.subscribe(mqtt_sub_topic); |
307 | 318 |
|
| 319 | + mqtt_sub_topic = mqtt_topic + "/schedule/set"; |
| 320 | + mqttclient.subscribe(mqtt_sub_topic); |
| 321 | + mqtt_sub_topic = mqtt_topic + "/schedule/clear"; |
| 322 | + mqttclient.subscribe(mqtt_sub_topic); |
| 323 | + |
308 | 324 | connecting = false; |
309 | 325 | }); |
310 | 326 |
|
@@ -393,6 +409,35 @@ mqtt_publish_override() { |
393 | 409 | mqtt_publish_json(override_data, "/override"); |
394 | 410 | } |
395 | 411 |
|
| 412 | +void mqtt_set_schedule(String schedule) { |
| 413 | + Profile_Start(mqtt_set_schedule); |
| 414 | + scheduler.deserialize(schedule); |
| 415 | + mqtt_publish_schedule(); |
| 416 | + Profile_End(mqtt_set_schedule, 5); |
| 417 | +} |
| 418 | + |
| 419 | +void |
| 420 | +mqtt_clear_schedule(uint32_t event) { |
| 421 | + Profile_Start(mqtt_clear_schedule); |
| 422 | + scheduler.removeEvent(event); |
| 423 | + Profile_End(mqtt_clear_schedule, 5); |
| 424 | + mqtt_publish_schedule(); |
| 425 | +} |
| 426 | + |
| 427 | +void |
| 428 | +mqtt_publish_schedule() { |
| 429 | + if(!config_mqtt_enabled() || !mqttclient.connected()) { |
| 430 | + return; |
| 431 | + } |
| 432 | + const size_t capacity = JSON_OBJECT_SIZE(40) + 2048; |
| 433 | + DynamicJsonDocument schedule_data(capacity); |
| 434 | + EvseProperties props; |
| 435 | + bool success = scheduler.serialize(schedule_data); |
| 436 | + if (success) { |
| 437 | + mqtt_publish_json(schedule_data, "/schedule"); |
| 438 | + } |
| 439 | +} |
| 440 | + |
396 | 441 | void |
397 | 442 | mqtt_publish_json(JsonDocument &data, const char* topic) { |
398 | 443 | Profile_Start(mqtt_publish_json); |
|
0 commit comments