Besoin d'aide pour Arduino ESP8266 Domoticz

Bonjour

Etant un noob en code j'aurai besoin de votre aide pour pouvoir faire communiquer mon arduino mega avec esp8266-01 et domoticz.
Au niveau de l'arduino mega je possède 4 capteurs et un rtc.
1 dht22
1 ph4502c
1 18b20
1 testeur EC fait maison avec une prise et une résistance 10k
1 rtc ds3231
Tout fonctionne.

Au niveau de l'esp8266 j'arrive a le flasher avec un arduino UNO .
J'arrive à installer Espeasy ou un ATfirmware me connecter sur le reseau d'espesay ou taper des commandes AT.

J'utilise Domoticz depuis de nombreuses années avec un arduino mega avec Rflink .

Le problème ses que je suis pas du tout doué en code mais je ses suivre un tuto.
Mais la je n'arrive pas à trouver un tuto simple beaucoup de code je suis perdu. :frowning:

Merci

La meilleure voie pour DOMOTICZ est : MySensors.

Un ARDUINO MEGA pourrait parfaitement communiquer de manière native avec DOMOTICZ moyennant une passerelle MySensors (ARDUINO NANO ou PRO MINI + un module RADIO 2.4GHz ou 433Mhz). Pas besoin de WIFI pour cela.

Par contre je déconseillerais la solution UNO + ESP01, complètement dépassée.

Bonjour

Merci de votre réponse.
Juste un nrf suffirais?
j’espérais pouvoir communiquer avec :frowning: . je possède aussi un esp32 utile ou pas ?

J’ai trouvé 2 codes pensez vous qu’il serait possible de les adaptés pour se que je veux faire.

#include <SoftwareSerial.h>
  
SoftwareSerial softSerial(10, 11); // RX, TX
String SSID = "Livebox-1234";  // SSID du réseau Wi-Fi
String PASS = "MonMotDePasseWiFi"; // Mot de passe Wi-Fi
void setup() {
  softSerial.begin(115200); // baudrate par défaut de l'ESP8266
  delay(100);
  // on demande à utiliser un baudrate inférieur
  // (notre esp8266 s'est montrer plus stable ainsi)
  softSerial.println("AT+CIOBAUD=9600"); 
  delay(200);
  softSerial.begin(9600);
}
void loop() {
  String temperatureSalon = String(20.12); // dans la vraie vie on utiliserait la valeur retournée par un capteur
  sendValue("MQmGBUiuXg3JNgCk", "temperature-salon", temperatureSalon);
}
  
void sendValue(String token, String metric, String value) {
  String host = "www.fais-le-toi-meme.fr";
  delay(100);
  // on va se connecter à un réseau existant, donc on passe en mode station
  softSerial.println("AT+CWMODE=1");
  delay(1000);
  // on se connecte au réseau
  softSerial.println("AT+CWJAP=\""+SSID+"\",\""+PASS+"\"");
  delay(10000);
  // mode "connexions multiples"
  softSerial.println("AT+CIPMUX=1");
  
  delay(3000);
  // on se connecte à notre serveur en TCP sur le port 80
  softSerial.println("AT+CIPSTART=4,\"TCP\",\""+host+"\",80");
  delay(1000);
  String request = "GET /iot-dashboard/write/"+token+"/"+metric+"/"+value+ " HTTP/1.0\r\n";
  request       += "Host:"+host+"\r\n";
  // on donne la taille de la requête qu'on va envoyer, en ajoutant 2 car
  // println ajouter 2 caractères à la fin "\r" et "\n"
  softSerial.println("AT+CIPSEND=4,"+String(request.length()+2));
  delay(500);
  // on envoie la requete
  softSerial.println(request);
  delay(3000);
  // on ferme la connexion
  softSerial.println("AT+CIPCLOSE=4");
}
// cteni dat z SHT, odeslani na domoticz, spanek
 
 
#include &lt;ESP8266WiFi.h>
 
const int sleepTimeS = 10; // sleep time in minutes
WiFiClient client;
// domoticz
const char * domoticz_server = "IP";
int port = 8080; //Domoticz port
int idx = 6; //IDX for virtual sensor, found in Setup -> Devices
 
//wifi
#define AP_SSID     "ssid"
#define AP_PASSWORD "heslo"
int wifi_connect = 0;
 
//SHT or Si7020 setup
#if defined(ARDUINO)
#include "Wire.h"
#include "Si7020.h"
#elif defined(SPARK)
#include "Si7020/Si7020.h"
#endif
Si7020 sensor;
 
float hum = 0;
float temp = 0;
 
void setup()
{
  sensor.begin();
  Serial.begin(115200);
  wifiConnect();
}
 
void loop()
{
 
  getData();
  senddata();
 
  Serial.println("Jdu spat");
  delay(100);
  ESP.deepSleep(sleepTimeS * 1000000 * 60, WAKE_RF_DEFAULT);
  delay(100);
 
}
void wifiConnect()
{
  Serial.print("Connecting to: ");
  Serial.println(AP_SSID);
  WiFi.begin(AP_SSID, AP_PASSWORD);
 
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print(".");
 
    wifi_connect++;
    Serial.print(wifi_connect);
    if (wifi_connect == 20) {
      wifi_connect = 0;
      Serial.println("nemuzu se pripojit jdu spat");
      ESP.deepSleep(30 * 1000000 * 60, WAKE_RF_DEFAULT);
    }
  }
  Serial.println("");
  Serial.println("WiFi connected");
}
 
