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

#include <climits>


//DHT settings:
#define DHTPIN 14     // what digital pin we're connected to

#define MEASURESECONDS 60 //shouldn't be < 2sec

// Uncomment whatever type you're using!
//#define DHTTYPE DHT11   // DHT 11
#define DHTTYPE DHT22   // DHT 22  (AM2302), AM2321
//#define DHTTYPE DHT21   // DHT 21 (AM2301)


// Initialize DHT sensor.
// Note that older versions of this library took an optional third parameter to
// tweak the timings for faster processors.  This parameter is no longer needed
// as the current DHT reading algorithm adjusts itself to work on faster procs.
DHT dht(DHTPIN, DHTTYPE);


// WiFi settings:
const char* ssid = "Your_SSID";
const char* password = "Your_Password";


//milli counter
unsigned long millitotal = 0;
float millicounter = 0;

//Temp variables
float h, t;

//First measurement
bool firstmeasurement = true;


void setup() {
  Serial.begin(115200);
  Serial.println("Sensornode start");

  //dht driver initialization
  dht.begin();

  // Connect to WiFi
  Serial.println("Connecting to wlan");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("\nWiFi connected");

  // Print the IP address
  Serial.println(WiFi.localIP());
}

void loop() {
  // Reading temperature or humidity takes about 250 milliseconds!
  // Sensor readings may also be up to 2 seconds 'old' (its a very slow sensor)
  h = dht.readHumidity();
  // Read temperature as Celsius (the default)
  t = dht.readTemperature();
  
  // Check if any reads failed and exit early (to try again).
  if (isnan(h) || isnan(t)) {
    Serial.println("Failed to read from DHT sensor!");
    return;
  } else {
    // Initialize the client library
    HTTPClient client;

    // Make a HTTP request:
    String url = "http://raspitemp:1337/abshum/" + String(t) + "/" + String(h);
    client.begin(url);
    client.GET();
    client.end();
  }

  //https://www.mikrocontroller.net/topic/384345
  ESP.deepSleep(MEASURESECONDS * 1000000);
  //Let the esp chill a bit
  delay(100);
}
