diff --git a/garage/garage_esp32/garage_esp32.ino b/garage/garage_esp32/garage_esp32.ino index c716454..9ab52be 100644 --- a/garage/garage_esp32/garage_esp32.ino +++ b/garage/garage_esp32/garage_esp32.ino @@ -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\" }"); - } - else { - request->send(200, "application/json", "{ \"status\": \"true\" }"); + 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 { + 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); @@ -440,4 +478,4 @@ void loop() { Serial.println("fluke"); } } -} +} \ No newline at end of file