From 0098c7aaafa960a11d65ed170f89264df3f73b16 Mon Sep 17 00:00:00 2001 From: Jannik Beyerstedt Date: Mon, 24 Jul 2017 12:21:02 +0200 Subject: [PATCH] [CODE] add first draft --- lightscontrol-client.ino | 142 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 142 insertions(+) create mode 100644 lightscontrol-client.ino diff --git a/lightscontrol-client.ino b/lightscontrol-client.ino new file mode 100644 index 0000000..74ebcfc --- /dev/null +++ b/lightscontrol-client.ino @@ -0,0 +1,142 @@ +//#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 = 3; + +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) { + 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; +}