diff --git a/doorbell/klingel_sender_nano_serial/doorbell.py b/doorbell/klingel_sender_nano_serial/doorbell.py
index cd6f475..cf1ef29 100644
--- a/doorbell/klingel_sender_nano_serial/doorbell.py
+++ b/doorbell/klingel_sender_nano_serial/doorbell.py
@@ -38,7 +38,8 @@ while True:
"Authorization": "Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJjYjY5NjA5NmY0N2E0NmZlOGEzYjczOGYzYmUzOTk5ZSIsImlhdCI6MTY2MTM0NDgxOSwiZXhwIjoxOTc2NzA0ODE5fQ.z9fzbVOA1Pbur3Zb07481n-SoYesj8cetw-CX6WPmTs"
}
data = json.dumps({'payload': 'RING', 'topic': 'lewe/doorbell', 'retain': 'False'}).encode('utf8')
- reqest = urllib.request.Request("https://www.nodebucket.de:8123/api/services/mqtt/publish", data, headers)
+ request = urllib.request.Request("localhost:8123/api/services/mqtt/publish", data, headers)
+# request = urllib.request.Request("https://www.nodebucket.de:8123/api/services/mqtt/publish", data, headers)
response = urllib.request.urlopen(reqest)
except Exception:
logger.error("Could not ring doorbell")
diff --git a/doorbell/klingel_sender_nano_serial/klingel_sender_nano_serial.ino b/doorbell/klingel_sender_nano_serial/klingel_sender_nano_serial.ino
index 178a8ad..3c7a30d 100644
--- a/doorbell/klingel_sender_nano_serial/klingel_sender_nano_serial.ino
+++ b/doorbell/klingel_sender_nano_serial/klingel_sender_nano_serial.ino
@@ -13,7 +13,7 @@
const int ledPin = LED_BUILTIN;
const int buttonPin = 2; // Button connected to D2
-const int flare_threshold = 20;
+const int flare_threshold = 120;
bool active = false;
diff --git a/garage/Buttons.svg b/garage/Buttons.svg
index 05718ff..f7d417e 100644
--- a/garage/Buttons.svg
+++ b/garage/Buttons.svg
@@ -23,9 +23,9 @@
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
- inkscape:zoom="0.49260383"
- inkscape:cx="109.62156"
- inkscape:cy="863.77728"
+ inkscape:zoom="2.7865881"
+ inkscape:cx="181.94293"
+ inkscape:cy="676.63391"
inkscape:window-width="1846"
inkscape:window-height="1016"
inkscape:window-x="0"
@@ -2132,7 +2132,7 @@
+ transform="matrix(0.91304345,0,0,0.91304345,32.290403,-74.475745)">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/garage/Garage_-_RasPi.fzz b/garage/Garage_-_RasPi.fzz
index c078e2d..12e5bfa 100644
Binary files a/garage/Garage_-_RasPi.fzz and b/garage/Garage_-_RasPi.fzz differ
diff --git a/garage/garage_esp32/garage_esp32.fzz b/garage/garage_esp32/garage_esp32.fzz
index cb94bc4..2ea669a 100644
Binary files a/garage/garage_esp32/garage_esp32.fzz and b/garage/garage_esp32/garage_esp32.fzz differ
diff --git a/garage/garage_esp32/garage_esp32.ino b/garage/garage_esp32/garage_esp32.ino
index 1014d02..5365302 100644
--- a/garage/garage_esp32/garage_esp32.ino
+++ b/garage/garage_esp32/garage_esp32.ino
@@ -1,8 +1,8 @@
-/*
- * Sources:
- * https://randomnerdtutorials.com/esp32-esp8266-web-server-physical-button/
- * https://randomnerdtutorials.com/esp32-pushover-notifications-arduino/
- */
+/*
+ Sources:
+ https://randomnerdtutorials.com/esp32-esp8266-web-server-physical-button/
+ https://randomnerdtutorials.com/esp32-pushover-notifications-arduino/
+*/
#include
#include
@@ -19,27 +19,27 @@ const char* userToken = "ukja84pd2n2cmxvdrnfwdrf8eo1wc5";
const char* pushoverApiEndpoint = "https://api.pushover.net/1/messages.json";
const char *PUSHOVER_ROOT_CA = "-----BEGIN CERTIFICATE-----\n"
- "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
- "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
- "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"
- "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"
- "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
- "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"
- "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"
- "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"
- "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"
- "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"
- "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"
- "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"
- "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"
- "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"
- "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"
- "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"
- "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"
- "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
- "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
- "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
- "-----END CERTIFICATE-----\n";
+ "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
+ "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
+ "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"
+ "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"
+ "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
+ "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"
+ "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"
+ "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"
+ "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"
+ "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"
+ "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"
+ "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"
+ "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"
+ "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"
+ "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"
+ "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"
+ "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"
+ "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
+ "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
+ "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
+ "-----END CERTIFICATE-----\n";
const int PIN_LED = 2; // esp32 dev board integrated LED
@@ -50,7 +50,7 @@ const int PIN_GARAGE = 22; // relais pin for garage door
const int PIN_GATE = 23; // relais pin for gate
const int PIN_DOOR_OPEN = 18; // sensor pin for garage door in position 'open'
const int PIN_DOOR_CLOSED = 19; // sensor pin for garage door in position 'closed'
-const int PIN_SENSOR_GATE= 21; // sensor pin for gate (HIGH is open)
+const int PIN_SENSOR_GATE = 21; // sensor pin for gate (HIGH is open)
const int PIN_SPRINKLER1 = 25; // relais pin for sprinkler 1
const int PIN_SPRINKLER2 = 33; // relais pin for sprinkler 2
const int PIN_SPRINKLER3 = 32; // relais pin for sprinkler 3
@@ -70,31 +70,31 @@ int programStatus = 0;
void pushover(String message) {
- StaticJsonDocument<512> notification;
+ StaticJsonDocument<512> notification;
notification["token"] = apiToken;
notification["user"] = userToken;
notification["title"] = "Garage"; //optional
notification["message"] = message;
-
+
// Serialize the JSON object to a string
String jsonStringNotification;
serializeJson(notification, jsonStringNotification);
-
+
WiFiClientSecure client;
client.setCACert(PUSHOVER_ROOT_CA);
-
+
HTTPClient https;
https.begin(client, pushoverApiEndpoint);
https.addHeader("Content-Type", "application/json");
int httpResponseCode = https.POST(jsonStringNotification);
-
+
if (httpResponseCode > 0) {
String response = https.getString();
Serial.println("Pushover response: " + String(httpResponseCode) + ", " + String(response));
} else {
Serial.printf("Pushover HTTP response code: %d\n", httpResponseCode);
}
-
+
https.end();
}
@@ -104,38 +104,38 @@ void notFound(AsyncWebServerRequest *request) {
void pinStatus(AsyncWebServerRequest *request) {
String status = "esp32garage\n\nPIN_LED (" + String(PIN_LED) + ") = " + String(digitalRead(PIN_LED)) + "\n" +
- "PIN_GARAGE_BUTTON (" + String(PIN_GARAGE_BUTTON) + ") = " + String(digitalRead(PIN_GARAGE_BUTTON)) + "\n" +
- "PIN_GATE_BUTTON (" + String(PIN_GATE_BUTTON) + ") = " + String(digitalRead(PIN_GATE_BUTTON)) + "\n" +
- "PIN_MOWER_ACTIVE (" + String(PIN_MOWER_ACTIVE) + ") = " + String(digitalRead(PIN_MOWER_ACTIVE)) + "\n" +
- "PIN_GARAGE (" + String(PIN_GARAGE) + ") = " + String(digitalRead(PIN_GARAGE)) + "\n" +
- "PIN_GATE (" + String(PIN_GATE) + ") = " + String(digitalRead(PIN_GATE)) + "\n" +
- "PIN_DOOR_OPEN (" + String(PIN_DOOR_OPEN) + ") = " + String(digitalRead(PIN_DOOR_OPEN)) + "\n" +
- "PIN_DOOR_CLOSED (" + String(PIN_DOOR_CLOSED) + ") = " + String(digitalRead(PIN_DOOR_CLOSED)) + "\n" +
- "PIN_SENSOR_GATE (" + String(PIN_SENSOR_GATE) + ") = " + String(digitalRead(PIN_SENSOR_GATE)) + "\n" +
- "PIN_SPRINKLER1 (" + String(PIN_SPRINKLER1) + ") = " + String(digitalRead(PIN_SPRINKLER1)) + "\n" +
- "PIN_SPRINKLER2 (" + String(PIN_SPRINKLER2) + ") = " + String(digitalRead(PIN_SPRINKLER2)) + "\n" +
- "PIN_SPRINKLER3 (" + String(PIN_SPRINKLER3) + ") = " + String(digitalRead(PIN_SPRINKLER3)) + "\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_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}))] \n" +
- "/sprinkler/program[?action=(stop|(start&duration={int}))] \n";
-
+ "PIN_GARAGE_BUTTON (" + String(PIN_GARAGE_BUTTON) + ") = " + String(digitalRead(PIN_GARAGE_BUTTON)) + "\n" +
+ "PIN_GATE_BUTTON (" + String(PIN_GATE_BUTTON) + ") = " + String(digitalRead(PIN_GATE_BUTTON)) + "\n" +
+ "PIN_MOWER_ACTIVE (" + String(PIN_MOWER_ACTIVE) + ") = " + String(digitalRead(PIN_MOWER_ACTIVE)) + "\n" +
+ "PIN_GARAGE (" + String(PIN_GARAGE) + ") = " + String(digitalRead(PIN_GARAGE)) + "\n" +
+ "PIN_GATE (" + String(PIN_GATE) + ") = " + String(digitalRead(PIN_GATE)) + "\n" +
+ "PIN_DOOR_OPEN (" + String(PIN_DOOR_OPEN) + ") = " + String(digitalRead(PIN_DOOR_OPEN)) + "\n" +
+ "PIN_DOOR_CLOSED (" + String(PIN_DOOR_CLOSED) + ") = " + String(digitalRead(PIN_DOOR_CLOSED)) + "\n" +
+ "PIN_SENSOR_GATE (" + String(PIN_SENSOR_GATE) + ") = " + String(digitalRead(PIN_SENSOR_GATE)) + "\n" +
+ "PIN_SPRINKLER1 (" + String(PIN_SPRINKLER1) + ") = " + String(digitalRead(PIN_SPRINKLER1)) + "\n" +
+ "PIN_SPRINKLER2 (" + String(PIN_SPRINKLER2) + ") = " + String(digitalRead(PIN_SPRINKLER2)) + "\n" +
+ "PIN_SPRINKLER3 (" + String(PIN_SPRINKLER3) + ") = " + String(digitalRead(PIN_SPRINKLER3)) + "\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_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}))] \n" +
+ "/sprinkler/program[?action=(stop|(start&duration={int}))] \n";
+
request->send(200, "text/plain", status);
}
void mowerSafety() {
Serial.println("mowerSafety()");
-
+
if (http.begin(webClient, "http://192.168.178.54/json?cmd=status&user=lewe&pass=nFdcX3sMD115WAap")) {
int httpCode = http.GET();
-
+
if (httpCode > 0) {
if (httpCode == HTTP_CODE_OK) {
String payload = http.getString();
@@ -148,7 +148,7 @@ void mowerSafety() {
Serial.println("Stop mower");
if (http.begin(webClient, "http://192.168.178.54/json?cmd=stop&user=lewe&pass=nFdcX3sMD115WAap")) {
int httpCode = http.GET();
-
+
if (httpCode < 0) {
Serial.printf("Mower (STOP) HTTP Error: ", http.errorToString(httpCode).c_str());
pushover("Mower (STOP) HTTP Error: " + http.errorToString(httpCode));
@@ -179,10 +179,10 @@ void mowerSafety() {
void mowerAuto() {
Serial.println("mowerAuto()");
-
+
if (http.begin(webClient, "http://192.168.178.54/json?cmd=mode&mode=auto&user=lewe&pass=nFdcX3sMD115WAap")) {
int httpCode = http.GET();
-
+
if (httpCode < 0) {
Serial.printf("Mower (AUTO) HTTP Error: ", http.errorToString(httpCode).c_str());
pushover("Mower (AUTO) HTTP Error: " + http.errorToString(httpCode));
@@ -197,7 +197,7 @@ void mowerAuto() {
void triggerGarage() {
Serial.println("Trigger garage door");
-
+
digitalWrite(PIN_GARAGE, LOW);
digitalWrite(PIN_LED, HIGH);
delay(400);
@@ -207,12 +207,12 @@ void triggerGarage() {
void triggerGate() {
Serial.println("Trigger gate");
-
+
bool toSafety = false;
if (not digitalRead(PIN_SENSOR_GATE)) {
toSafety = true;
}
-
+
digitalWrite(PIN_GATE, LOW);
digitalWrite(PIN_LED, HIGH);
delay(400);
@@ -235,7 +235,7 @@ void triggerGate() {
void stopSprinklers() {
Serial.println("Stopping sprinklers");
-
+
digitalWrite(PIN_SPRINKLER1, HIGH);
digitalWrite(PIN_SPRINKLER2, HIGH);
digitalWrite(PIN_SPRINKLER3, HIGH);
@@ -246,7 +246,7 @@ void setup() {
// start serial output
Serial.begin(115200);
Serial.println();
-
+
btStop(); // turn off bluetooth
pinMode(PIN_LED, OUTPUT);
@@ -265,14 +265,14 @@ void setup() {
pinMode(PIN_MOISTURE_DIGITAL, INPUT);
digitalWrite(PIN_LED, HIGH);
-
+
digitalWrite(PIN_GARAGE, HIGH);
digitalWrite(PIN_GATE, HIGH);
digitalWrite(PIN_SPRINKLER1, HIGH);
digitalWrite(PIN_SPRINKLER2, HIGH);
digitalWrite(PIN_SPRINKLER3, HIGH);
digitalWrite(PIN_SPRINKLER4, HIGH);
-
+
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
@@ -281,12 +281,12 @@ void setup() {
Serial.println(WiFi.localIP());
WiFi.setAutoReconnect(true);
WiFi.persistent(true);
-
- server.on("/", HTTP_GET, [](AsyncWebServerRequest *request){
+
+ server.on("/", HTTP_GET, [](AsyncWebServerRequest * request) {
pinStatus(request);
});
- server.on("/garage", HTTP_GET, [] (AsyncWebServerRequest *request) {
+ server.on("/garage", HTTP_GET, [] (AsyncWebServerRequest * request) {
String action;
if (request->hasParam("action")) {
action = request->getParam("action")->value();
@@ -313,7 +313,7 @@ void setup() {
}
});
- server.on("/gate", HTTP_GET, [] (AsyncWebServerRequest *request) {
+ server.on("/gate", HTTP_GET, [] (AsyncWebServerRequest * request) {
String action;
if (request->hasParam("action")) {
action = request->getParam("action")->value();
@@ -340,7 +340,7 @@ void setup() {
}
});
- server.on("/sprinkler", HTTP_GET, [] (AsyncWebServerRequest *request) {
+ server.on("/sprinkler", HTTP_GET, [] (AsyncWebServerRequest * request) {
String action;
if (request->hasParam("action")) {
action = request->getParam("action")->value();
@@ -377,30 +377,23 @@ void setup() {
}
}
else {
- stopSprinklers();
- request->send(200, "application/json", "{ \"action\": \"stop\" }");
+ stopSprinklers();
+ request->send(200, "application/json", "{ \"action\": \"stop\" }");
}
});
-
- server.on("/irrigation", HTTP_GET, [] (AsyncWebServerRequest *request) {
+
+ server.on("/irrigation", HTTP_GET, [] (AsyncWebServerRequest * request) {
String action;
if (request->hasParam("action")) {
-
- Serial.println("action");
action = request->getParam("action")->value();
- Serial.println(action.equals("start"));
- Serial.println(request->hasParam("duration"));
-
if (action.equals("start") and request->hasParam("duration")) {
String duration = request->getParam("duration")->value();
sprinklerDuration = duration.toInt();
- sprinklerDuration = sprinklerDuration * 60 * 1000;
+ sprinklerDuration = sprinklerDuration * 60 * 500; // XXX Terrasse nur halb so lange bewässern
sprinklerStartMillis = millis();
-
programStatus = 4;
digitalWrite(PIN_SPRINKLER4, LOW);
- sprinklerStartMillis = sprinklerStartMillis + ((sprinklerDuration / 2) * 60 * 1000); // XXX Terrasse nur halb so lange bewässern
request->send(200, "application/json", "{ \"action\": \"start\" }");
}
else {
@@ -409,7 +402,7 @@ void setup() {
request->send(200, "application/json", "{ \"action\": \"stop\" }");
}
}
-
+
String statusString = "false";
if (programStatus > 0) {
statusString = "true";
@@ -436,9 +429,14 @@ void loop() {
if ((sprinklerDuration > 0) and ((millis() - sprinklerStartMillis) > sprinklerDuration)) {
stopSprinklers();
if (programStatus > 0) {
+
+ if (programStatus == 4) {
+ sprinklerDuration = sprinklerDuration * 2; // XXX Terrasse nur halb so lange bewässern
+ }
+
programStatus--;
sprinklerStartMillis = millis();
-
+
if (programStatus == 3) {
digitalWrite(PIN_SPRINKLER3, LOW);
}
diff --git a/irrigation/irrigation.ino b/irrigation/irrigation.ino
new file mode 100644
index 0000000..322b3d4
--- /dev/null
+++ b/irrigation/irrigation.ino
@@ -0,0 +1,18 @@
+/*
+ * Soil moisture sensor on Wemos D1
+ */
+
+// the analog input on the Wemos D1 accepts up to 3.3V
+const int analogPin = A2;
+int val = 0;
+
+void setup() {
+ Serial.begin(9600);
+ Serial.println("Starting moisture measurement");
+}
+
+void loop() {
+ val = analogRead(analogPin);
+ Serial.println(val);
+ delay(1000);
+}