void getData()
{
  hum = sensor.getRH();
  temp = sensor.getTemp();
 
  Serial.println();
  Serial.println("**********************************************");
  Serial.println("Humidity (%)\tTemperature (C)");
  Serial.print("\t");
  Serial.print(hum, 1);
  Serial.print("\t\t");
  Serial.print(temp, 1);
  Serial.println("\t\t");
  Serial.println("**********************************************");
  Serial.println();
}
 
void senddata()
{
  // Domoticz format /json.htm?type=command&amp;param=udevice&amp;idx=IDX&amp;nvalue=0&amp;svalue=TEMP;HUM;HUM_STAT
 
 
  while (!client.connect(domoticz_server, port)) {
    Serial.println("connection failed");
    Serial.println("nemuzu se pripojit na domoticz jdu spat");
    ESP.deepSleep(30 * 1000000 * 60, WAKE_RF_DEFAULT);
  }
 
  client.print("GET /json.htm?type=command&amp;param=udevice&amp;idx=");
  client.print(idx);
  client.print("&amp;nvalue=0&amp;svalue=");
  client.print(temp);
  client.print(";");
  client.print(hum);
  client.print(";0"); //Value for HUM_STAT. Can be one of: 0=Normal, 1=Comfortable, 2=Dry, 3=Wet
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.print(domoticz_server);
  client.print(":");
  client.println(port);
  client.println("User-Agent: Arduino-ethernet");
  client.println("Connection: close");
  client.println();
 
  delay(100);
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
 
 
  Serial.println("Odeslano na domoticz");
  delay(200);
 
 
}

je suis prêt a commander autre chose de simple et éfficace :slight_smile: .

Merci de votre aide.

Le premier code est semble t-il un code ARDUINO couplé à un ESP01 en commande AT., envoyant une requête à un host www.fais-le-toi-meme.fr. Peu de rapport avec DOMOTICZ.

Le deuxième code ESP8266 envoie des données à DOMOTICZ en JSON.
Cela peut se faire comme cela.

Tout cela n'a aucun rapport avec un NRF24L01.

Bonjour et merci de votre aide c'est cool.

Alors je commence à coincer.

J'ai trouvé un tuto pour installer esp8266-01 sur Arduino méga avec la bibliothèque wifiespAT, nikel sa fonctionne. GitHub - jandrassy/WiFiEspAT: Arduino networking library. Standard Arduino WiFi networking API over ESP8266 or ESP32 AT commands.
je peux coller les exemples de code de cette bibliothèque serveur,client tout marche.
Le problème est que niveaux code je coince j'ai essayé plein d’exemple json,Blynk et votre lien mais pour les adapter a ma config j'arrive pas :confused: 4 jours que suis dessus ma femme en pète lol :).

Donc je recherche un pro du code pour m'aider ,je vais être honnête même écrire mon code :slight_smile: ça serait sympa, sans rémunération bien sur :slight_smile: :slight_smile: .

Merci

Code arduino qui fonctionne sans esp8266.
ça pourrait intéresser quelqu’un qui c’est.

// pH
#define SensorPin A7            //pH meter Analog output to Arduino Analog Input 2
#define Offset 21.40            //deviation compensate
#define LED 13
#define samplingInterval 20
#define printInterval 80
#define ArrayLenth  40    //times of collection
int pHArray[ArrayLenth];   //Store the average value of the sensor feedback
int pHArrayIndex = 0;


// DHT 2302
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>

#define DHTPIN 2     // Digital pin connected to the DHT sensor
#define DHTTYPE    DHT22     // DHT 22 (AM2302)

DHT_Unified dht(DHTPIN, DHTTYPE);

uint32_t delayMS;


// Date and time  DS3231 RTC
#include "RTClib.h"

RTC_DS3231 rtc;

char daysOfTheWeek[7][12] = {"Dimanche", "Lundi", "Mardi", "Mercredi", "Jeudi", "Vendredi", "Samedi"};


//ec meter
#include <OneWire.h>
#include <DallasTemperature.h>
//************************* User Defined Variables ********************************************************//

int R1 = 1000;
int Ra = 25;        //Resistance of powering Pins
int ECPin = A0;
int ECGround = A1;
int ECPower = A4;

//*********** Converting to ppm [Learn to use EC it is much better**************//
float PPMconversion = 0.5;

//*************Compensating for temperature ************************************//
float TemperatureCoef = 0.019; //this changes depending on what chemical we are measuring

//********************** Cell Constant For Ec Measurements *********************//
float K = 13.23;

//************ Temp Probe Related *********************************************//
#define ONE_WIRE_BUS 10          // Data wire For Temp Probe is plugged into pin 10 on the Arduino
const int TempProbePossitive = 8; //Temp Probe power connected to pin 9
const int TempProbeNegative = 9;  //Temp Probe Negative connected to pin 8

