/********* Wemos-D1-mini by Peter Hilbers, 10mei2026 *********/ const char* SketchTitel = "Wemos-D1-Domo-WatergevenTuin-v40x-OTA"; const char* SketchDate = "17-04-2026 rev 02-06-2025"; const char* DeviceName = "ESP8266-E8DB84 "; #include #include #include #include #include #include #include #include /************************* NTP Client ****************************************/ const long utcOffsetInSeconds = 7200; /************************* Define NTP Client to get time *************************/ WiFiUDP ntpUDP; NTPClient timeClient(ntpUDP, "pool.ntp.org", utcOffsetInSeconds); // Replace with your network credentials const char* ssid = "PH5D69DB"; const char* password = "secret password"; // aanpassing in eigen toepassing const char* domoticzIP = "192.168.178.1xx"; // aanpassing in eigen toepassing const int domoticzPort = 8080; // vergeet niet string url aan te passen const int domoticzIdx1 = 74; // waterpomp, aanpassing in eigen toepassing const char* Indexen = "74"; const int pinRel = 5; int relais; int statusRel; int reSet; String payload; String Data; int daTa; int Term; //=== Tijdsvariabelen ======= long Dag; long Uren; long Minuten; long Seconden; long lastMinuten; String url = ""; HTTPClient http; WiFiClient client; WiFiServer server(80); void setup() { Serial.begin(115200); Serial.println("Booting"); WiFi.mode(WIFI_STA); WiFi.begin(ssid, password); while (WiFi.waitForConnectResult() != WL_CONNECTED) { Serial.println("Connection Failed! Rebooting..."); delay(5000); ESP.restart(); } Serial.println(DeviceName); Serial.print("ESP MAC: "); Serial.println(WiFi.macAddress()); // Port defaults to 8266 // ArduinoOTA.setPort(8266); // Hostname defaults to esp8266-[ChipID] // ArduinoOTA.setHostname("myesp8266"); // No authentication by default // ArduinoOTA.setPassword((const char *)"123"); ArduinoOTA.onStart([]() { Serial.println("Start"); }); ArduinoOTA.onEnd([]() { Serial.println("\nEnd"); }); ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) { Serial.printf("Progress: %u%%\r", (progress / (total / 100))); }); ArduinoOTA.onError([](ota_error_t error) { Serial.printf("Error[%u]: ", error); if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed"); else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed"); else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed"); else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed"); else if (error == OTA_END_ERROR) Serial.println("End Failed"); }); ArduinoOTA.begin(); Serial.println("Ready"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); Serial.println("MAC Address:"); Serial.println(WiFi.macAddress()); Serial.println(SketchTitel);Serial.println(SketchDate);Serial.println(Indexen); pinMode(pinRel, OUTPUT); } void loop() { ArduinoOTA.handle(); /**********************NTPClient pickup time ************************/ timeClient.update(); long Dag = timeClient.getDay(); long Uren = timeClient.getHours(); long Minuten = timeClient.getMinutes(); long Seconden = timeClient.getSeconds(); /*+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++*/ //Serial.println(Uren); // Wait a few seconds between measurements. if(WiFi.status() != WL_CONNECTED) { Serial.println("WiFi not connected !"); } else { Serial.println("Send data to Domoticz"); delay(1000); } // ================ Status opvragen =================== Serial.println("Status opvragen "); url = "/json.htm?type=command¶m=getdevices&rid="; url += String(domoticzIdx1); SendToDomoticzStatus(url); //relais = digitalRead(pinRel); if (Uren==8 || Uren==19 || Term == 1 ){ if ((Minuten == 1 && Seconden == 30) || Term == 1){ digitalWrite(pinRel, HIGH); // sets the digital pin on url = "/json.htm?type=command¶m=switchlight&idx="; url = url + String(domoticzIdx1)+"&"; url = url + "switchcmd=On"; if (Term == 0)sendDomoticz(url); delay(40000); // duur on digitalWrite(pinRel, LOW); // sets the digital pin off Term = 0; url = "/json.htm?type=command¶m=switchlight&idx="; url = url + String(domoticzIdx1)+"&"; url = url + "switchcmd=Off"; sendDomoticz(url); delay(60); // duur uit de active minuut te komen } } Serial.println("Status opvragen "); url = "/json.htm?type=command¶m=getdevices&rid="; url += String(domoticzIdx1); SendToDomoticzStatus(url); Serial.print(String(Dag)+":"+String(Uren)+":"+String(Minuten)+":"+String(Seconden)); Serial.println(" End loop "); } void sendDomoticz(String url){ Serial.print("connecting to "); Serial.println(domoticzIP); Serial.print("Requesting URL: "); Serial.println(url); http.begin(client,domoticzIP,domoticzPort,url); int httpCode = http.GET(); if (httpCode) { if (httpCode == 200) { String payload = http.getString(); Serial.println("Domoticz response "); Serial.print(payload); } } Serial.println("closing connection"); http.end(); delay(4000); } // ================================ status ======================= void SendToDomoticzStatus(String url){ // The filter: it contains "true" for each value we want to keep StaticJsonDocument<200> filter; filter["result"][0]["idx"] = true; filter["result"][0]["Data"] = true; filter["result"][0]["Status"] = true; filter["result"][0]["LastUpdate"] = true; http.begin(client,domoticzIP,domoticzPort,url); int httpCode = http.GET(); if (httpCode) { if (httpCode == 200) { String inputjson = http.getString(); StaticJsonDocument<200> doc; deserializeJson(doc, inputjson, DeserializationOption::Filter(filter)); //Serial.println("Domoticz response "); // Extract values Serial.println(F("Domoticz Response:")); JsonArray result = doc["result"]; String Data = result[0]["Data"]; String lastUpdate = result[0]["LastUpdate"]; Serial.print("Data "); Serial.println(Data); Serial.print("Lastupdate "); Serial.println(lastUpdate); //Serial.print("Lengte "); int Lengte= lastUpdate.length();Serial.println(Lengte); Serial.println(lastUpdate.substring(11, 16)); if (lastUpdate.substring(11, 16)== "00:00" && result[0]["idx"] == "74" ) {reSet=1; daTa = Data.toInt()+1;}else{reSet=0;} for (JsonObject doc : result) { if (doc["Data"] == "On" && doc["Status"] == "On" && doc["idx"] == "74") { Serial.println("Hoera data=on"); Term=1; }else{ Serial.println("Pech data!=on"); Term=0; } } } } } void SendToDomoticzStatusCtrl(String url){ http.begin(client,domoticzIP,domoticzPort,url); int httpCode = http.GET(); if (httpCode) { if (httpCode == 200) { String inputjson = http.getString(); StaticJsonDocument<200> doc; deserializeJson(doc, inputjson); Serial.println("Domoticz response "); Serial.println(inputjson); } } }