updated service
This commit is contained in:
87
src/FanStateService.h
Normal file
87
src/FanStateService.h
Normal 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
|
||||
Reference in New Issue
Block a user