OneWire oneWire(ONE_WIRE_BUS);// Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire);// Pass our oneWire reference to Dallas Temperature.

float Temperature = 10;
float EC = 0;
float EC25 = 0;
int   ppm = 0;

float raw = 0;
float Vin = 5;
float Vdrop = 0;
float Rc = 0;
float buffer = 0;



void setup()
{
  // pH
  Serial.begin(9600);
  Serial.println("PH meter");    //Test the serial monitor
  pinMode(LED, OUTPUT);

  // - DHT 2302
  //  Serial.begin(9600);
  // Initialize device.
  dht.begin();
  Serial.println(F("DHTxx Unified Sensor"));
  delay(10);


  // Date and time  DS3231 RTC
#ifndef ESP8266
  while (!Serial); // for Leonardo/Micro/Zero
#endif

  // Serial.begin(9600);

  //  delay(500); // wait for console opening

  if (! rtc.begin()) {
    Serial.println("Couldn't find RTC");
    while (1);
  }

  if (rtc.lostPower()) {
    Serial.println("RTC lost power, lets set the time!");
    // following line sets the RTC to the date & time this sketch was compiled
    rtc.adjust(DateTime(F(__DATE__), F(__TIME__)));
    // This line sets the RTC with an explicit date & time, for example to set
    // January 21, 2014 at 3am you would call:
    // rtc.adjust(DateTime(2014, 1, 21, 3, 0, 0));
    delay(10);
  }

  //ec meter

  //   Serial.begin(9600);
  pinMode(TempProbeNegative , OUTPUT);  //seting ground pin as output for tmp probe
  digitalWrite(TempProbeNegative , LOW); //Seting it to ground so it can sink current
  pinMode(TempProbePossitive , OUTPUT); //ditto but for positive
  digitalWrite(TempProbePossitive , HIGH);
  pinMode(ECPin, INPUT);
  pinMode(ECPower, OUTPUT); //Setting pin for sourcing current
  pinMode(ECGround, OUTPUT); //setting pin for sinking current
  digitalWrite(ECGround, LOW); //We can leave the ground connected permanantly

  delay(100);// gives sensor time to settle
  sensors.begin();
  delay(100);
  //** Adding Digital Pin Resistance to [25 ohm] to the static Resistor *********//
  // Consule Read-Me for Why, or just accept it as true
  R1 = (R1 + Ra); // Taking into acount Powering Pin Resitance

  Serial.println("Arduino EC-PPM measurments");
}



void loop(void)
{

  // Date and time  DS3231 RTC
  DateTime now = rtc.now();

  Serial.print(now.day(), DEC);
  Serial.print('/');
  Serial.print(now.month(), DEC);
  Serial.print('/');
  Serial.print(now.year(), DEC);
  Serial.print(" (");
  Serial.print(daysOfTheWeek[now.dayOfTheWeek()]);
  Serial.print(") ");
  Serial.print(now.hour(), DEC);
  Serial.print(':');
  Serial.print(now.minute(), DEC);
  Serial.print(':');
  Serial.print(now.second(), DEC);
  Serial.println();
  delay(500);

  // - DHT 2302
  // Delay between measurements.
  delay(delayMS);
  // Get temperature event and print its value.
  sensors_event_t event;
  dht.temperature().getEvent(&event);
  if (isnan(event.temperature)) {
    Serial.println(F("Error reading temperature!"));
  }
  else {
    Serial.print(F("Temperature Ext: "));
    Serial.print(event.temperature);
    Serial.println(F("°C"));

  }
  // Get humidity event and print its value.
  dht.humidity().getEvent(&event);
  if (isnan(event.relative_humidity)) {
    Serial.println(F("Error reading humidity!"));
  }
  else {
    Serial.print(F("Humidity Ext: "));
    Serial.print(event.relative_humidity);
    Serial.println(F("%"));
    delay(500);
  }
  {
    //ec meter

    GetEC();          //Calls Code to Go into GetEC() Loop [Below Main Loop] dont call this more that 1/5 hhz [once every five seconds] or you will polarise the water
    PrintReadings();  // Cals Print routine [below main loop]
    delay(20000);
  }
  // pH
  static unsigned long samplingTime = millis();
  static unsigned long printTime = millis();
  static float pHValue, voltage;
  if (millis() - samplingTime > samplingInterval)
  {
    pHArray[pHArrayIndex++] = analogRead(SensorPin);
    if (pHArrayIndex == ArrayLenth)pHArrayIndex = 0;
    voltage = avergearray(pHArray, ArrayLenth) * 5.0 / 1024;
    pHValue = -5.7 * voltage + Offset;
    samplingTime = millis();
  }
  if (millis() - printTime > printInterval)  //Every 800 milliseconds, print a numerical, convert the state of the LED indicator
  {
    Serial.print("Voltage:");
    Serial.print(voltage, 2);
    Serial.print("    pH value: ");
    Serial.println(pHValue, 1);

    printTime = millis();


  }
}

