garage_esp32.ino /program endpoint

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