#include <ESP8266WiFi.h>
#include <ESP8266HTTPClient.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 int port=8080;
String utilisateur="utilisateur";
String mdp_domoticz="mdp_domoticz";

volatile unsigned long  compteur=0;
volatile unsigned long  prec_compteur=0;
const int broche_compteur=12;
const int id=3;

void setup()
{
  Serial.begin(74800);
  Serial.println("Comptage impulsion");
  attachInterrupt(broche_compteur, incrementation_du_compteur, RISING);
}

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){
     if (compteur!=prec_compteur){
       Serial.println(compteur); 
       int variation=compteur-prec_compteur;
       prec_compteur=compteur;
       envoi_vers_controleur(id,"",String(variation));
    } 
  }else{
    connexion_reseau(); 
  } 
}

void envoi_vers_controleur(int id, String nvalue, String svalue){
    HTTPClient http;
    String connexion_domoticz="";
    if (utilisateur!="" && mdp_domoticz!=""){
      connexion_domoticz=utilisateur+":"+mdp_domoticz+"@";//"+utilisateur+":"+mdp_domoticz+"@"
    }else{
      connexion_domoticz="";
    }
    if (nvalue!="" && svalue!=""){
      http.begin(clientTCP,"http://"+connexion_domoticz+ip_controleur+":"+port+"/json.htm?type=command&param=udevice&idx="+String(id)+"&nvalue="+nvalue+"&svalue="+svalue);
    }else if(nvalue==""){
      http.begin(clientTCP,"http://"+connexion_domoticz+ip_controleur+":"+port+"/json.htm?type=command&param=udevice&idx="+String(id)+"&svalue="+svalue);
    }else{
      http.begin(clientTCP,"http://"+connexion_domoticz+ip_controleur+":"+port+"/json.htm?type=command&param=udevice&idx="+String(id)+"&nvalue="+nvalue);
    }
    int httpCode =http.GET();
    if (httpCode > 0){
      String reponse = http.getString();   
      Serial.println(reponse); 
    }else{
      Serial.println(millis());
    } 
    http.end();   //Close connection  
}

IRAM_ATTR void incrementation_du_compteur() {
  compteur=compteur+1;
}