void GetEC()
{
  sensors.requestTemperatures();          // Send the command to get temperatures
  Temperature = sensors.getTempCByIndex(0); //Stores Value in Variable
  //************Estimates Resistance of Liquid ****************//
  digitalWrite(ECPower, HIGH);
  raw = analogRead(ECPin);
  raw = analogRead(ECPin); // This is not a mistake, First reading will be low beause if charged a capacitor
  digitalWrite(ECPower, LOW);

  //***************** Converts to EC **************************//
  Vdrop = (Vin * raw) / 1024.0;
  Rc = (Vdrop * R1) / (Vin - Vdrop);
  Rc = Rc - Ra; //acounting for Digital Pin Resitance
  EC = 1000 / (Rc * K);

  //*************Compensating For Temperaure********************//
  EC25  =  EC / (1 + TemperatureCoef * (Temperature - 25.0));
  ppm = (EC25) * (PPMconversion * 1000);
}



//***This Loop Is called From Main Loop- Prints to serial usefull info ***//
void PrintReadings()
{
  Serial.print("Rc: ");
  Serial.print(Rc);
  Serial.print(" EC: ");
  Serial.print(EC25);
  Serial.print(" Simens  ");
  Serial.print(ppm);
  Serial.print(" ppm  ");
  Serial.print(Temperature);
  Serial.println(" *C ");


}

double avergearray(int* arr, int number){
  int i;
  int max,min;
  double avg;
  long amount=0;
  if(number<=0){
    Serial.println("Error number for the array to avraging!/n");
    return 0;
  }
  if(number<5){   //less than 5, calculated directly statistics
    for(i=0;i<number;i++){
      amount+=arr[i];
    }
    avg = amount/number;
    return avg;
  }else{
    if(arr[0]<arr[1]){
      min = arr[0];max=arr[1];
    }
    else{
      min=arr[1];max=arr[0];
    }
    for(i=2;i<number;i++){
      if(arr[i]<min){
        amount+=min;        //arr<min
        min=arr[i];
      }else {
        if(arr[i]>max){
          amount+=max;    //arr>max
          max=arr[i];
        }else{
          amount+=arr[i]; //min<=arr<=max
        }
      }//if
    }//for
    avg = (double)amount/(number-2);
  }//if
  return avg;
}

je peux coller les exemples de code de cette bibliothèque serveur,client tout marche.

On est bien loin de DOMOTICZ avec ça ...

Tu as l'air de tenir absolument à ta config MEGA + ESP-01 ...
C'est ton choix, mais je ne vois pas l'intérêt.

Une solution à base de NRF24L01 serait de loin la plus simple. Pas de JSON, pas de HTML.

Ici deux capteurs température / humidité

Un capteur peut être multiple :
un-afficheur-pour-domoticz-ou-jeedom

Ce projet regroupe deux capteurs température, humidité plus un TFT.
De plus il reçoit l'heure de DOMOTICZ. Pas besoin de RTC donc.

Un autre ici :
un-thermometre-hygrometre-mysensors-sur

Et il faut une passerelle (NRF24L01) :

La passerelle se branche en USB comme le RFLINK. Son rôle est le même.

Donc je recherche un pro du code pour m'aider ,je vais être honnête même écrire mon code :slight_smile: ça serait sympa, sans rémunération bien sur :slight_smile: :slight_smile: .

Si tu n'as pas les connaissances pourquoi t'embarquer dans une pareille usine à gaz ?

Bonjour merci de vos réponses :slight_smile:

Alors j’ai trouvé un code que j’ai modifié et le miracle sa fonctionne le seul problème ses qu’au bout d’un certain temps l’info fige sûr domoticz.
je redémarre arduino et ça remarche.
J’ai dû supprimer des lignes deepsleep: ESP.deepSleep(30 * 1000000 * 60, WAKE_RF_DEFAULT);
sinon je pouvais pas téléverser.
Sa serait sympa si quelqu’un pouvait vérifier si je n’ai pas trop fait n’importe quoi.

Encore merci pour votre aide

/*
  Web client

 This sketch connects to a website (http://arduino.cc)
 using the WiFi module.

 created 13 July 2010
 by dlf (Metodo2 srl)
 modified 31 May 2012
 by Tom Igoe
 modified in Jul 2019 for WiFiEspAT library
 by Juraj Andrassy https://github.com/jandrassy
 */

#include <WiFiEspAT.h>

// Emulate Serial1 on pins 6/7 if not present
#if defined(ARDUINO_ARCH_AVR) && !defined(HAVE_HWSERIAL1)
#include <SoftwareSerial.h>
SoftwareSerial Serial1(6, 7); // RX, TX
#define AT_BAUD_RATE 9600
#else
#define AT_BAUD_RATE 115200
#endif

WiFiClient client;

// domoticz
const char * domoticz_server = "192.168.0.16";
const int   port = 8080;
int idx = 73; //IDX for virtual sensor, found in Setup -> Devices
int idx2 = 74; //IDX for virtual sensor, found in Setup -> Devices
int idx3 = 76; //IDX for virtual sensor, found in Setup -> Devices


// Elements pour pH

