/*
 *  esp8266 CLOUD version chip
 *  (with light sensor and LED light at the two corners)
 *  
 *  
 *  gpio2 - small power/status led
 *  a0 - analog read
 *  

 */

#include <ESP8266WiFi.h>
#include <DHT.h>


#define DHTTYPE DHT11   // DHT 11
// DHT Sensor
const int DHTPin = 2;
// Initialize DHT sensor.
DHT dht(DHTPin, DHTTYPE);

const char* ssid     = "hazard18";
const char* password = "pu1f0xylu1";

// Host
const char* host = "dweet.io";

// Temporary variables
static char celsiusTemp[7];
static char fahrenheitTemp[7];
static char humidityTemp[7];

int c = 0;

void setup() {

  //pinMode(2, OUTPUT);
  
  Serial.begin(115200);
  delay(100);
  Serial.print("Starting... ");

  dht.begin();


  // We start by connecting to a WiFi network
  Serial.println();
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }

  Serial.println("");
  Serial.println("WiFi connected");  
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());


}

float h,t,f;


void loop() {

  Serial.print("Connecting to ");
  Serial.println(host);
  
  // Use WiFiClient class to create TCP connections
  WiFiClient client;
  const int httpPort = 80;
  if (!client.connect(host, httpPort)) {
    Serial.println("connection failed");
    return;
  }
  
  h = dht.readHumidity();
  t = dht.readTemperature();
  f = dht.readTemperature(true);

  if (isnan(h) || isnan(t) || isnan(f)) {
    Serial.println("Failed to read from DHT sensor!");
    strcpy(celsiusTemp,"Failed");
    strcpy(fahrenheitTemp, "Failed");
    strcpy(humidityTemp, "Failed");         
    //digitalWrite(2, HIGH);

    client.print(String("GET /dweet/for/esp1881?tempC=") + String(celsiusTemp) + String(c++) +
                 String("&tempF=") + String(fahrenheitTemp) +
                 String("&humidity=") + String(humidityTemp) + 
                 " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" + 
                 "Connection: close\r\n\r\n");    
    
  }
  else{
    // Computes temperature values in Celsius + Fahrenheit and Humidity

    
    
    float hic = dht.computeHeatIndex(t, h, false);       
    float hif = dht.computeHeatIndex(f, h);

    sprintf(celsiusTemp,"%f", t);
    sprintf(fahrenheitTemp, "%f", f);
    sprintf(humidityTemp, "%f", h);
    
    
    Serial.println(celsiusTemp);
    Serial.println(fahrenheitTemp);
    Serial.println(humidityTemp);

//    Serial.println(String("GET /dweet/for/esp1881?tempC=") + String(celsiusTemp) +  
//                 String("&tempF=") + String(fahrenheitTemp) +
//                 String("&humidity=") + String(humidityTemp) + 
//                 " HTTP/1.1\r\n" +
//                 "Host: " + host + "\r\n" + 
//                 "Connection: close\r\n\r\n");  
    
    client.print(String("GET /dweet/for/esp1881?tempC=") + String(hic, 2) +  
                 String("&tempF=") + String(hif, 2) +
                 String("&humidity=") + String(h, 2) + 
                 " HTTP/1.1\r\n" +
                 "Host: " + host + "\r\n" + 
                 "Connection: close\r\n\r\n");   

  }

    delay(100);
    //digitalWrite(2, LOW);
    
    // Read all the lines of the reply from server and print them to Serial
    while(client.available()){
      String line = client.readStringUntil('\r');
      Serial.print(line);
    }

 
  //}




  delay(500);
  

}

