// Import des librairies
#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include "DHT.h"

// PARAMÈTRES À MODIFIER SELON VOTRE CONFIG
#define   ssid            "XXXXXXX"               // ssid 
#define   password        "YYYYYYYYYYYYYYYYYY"    // mdp ssid
#define   Domotocz        "192.168.X.X"           // adresse de domoticz
#define   portDomotocz    8084                    // port de domoticz
#define   IDX             "1"                     // idx de votre capteur sur domoticz
#define   DHTPIN          4                       // GPIO4 pin D2
#define   DHTTYPE         DHT21                   // DHT 21 / DHT 22 / DHT 11

HTTPClient http;                                  // on crée l'objet HTTPClient -> http
DHT dht(DHTPIN, DHTTYPE);                         // on crée l'objet DHT -> dht

// fonction qui envoie les datas sur domoticz
void sendDomoticz(String url){
  Serial.print("connection à Domoticz : ");
  Serial.print(Domotocz);
  Serial.print(":");
  Serial.println(portDomotocz);
  WiFiClient client;                              // on crée l'objet WiFiClient -> client      
  http.begin(client,Domotocz,portDomotocz,url);   // on envoie les datas
  int httpCode = http.GET();                      
    if (httpCode) {
      if (httpCode == 200) {                      // si on a bien reçu les datas    
        String payload = http.getString();        
        Serial.println(payload);
        Serial.print("datas envoyées : ");        // on affiche l'url envoyée
        Serial.println(url);
      } else {                                    // sinon
        Serial.println("echec de la connexion à Domoticz");
        return;      
      }
    }
  Serial.println("fermeture de la connection");
  http.end();
  Serial.println();
}

void setup() {
  Serial.begin(115200);
  Serial.println("Initialisation !!!");
  dht.begin();
  //Serial.setDebugOutput(true);  
  Serial.println("Connecting Wifi...");
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }   
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.print("IP address: ");
  Serial.println(WiFi.localIP()); 
}

void loop() {    
  float h = dht.readHumidity();  
  float t = dht.readTemperature();
  
  if (isnan(h) || isnan(t)) {
    Serial.println(F("Failed to read from DHT sensor!"));
    return;
  }  
  float hic = dht.computeHeatIndex(t, h, false);
  int hum_stat;
  if ( h > 70 ) {
    hum_stat = 3;
  } else if ( h < 30 ) {
    hum_stat = 2; 
  } else if ( h >= 30 & h <= 45 ) {
    hum_stat = 0;
  } else if ( h > 45 & h <= 70 ) {
    hum_stat = 1;
  }  
  Serial.printf("Humidité: %.2f %c Temperature: %.2f °C Heat index: %.2f °C \n", h, 37, t, hic);  
  // on construit l'url a envoyée à domoticz
  // qui doit etre de cette forme (/json.htm?type=command&param=udevice&idx=_VOTREIDX_&nvalue=0&svalue=_VOSDATAS_;
  String url = "/json.htm?type=command&param=udevice&idx=";
  url += String(IDX);
  url +="&nvalue=0&svalue=";
  url += String(t); url += ";";
  url += String(h); url += ";";
  url += String(hum_stat); url += ";";     
  sendDomoticz(url);                      // On envoie l'url à domoticz
  delay(10000);  
}