#define SensorPin A7            //pH meter Analog output to Arduino Analog Input 2
#define Offset 21.40            //deviation compensate
#define LED 13
#define samplingInterval 20
#define printInterval 80
#define ArrayLenth  40    //times of collection
int pHArray[ArrayLenth];   //Store the average value of the sensor feedback
int pHArrayIndex = 0;
float SensorPH = 0;


// Elements pour la sonde DHT

#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>    
#define DHTPIN 2
#define DHTTYPE DHT22    // DHT11 sinon
DHT dht(DHTPIN, DHTTYPE);
float hum = 0;
float temp = 0;


// Elements pour la sonde de température de l'eau

#include "OneWire.h"
#include "DallasTemperature.h"
//************ Temp Probe Related *********************************************//
#define ONE_WIRE_BUS 10          // Data wire For Temp Probe is plugged into pin 10 on the Arduino
const int TempProbePossitive = 8; //Temp Probe power connected to pin 9
const int TempProbeNegative = 9;  //Temp Probe Negative connected to pin 8

OneWire oneWire(ONE_WIRE_BUS);// Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire);// Pass our oneWire reference to Dallas Temperature.
float tempwater = 0;


// pH

float phVal() {
  static unsigned long samplingTime = millis();
  static unsigned long printTime = millis();
  static float pHValue,voltage;
  if(millis()-samplingTime > samplingInterval)
  {
      pHArray[pHArrayIndex++]=analogRead(SensorPin);
      if(pHArrayIndex==ArrayLenth)pHArrayIndex=0;
      voltage = avergearray(pHArray, ArrayLenth)*5.0/1024;
      pHValue = -5.7*voltage+Offset;
      samplingTime=millis();
  }
  if(millis() - printTime > printInterval)   //Every 800 milliseconds, print a numerical, convert the state of the LED indicator
  {

        
        printTime=millis();
  
  }
  return pHValue;
}




double avergearray(int* arr, int number){
  int i;
  int max,min;
  double avg;
  long amount=0;
  if(number<=0){
    Serial.println("Error number for the array to avraging!/n");
    return 0;
  }
  if(number<5){   //less than 5, calculated directly statistics
    for(i=0;i<number;i++){
      amount+=arr[i];
    }
    avg = amount/number;
    return avg;
  }else{
    if(arr[0]<arr[1]){
      min = arr[0];max=arr[1];
    }
    else{
      min=arr[1];max=arr[0];
    }
    for(i=2;i<number;i++){
      if(arr[i]<min){
        amount+=min;        //arr<min
        min=arr[i];
      }else {
        if(arr[i]>max){
          amount+=max;    //arr>max
          max=arr[i];
        }else{
          amount+=arr[i]; //min<=arr<=max
        }
      }//if
    }//for
    avg = (double)amount/(number-2);
  }//if
  return avg;
}
void setup() {
 // - DHT 2302

  dht.begin();

  Serial.begin(115200);
  while (!Serial);

  Serial1.begin(AT_BAUD_RATE);
  WiFi.init(Serial1);

  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println();
    Serial.println("Communication with WiFi module failed!");
    // don't continue
    while (true);
  }

  // waiting for connection to Wifi network set with the SetupWiFiConnection sketch
  Serial.println("Waiting for connection to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print('.');
  }
  Serial.println();
  Serial.println("Connected to WiFi network.");

  Serial.println("Starting connection to server...");
  if (client.connect(domoticz_server, port)) {
    Serial.println("connected to server");

  }
}

                                       
void loop()
{
 
  getData();
  senddata();

  // On récupère la température de la sonde DS18B20
  sensors.requestTemperatures();
  double dTempds = sensors.getTempCByIndex(0);
  
}
void getData()
{
  // Copy la température de l'humidity dans le moniteur série
  hum = dht.readHumidity();
  temp = dht.readTemperature();
 
  Serial.println();
  Serial.println("**********************************************");
  Serial.println("Humidity (%)\tTemperature (C)");
  Serial.print("\t");
  Serial.print(hum, 1);
  Serial.print("\t\t");
  Serial.print(temp, 1);
  Serial.println("\t\t");
  Serial.println("**********************************************");
  Serial.println();

  // Copy la température de l'eau dans le moniteur série
  tempwater = sensors.getTempCByIndex(0);
 
  Serial.println();
  Serial.println("**********************************************");
  Serial.println("Temperature (C)");
  Serial.print("\t");
  Serial.print(tempwater, 1);
  Serial.println("**********************************************");
  Serial.println();

  SensorPH = phVal(); 
}
void senddata()
{
  // Domoticz format /json.htm?type=command&amp;param=udevice&amp;idx=IDX&amp;nvalue=0&amp;svalue=TEMP;HUM;HUM_STAT
 
 
  while (!client.connect(domoticz_server, port)) {
    Serial.println("connection failed");
    Serial.println("nemuzu se pripojit na domoticz jdu spat");

  }
 
 
  client.print("GET /json.htm?type=command&param=udevice&idx=");
  client.print(idx);
  client.print("&nvalue=0&svalue=");
  client.print(temp);
  client.print(";");
  client.print(hum);
  client.print(";0"); //Value for HUM_STAT. Can be one of: 0=Normal, 1=Comfortable, 2=Dry, 3=Wet
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.print(domoticz_server);
  client.print(":");
  client.println(port);
  client.println("User-Agent: Arduino-ethernet");
  client.println("Connection: close");
  client.println();
  delay(100);
  
  while (!client.connect(domoticz_server, port)) {
    Serial.println("connection failed");
    Serial.println("nemuzu se pripojit na domoticz jdu spat");

  }
 
 
  client.print("GET /json.htm?type=command&param=udevice&idx=");
  client.print(idx2);
  client.print("&nvalue=0&svalue=");
  client.print(tempwater);
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.print(domoticz_server);
  client.print(":");
  client.println(port);
  client.println("User-Agent: Arduino-ethernet");
  client.println("Connection: close");
  client.println();
  delay(100);

   while (!client.connect(domoticz_server, port)) {
    Serial.println("connection failed");
    Serial.println("nemuzu se pripojit na domoticz jdu spat");

  }
 
 
  client.print("GET /json.htm?type=command&param=udevice&idx=");
  client.print(idx3);
  client.print("&nvalue=0&svalue=");
  client.print(SensorPH);
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.print(domoticz_server);
  client.print(":");
  client.println(port);
  client.println("User-Agent: Arduino-ethernet");
  client.println("Connection: close");
  client.println();
  delay(100);
  
  while (client.available()) {
    String line = client.readStringUntil('\r');
    Serial.print(line);
  }
 
 
  Serial.println("Odeslano na domoticz");
  delay(10000);
 
 
}

