//#include //#include //#include //#include //#include //#include //#include //#include #include const char* host = "ursaminor.local"; String serviceUri = "/service.php"; const int httpPort = 8088; const int relaisPin = D3; bool lightState = false; unsigned int lightTime = 0; bool updated = false; void setup() { Serial.begin(115200); delay(100); Serial.println(""); Serial.println("Connecting to WiFi"); WiFi.begin("WLAN-Bey-IoT","IoT-Fra80"); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(" connected"); Serial.print("IP address: "); Serial.println(WiFi.localIP()); Serial.println(""); pinMode(0, OUTPUT); pinMode(relaisPin, OUTPUT); } void loop() { Serial.print("connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; if (!client.connect(host, httpPort)) { Serial.println("ERROR connection failed"); return; } // This will send the request to the server String httpRequest = "GET " + serviceUri + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"; client.print(httpRequest); delay(100); // Read the lines of the reply from server // first expect a HTTP 200 status code while(client.available()) { String line = client.readStringUntil('\n'); if (line.indexOf("HTTP") != -1) { if (line.indexOf("200") == -1) { Serial.println("ERROR: invalid http status code"); } break; } else { ; } } // then read until the payload is found while(client.available()) { String line = client.readStringUntil('\n'); int start = line.indexOf("s="); if (start != -1) { // parse state information String buf; buf = line.substring(start+2, start+3); if (buf.equals("0")) { lightState = 0; } else { lightState = 1; } start = line.indexOf("t="); buf = line.substring(start+2); lightTime = buf.toInt(); updated = true; Serial.println("response parsed"); } else { ; } } // failsafe if (!updated) { lightState = true; lightTime = 1; Serial.println("WARN failsafe"); } Serial.print("Lights: "); Serial.print(lightState); Serial.print("\tTime: "); Serial.println(lightTime); // TODO: SWITCH SOME PIN digitalWrite(relaisPin, lightState); // sleep some time according to the recommendation in the answer if (lightTime > 15) { // not more than 15 minutes lightTime = 15; } // only deep sleep, if the time is more than 5 minutes if (lightTime >= 5 && lightState == false) { Serial.println("going for a deep sleep"); Serial.println(""); Serial.flush(); Serial.end(); ESP.deepSleep(lightTime * 60 * 1000000); // connect GPIO16 (D0) to RST!!! } else { Serial.println("taking a normal sleep"); if (lightTime < 1) { delay(10 * 1000); } else { delay(lightTime * 60 * 1000); } } Serial.println(""); updated = false; }