garage_esp32.ino /program endpoint

This commit is contained in:
2023-06-10 16:41:18 +00:00
parent 4abf498c62
commit eea9d45e18
+49 -11
View File
@@ -66,6 +66,8 @@ HTTPClient http;
unsigned long sprinklerDuration = 0;
unsigned long sprinklerStartMillis;
int programStatus = 0;
void pushover(String message) {
StaticJsonDocument<512> notification;
@@ -116,12 +118,14 @@ void pinStatus(AsyncWebServerRequest *request) {
"PIN_SPRINKLER4 (" + String(PIN_SPRINKLER4) + ") = " + String(digitalRead(PIN_SPRINKLER4)) + "\n" +
"PIN_MOISTURE_ANALOG (" + String(PIN_MOISTURE_ANALOG) + ") = " + String(analogRead(PIN_MOISTURE_ANALOG)) + "\n" +
"PIN_MOISTURE_DIGITAL (" + String(PIN_MOISTURE_DIGITAL) + ") = " + String(digitalRead(PIN_MOISTURE_DIGITAL)) + "\n\n" +
"programStatus = " + String(programStatus) + "\n" +
"sprinklerDuration = " + String(sprinklerDuration) + "\n" +
"sprinklerStartMillis = " + String(sprinklerStartMillis) + "\n\n" +
"/ \n" +
"/garage[?action=(open|close)] \n" +
"/gate[?action=(open|close)] \n" +
"/sprinkler[?action=(stop|(start&device={int}&duration={int}))]";
"/sprinkler[?action=(stop|(start&device={int}&duration={int}))] \n" +
"/sprinkler/program[?action=(stop|(start&duration={int}))] \n";
request->send(200, "text/plain", status);
}
@@ -236,7 +240,6 @@ void stopSprinklers() {
digitalWrite(PIN_SPRINKLER2, HIGH);
digitalWrite(PIN_SPRINKLER3, HIGH);
digitalWrite(PIN_SPRINKLER4, HIGH);
sprinklerDuration = 0;
}
void setup() {
@@ -343,15 +346,12 @@ void setup() {
action = request->getParam("action")->value();
Serial.println("Sprinkler " + action);
if (action.equals("stop")) {
stopSprinklers();
request->send(200, "application/json", "{ \"action\": \"stop\" }");
}
else if (action.equals("start") and (request->hasParam("device")) and (request->hasParam("duration"))) {
if (action.equals("start") and (request->hasParam("device")) and (request->hasParam("duration"))) {
stopSprinklers(); // only run one sprinkler at a time
String device = request->getParam("device")->value();
String duration = request->getParam("duration")->value();
sprinklerDuration = duration.toInt();
sprinklerDuration = sprinklerDuration * 60 * 1000;
sprinklerStartMillis = millis();
if (device.equals("1")) {
digitalWrite(PIN_SPRINKLER1, LOW);
@@ -376,13 +376,34 @@ void setup() {
}
}
else {
if (digitalRead(PIN_SENSOR_GATE)) {
request->send(200, "application/json", "{ \"status\": \"false\" }");
stopSprinklers();
request->send(200, "application/json", "{ \"action\": \"stop\" }");
}
});
server.on("/sprinkler/program", HTTP_GET, [] (AsyncWebServerRequest *request) {
if (request->hasParam("action")) {
action = request->getParam("action")->value();
if (action.equals("start") and (request->hasParam("duration"))) {
String duration = request->getParam("duration")->value();
sprinklerDuration = duration.toInt();
sprinklerDuration = sprinklerDuration * 60 * 1000;
sprinklerStartMillis = millis();
programStatus = 4;
digitalWrite(PIN_SPRINKLER4, LOW);
request->send(200, "application/json", "{ \"action\": \"start\" }");
}
}
else {
request->send(200, "application/json", "{ \"status\": \"true\" }");
}
stopSprinklers();
programStatus = false;
request->send(200, "application/json", "{ \"action\": \"stop\" }");
}
request->send(200, "application/json", "{ \"status\": \"" + String(programStatus) + "\" }");
});
server.onNotFound(notFound);
@@ -403,6 +424,23 @@ void loop() {
if ((sprinklerDuration > 0) and ((millis() - sprinklerStartMillis) > sprinklerDuration)) {
stopSprinklers();
if (programStatus > 0) {
sprinklerStartMillis = millis();
programStatus--;
if (programStatus == 3) {
digitalWrite(PIN_SPRINKLER3, LOW);
}
else if (programStatus == 2) {
digitalWrite(PIN_SPRINKLER2, LOW);
}
else if (programStatus == 1) {
digitalWrite(PIN_SPRINKLER1, LOW);
}
}
else {
sprinklerDuration = 0;
}
}
int newVal = digitalRead(PIN_GARAGE_BUTTON);