Bonjour

Sa avance pour mon code ses bon sa fonctionnent mes seulement un certain temp (5h a 6h) après arduino plante.
Si quelqu’un pourrais m 'aiguiller sa serait sympa.

merci :wink:

///////////////////////////////////////////////////////////////////////////////
//                            INCLUDE                                    
///////////////////////////////////////////////////////////////////////////////

#include <WiFiEspAT.h>
#include <Adafruit_Sensor.h>
#include <DHT.h>
#include <DHT_U.h>    
#include "OneWire.h"
#include "DallasTemperature.h"
#include <SoftwareSerial.h>
#include <Wire.h> 
#include <LiquidCrystal_I2C.h>
#include <OneWire.h>
#include <DallasTemperature.h>

///////////////////////////////////////////////////////////////////////////////
//                            EMUL SERIALL PINS 6/7                                   
///////////////////////////////////////////////////////////////////////////////

#if defined(ARDUINO_ARCH_AVR) && !defined(HAVE_HWSERIAL1)
SoftwareSerial Serial1(6, 7); // RX, TX
#define AT_BAUD_RATE 9600
#else
#define AT_BAUD_RATE 115200
#endif

///////////////////////////////////////////////////////////////////////////////
//                            ECRAN I2C                                   
///////////////////////////////////////////////////////////////////////////////

LiquidCrystal_I2C lcd(0x27,20,4);  // set the LCD address to 0x27 for a 16 chars and 2 line display

///////////////////////////////////////////////////////////////////////////////
//                            DOMOTICZ                                   
///////////////////////////////////////////////////////////////////////////////

WiFiClient client;
const char * domoticz_server = "192.168.0.16";
const int   port = 8080;
int idx = 73; //IDX for virtual sensor
int idx1 = 74; //IDX for virtual sensor
int idx2 = 76; //IDX for virtual sensor
int idx3 = 77; //IDX for virtual sensor

///////////////////////////////////////////////////////////////////////////////
//                            Définition des variables                                    
///////////////////////////////////////////////////////////////////////////////

// *******************
// Elements pour le pH
// *******************

#define SensorPin A7            //pH meter Analog output to Arduino Analog Input 2
#define Offset 21.60            //deviation compensate
#define samplingInterval 2000
#define ArrayLenth  40    //times of collection
#define relais_ph 13
int pHArray[ArrayLenth];   //Store the average value of the sensor feedback
int pHArrayIndex = 0;
float pHValue = 0;
float voltage = 0;

// *******************
// Elements pour la sonde DHT
// *******************

  #define DHTPIN 2
  #define DHTTYPE DHT22    
  DHT dht(DHTPIN, DHTTYPE);
  float hum = 0;
  float temp = 0;
  
// *******************
// Elements pour la sonde EC
// *******************

#define relais_ec 12
#define relais_ec2 11
//************************* User Defined Variables ********************************************************//

int R1 = 1000;
int Ra = 25;        //Resistance of powering Pins
int ECPin = A0;
int ECGround = A1;
int ECPower = A4;

//*********** Converting to ppm [Learn to use EC it is much better**************//
float PPMconversion = 0.5;

//*************Compensating for temperature ************************************//
float TemperatureCoef = 0.009; //this changes depending on what chemical we are measuring

//********************** Cell Constant For Ec Measurements *********************//
float K = 8.51;

//************ Temp Probe Related *********************************************//
#define ONE_WIRE_BUS 10          // Data wire For Temp Probe is plugged into pin 10 on the Arduino
const int TempProbePossitive = 8; //Temp Probe power connected to pin 9
const int TempProbeNegative = 9;  //Temp Probe Negative connected to pin 8

