#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.h>
#include <ArduinoJson.h>
#include <WiFiClient.h>

WiFiClient clientTCP;
const char* ssid     = "SSID";
const char* mot_de_passe = "mot_de_passe";

const String ip_controleur = "192.168.1.123";
const String port = "8080";
String utilisateur="utilisateur";
String mdp_domoticz="mdp_domoticz";
String valeur;
String temp;

void setup() {
  Serial.begin(74880);
  connexion_reseau();
}
void connexion_reseau(){
  delay(10);  
  Serial.print("Tentative de connexion: "); 
  Serial.println(ssid); 
  WiFi.begin(ssid, mot_de_passe);  
  while (WiFi.status() != WL_CONNECTED) { 
    delay(500); 
    Serial.print("."); 
  } 
  Serial.println("Connexion au réseau Wi-Fi réalisée"); 
  Serial.println("L'adresse IP est: "); 
  Serial.println(WiFi.localIP());
}

void loop() {
  if(WiFi.status()== WL_CONNECTED){
    valeur = recuperer_donnee(62,"Data",2);
    if (valeur!="-999"){
      Serial.println(valeur); 
      // Actions à effectuer
    }
    valeur= recuperer_donnee(62,"Temp",1);
    if (valeur!="-999"){
      Serial.println(valeur); 
      // Actions à effectuer
    }
    valeur= recuperer_donnee(62,"Humidity",1);
    if (valeur!="-999"){
      Serial.println(valeur); 
      // Actions à effectuer
    }
    delay(1000);
  }else{
    connexion_reseau();
  } 
}

String recuperer_donnee(int idx,String quoi,int type)
{
    String connexion_domoticz="";
    if (utilisateur!="" && mdp_domoticz!=""){
      connexion_domoticz=utilisateur+":"+mdp_domoticz+"@";
    }else{
      connexion_domoticz="";
    }
    String url="http://"+connexion_domoticz+ip_controleur+":"+port+"/json.htm?type=devices&rid="+String(idx);
    HTTPClient http;   
     http.begin(clientTCP,url);
    int httpCode = http.GET();
    if (httpCode > 0) {
      const size_t bufferSize = 2000;
//      DynamicJsonBuffer jsonBuffer(bufferSize); 
//      JsonObject& root = jsonBuffer.parseObject(http.getString());
//      JsonObject& result0 = root["result"][0];
        DynamicJsonDocument root(bufferSize);
        DeserializationError error = deserializeJson(root, http.getString());
        if (error){
          Serial.print(F("deserializeJson() failed: "));
          Serial.println(error.f_str());
          //return;
        }else{
          if (type==1){
            float result0 =  root["result"][0][quoi];
            
            temp=String(result0);
          }
          if (type==2){
            const char* result0 =  root["result"][0][quoi];
            temp= result0;
          }
        }
        //Serial.println(temp);
      //
    }else{
      temp="-999";
    }
    http.end();
    return temp;
}
