updated service

This commit is contained in:
2021-01-12 16:25:44 +01:00
parent 59ba65acfc
commit 2cfd2afaee
3 changed files with 127 additions and 1 deletions

87
src/FanStateService.h Normal file
View File

@@ -0,0 +1,87 @@
#ifndef FanStateService_h
#define FanStateService_h
#include <HttpEndpoint.h>
#define FAN_PIN 13
#define PRINT_DELAY 5000
#define DEFAULT_FAN_STATE false
#define OFF_STATE "OFF"
#define ON_STATE "ON"
// Note that the built-in LED is on when the pin is low on most NodeMCU boards.
// This is because the anode is tied to VCC and the cathode to the GPIO 4 (Arduino pin 2).
#ifdef ESP32
#define FAN_ON 0x1
#define FAN_OFF 0x0
#elif defined(ESP8266)
#define FAN_ON 0x0
#define FAN_OFF 0x1
#endif
#define FAN_SETTINGS_ENDPOINT_PATH "/rest/fanState"
class FanState {
public:
bool fanStatus;
int fanSpeed;
static void read(FanState& settings, JsonObject& root) {
root["fan_status"] = settings.fanStatus;
String s = root["fan_status"];
Serial.print(" ** Fan read [" + s + "]\n");
}
static StateUpdateResult update(JsonObject& root, FanState& fanState) {
boolean newState = root["fan_status"] | DEFAULT_FAN_STATE;
Serial.print(" ** Fan update [" + (String)newState + "]\n");
if (fanState.fanStatus != newState) {
fanState.fanStatus = newState;
return StateUpdateResult::CHANGED;
}
return StateUpdateResult::UNCHANGED;
}
static void haRead(FanState& settings, JsonObject& root) {
root["state"] = settings.fanStatus ? ON_STATE : OFF_STATE;
String s = root["state"];
Serial.print(" ** Fan haRead [" + s + "] \n");
}
static StateUpdateResult haUpdate(JsonObject& root, FanState& fanState) {
String state = root["state"];
String s = root["state"];
Serial.print(" ** Fan haUpdate [" + s + "] \n");
// parse new led state
boolean newState = false;
if (state.equals(ON_STATE)) {
newState = true;
} else if (!state.equals(OFF_STATE)) {
return StateUpdateResult::ERROR;
}
// change the new state, if required
if (fanState.fanStatus != newState) {
fanState.fanStatus = newState;
return StateUpdateResult::CHANGED;
}
return StateUpdateResult::UNCHANGED;
}
};
class FanStateService : public StatefulService<FanState> {
public:
FanStateService(AsyncWebServer* server, SecurityManager* securityManager);
void begin();
private:
HttpEndpoint<FanState> _httpEndpoint;
void registerConfig();
void onConfigUpdated();
};
#endif