OneWire oneWire(ONE_WIRE_BUS);// Setup a oneWire instance to communicate with any OneWire devices
DallasTemperature sensors(&oneWire);// Pass our oneWire reference to Dallas Temperature.

float Temperature = 10;
float EC = 0;
float EC25 = 0;
int   ppm = 0;

float raw = 0;
float Vin = 5;
float Vdrop = 0;
float Rc = 0;
float buffer = 0;



// *******************
// Millis
// *******************
  
    // 1550000 = 30min
    // 3600000 = 1h
    // 5150000 = 1h30
    // 7200000 = 2h
    // 10800000 = 3h
    // 14400000 = 4h
    
#define INTERVAL_ec 7200000 //mesure
#define INTERVAL_ph 5150000 //pompe doseuse

unsigned long time_1 = 0;
unsigned long time_2 = 0;

///////////////////////////////////////////////////////////////////////////////
//                            SETUP                                    
///////////////////////////////////////////////////////////////////////////////

void setup() 
{
  
  lcd.init();                      
  lcd.backlight();
  dht.begin();
    
  pinMode (relais_ec, OUTPUT);
  pinMode (relais_ec2, OUTPUT);
   
  Serial.begin(115200);
  while (!Serial);

  Serial1.begin(AT_BAUD_RATE);
  WiFi.init(Serial1);

  if (WiFi.status() == WL_NO_MODULE) {
    Serial.println();
    Serial.println("Communication esp8266 failed!");
    // don't continue
    while (true);
  }

  // waiting for connection to Wifi network set with the SetupWiFiConnection sketch
  Serial.println("Waiting for connection to WiFi");
  while (WiFi.status() != WL_CONNECTED) {
    delay(1000);
    Serial.print('.');
  }
  Serial.println();
  Serial.println("Connected to WiFi network.");

  Serial.println("Starting connection to server...");
  if (client.connect(domoticz_server, port)) {
    Serial.println("connected to server");
  }
  
// *******************
//EC meter
// *******************  

  pinMode(TempProbeNegative , OUTPUT);  //seting ground pin as output for tmp probe
  digitalWrite(TempProbeNegative , LOW); //Seting it to ground so it can sink current
  pinMode(TempProbePossitive , OUTPUT); //ditto but for positive
  digitalWrite(TempProbePossitive , HIGH);
  pinMode(ECPin, INPUT);
  pinMode(ECPower, OUTPUT); //Setting pin for sourcing current
  pinMode(ECGround, OUTPUT); //setting pin for sinking current
  digitalWrite(ECGround, LOW); //We can leave the ground connected permanantly

  delay(100);// gives sensor time to settle
  sensors.begin();
  delay(100);
  //** Adding Digital Pin Resistance to [25 ohm] to the static Resistor *********//
  // Consule Read-Me for Why, or just accept it as true
  R1 = (R1 + Ra); // Taking into acount Powering Pin Resitance
}

///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////
//                            Programme principal                                    
///////////////////////////////////////////////////////////////////////////////
///////////////////////////////////////////////////////////////////////////////

void loop()
{

    if(millis() >= time_1 + INTERVAL_ec){
        time_1 +=INTERVAL_ec;
            digitalWrite(relais_ec, HIGH);
            digitalWrite(relais_ec2, HIGH);
            GetEC();
            delay(5000);
            digitalWrite(relais_ec, LOW);
            digitalWrite(relais_ec2, LOW);
    }
   
    if(millis() >= time_2 + INTERVAL_ph){
        time_2 +=INTERVAL_ph;

        injection_ph();
    }
  
// ******************* 
// Init capteur OneWire
// ******************* 

  sensors.requestTemperatures();
  Temperature =sensors.getTempCByIndex(0);

  
// *******************
// Lecture du DHT22 
// *******************

  hum = dht.readHumidity();
  temp = dht.readTemperature();

// *******************
// Lecture du PH
// ******************* 

  phVal();

// *******************
// Domoticz + Ecran i2c
// *******************

  senddata();
  lcdi2c();  

  delay(2000);
}

fichier 2

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                              LECTURE PH
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void phVal() 
{
         
  static unsigned long samplingTime = millis();

  if(millis()-samplingTime > samplingInterval)
  {
      pHArray[pHArrayIndex++]=analogRead(SensorPin);
      if(pHArrayIndex==ArrayLenth)pHArrayIndex=0;
      voltage = avergearray(pHArray, ArrayLenth)*5.0/1024;
      pHValue = -5.7*voltage+Offset;
      samplingTime=millis();
  }        
  return pHValue;
}

