//#define _DEBUG_ //toujours mettre en premier et mettre Serial.begin(115200); dans setup */
#include <ThingerESP8266.h>
#include "DHT.h"

#define USERNAME "xxxxxxxxxxxxxxxx"
#define DEVICE_ID "xxxxxxxxxxxxxxxxxxxx"
#define DEVICE_CREDENTIAL "xxxxxxxxxxxxxx"
#define SSID "xxxxxxxxxxxxx"
#define SSID_PASSWORD "xxxxxxxxxxxxxxxxx"

#define pinS0 5 //pin D1, les pin sont mises avec leur n° GPIO, c'est les 3 pins qui actionne le CD4051 pour qu'il sache quelle entrée lire
#define pinS1 4 //pin D2
#define pinS2 0 //pin D3

ThingerESP8266 thing(USERNAME, DEVICE_ID, DEVICE_CREDENTIAL);

DHT dht(D4, DHT11);
int v1, v4;

void setup() {
  pinMode(D7, OUTPUT);//led verte
  pinMode(D8, OUTPUT);//led rouge
  pinMode(D5, INPUT);//pushbutton
  pinMode(D4, INPUT);//DHT11
  pinMode(pinS0, OUTPUT);
  pinMode(pinS1, OUTPUT);
  pinMode(pinS2, OUTPUT);

  dht.begin();

  thing.add_wifi(SSID, SSID_PASSWORD);

  //thing["led"] << invertedDigitalPin(D4); // digital pin control example (i.e. turning on/off a light, a relay, configuring a parameter, etc)
  thing["ledrouge"] << digitalPin(D7); // digital pin control example (i.e. turning on/off a light, a relay, configuring a parameter, etc)
  thing["ledverte"] << digitalPin(D8); // digital pin control example (i.e. turning on/off a light, a relay, configuring a parameter, etc)
 
  thing["potar1"] >> outputValue(v1);
  thing["light_sensor"] >> outputValue(v4);
  thing["temperature"] >> outputValue(dht.readTemperature());
  thing["Humidity"] >> outputValue(dht.readHumidity());

  thing["push_button"] >> [](pson & out) {
    out = digitalRead(D5) == HIGH ? "OFF" : "ON";
  };
}

void loop() {
  digitalWrite(pinS2, LOW); //pour lire l'entrée Y0 du CD4051
  digitalWrite(pinS1, LOW);
  digitalWrite(pinS0, LOW);
  v1 = analogRead(0);
  delay(20);

  digitalWrite(pinS2, LOW); //pour lire l'entrée Y3 du CD4051
  digitalWrite(pinS1, HIGH);
  digitalWrite(pinS0, HIGH);
  v4 = 1024 - analogRead(0);
  delay(20);

  thing.handle();
}