double avergearray(int* arr, int number){
  int i;
  int max,min;
  double avg;
  long amount=0;
  if(number<=0){
    Serial.println("Error number for the array to avraging!/n");
    return 0;
  }
  if(number<5){   //less than 5, calculated directly statistics
    for(i=0;i<number;i++){
      amount+=arr[i];
    }
    avg = amount/number;
    return avg;
  }else{
    if(arr[0]<arr[1]){
      min = arr[0];max=arr[1];
    }
    else{
      min=arr[1];max=arr[0];
    }
    for(i=2;i<number;i++){
      if(arr[i]<min){
        amount+=min;        //arr<min
        min=arr[i];
      }else {
        if(arr[i]>max){
          amount+=max;    //arr>max
          max=arr[i];
        }else{
          amount+=arr[i]; //min<=arr<=max
        }
      }//if
    }//for
    avg = (double)amount/(number-2);
  }//if
  return avg;
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                              LECTURE EC
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void GetEC()
{
  sensors.requestTemperatures();          // Send the command to get temperatures
  Temperature = sensors.getTempCByIndex(0); //Stores Value in Variable
  //************Estimates Resistance of Liquid ****************//
  digitalWrite(ECPower, HIGH);
  raw = analogRead(ECPin);
  raw = analogRead(ECPin); // This is not a mistake, First reading will be low beause if charged a capacitor
  digitalWrite(ECPower, LOW);

  //***************** Converts to EC **************************//
  Vdrop = (Vin * raw) / 1024.0;
  Rc = (Vdrop * R1) / (Vin - Vdrop);
  Rc = Rc - Ra; //acounting for Digital Pin Resitance
  EC = 1000 / (Rc * K);

  //*************Compensating For Temperaure********************//
  EC25  =  EC / (1 + TemperatureCoef * (Temperature - 25.0));
  ppm = (EC25) * (PPMconversion * 1000);
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                              INJECTION PH
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

  void injection_ph() 
  {

      bool ok;
          
    // Lecture ph
    ok = pHValue;
     
    // Si lecture correct
    if( ok ) {
                      
        // Si le ph est plus haut que 5.8
        if ( pHValue >= 5.8 ) {
             
            // On allume la pompe
            digitalWrite(relais_ph, HIGH);
            delay(3000);
            digitalWrite(relais_ph, LOW);

        }
         
    // Si lecture incorrect
    } else {
         
        // Dans le doute, on coupe la pompe
        digitalWrite(relais_ph, LOW);
         
    }
 
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                              DOMOTICZ
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void senddata()
{
  // Domoticz format /json.htm?type=command&amp;param=udevice&amp;idx=IDX&amp;nvalue=0&amp;svalue=TEMP;HUM;HUM_STAT 
  
  while (!client.connect(domoticz_server, port)) {
    Serial.println("connection failed");
    Serial.println("nemuzu se pripojit na domoticz jdu spat");

  }
 
  client.print("GET /json.htm?type=command&param=udevice&idx=");
  client.print(idx);
  client.print("&nvalue=0&svalue=");
  client.print(temp);
  client.print(";");
  client.print(hum);
  client.print(";0"); //Value for HUM_STAT. Can be one of: 0=Normal, 1=Comfortable, 2=Dry, 3=Wet
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.print(domoticz_server);
  client.print(":");
  client.println(port);
  client.println("User-Agent: Arduino-ethernet");
  client.println("Connection: close");
  client.println();
  delay(100);
  
  while (!client.connect(domoticz_server, port)) {
    Serial.println("connection failed");
    Serial.println("nemuzu se pripojit na domoticz jdu spat");

  }
  
  client.print("GET /json.htm?type=command&param=udevice&idx=");
  client.print(idx1);
  client.print("&nvalue=0&svalue=");
  client.print(Temperature);
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.print(domoticz_server);
  client.print(":");
  client.println(port);
  client.println("User-Agent: Arduino-ethernet");
  client.println("Connection: close");
  client.println();
  delay(100);

     while (!client.connect(domoticz_server, port)) {
    Serial.println("connection failed");
    Serial.println("nemuzu se pripojit na domoticz jdu spat");

  }

  client.print("GET /json.htm?type=command&param=udevice&idx=");
  client.print(idx2);
  client.print("&nvalue=0&svalue=");
  client.print(pHValue);
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.print(domoticz_server);
  client.print(":");
  client.println(port);
  client.println("User-Agent: Arduino-ethernet");
  client.println("Connection: close");
  client.println();
  delay(100);

     while (!client.connect(domoticz_server, port)) {
    Serial.println("connection failed");
    Serial.println("nemuzu se pripojit na domoticz jdu spat");

  }
 
  client.print("GET /json.htm?type=command&param=udevice&idx=");
  client.print(idx3);
  client.print("&nvalue=0&svalue=");
  client.print(EC25);
  client.println(" HTTP/1.1");
  client.print("Host: ");
  client.print(domoticz_server);
  client.print(":");
  client.println(port);
  client.println("User-Agent: Arduino-ethernet");
  client.println("Connection: close");
  client.println();
  delay(100);
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//                                              ECRAN I2C
//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

void lcdi2c()
{
  
  // Print a message to the LCD.

  lcd.setCursor(0,0);
  lcd.print("PH:");
  lcd.setCursor(3,0);
  lcd.print(pHValue ,1);
  lcd.setCursor(9,0);
  lcd.print("T:");
  lcd.setCursor(11,0);
  lcd.print(temp);
  lcd.setCursor(0,1);
  lcd.print("TE:");
  lcd.setCursor(3,1);
  lcd.print(Temperature);
  lcd.setCursor(9,1);
  lcd.print("EC:");
  lcd.setCursor(12,1);
  lcd.print(EC25);
}

//////////////////////////////////////////////////////////////////////////////////////////////////////////////////////