contrôler ma consommation d'eau

Enfin ma consommation d’eau connectée

Après plusieurs tentatives, relatées dans quelques articles ces dernières années, j’ai enfin ma consommation d’eau connectée.

Beaucoup me diront que c’est un peu gadget car il suffit d’aller voir le compteur et faire ses relevés soi-même ou attendre la facture. Mais connecter son compteur d’eau de ville peut avoir un autre avantage, la détection de fuites.

Il faut dire que j’ai tenté plusieurs fois de mettre en place une solution pour avoir une remontée de l’information de consommation d’eau dans Jeedom.

Et cette fois-ci, c’est la bonne!

N’ayant pas la chance d’avoir un compteur à impulsions car la Régie des Eaux n’a pas l’intention d’en mettre, j’ai dû trouver un autre moyen.

Oui, j’aurais pu mettre en second compteur, en choisissant un modèle à impulsions, dans le garage mais je souhaitais aussi contrôler la consommation d’eau de l’arrosage ainsi que de la piscine. Le départ de ces deux lignes partent du compteur qui est dehors et non du garage.

J’avais tout d’abord tenté le capteur optique pour contrôler l’aiguille du compteur, sujet abordé ici, mais sans succès. Parfait sur le papier, mais malheureusement, pas fonctionnel dans la réalité.

J’ai donc orienté mon choix sur un débit-mètre à effet Hall ayant pour petit nom YF-B6.

Cet appareil est capable d’encaisser la pression de l’eau de ville et après plusieurs mois d’hésitation, j’ai demandé conseil à mon voisin plombier. Ce dernier m’a dit qu’il n’y avait pas de problèmes et il l’a installé en 10 minutes.

Il ne restait plus qu’à le brancher à une petite carte wemos pour récupérer les informations et les transmettre à Jeedom en MQTT.

Schéma de cablage

Programmation

J’ai ensuite cherché sur le net si un code Arduino existait déjà pour récupérer les données du capteur. J’ai ensuite adapté le code pour y intégrer la transmission avec le protocole MQTT dont voici le rendu final où quelques adaptations seront à prévoir en fonction de votre configuration WIFI.

#include <ESP8266WiFi.h>
#include <PubSubClient.h>


// Update these with values suitable for your network.
const char* ssid = ""; //Replace with your SSID
const char* password = ""; //Replace with your WIFI password
const char* mqtt_server = ""; //Replace with the I.P of the computer where MQTT Mosquitto is installed
const char* mqtt_username = ""; //Replace with the username you used in the setup of MQTT on your computer
const char* mqtt_password = "";//Replace with the MQTT password you used when you set up MQTT on your computer
const char* clientID = "wemosXXXXX";
#define waterflow_topic "wemosXXXX/waterflow"  //Topic warterflow
WiFiClient wifiClient;
PubSubClient client(mqtt_server, 1883, wifiClient);
long lastMsg = 100;

// Defines variables for YFB6
int X;
int Y;
float TIME = 0;
float FREQUENCY = 0;
float WATER = 0;
float TOTAL = 0;
float LS = 0;
const int input = D2;



void setup_wifi() {
  delay(10);
  // We start by connecting to a WiFi network
  Serial.println();
  Serial.print("Connecting to ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);

  while (WiFi.status() != WL_CONNECTED) 
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");
  Serial.println("IP address: ");
  Serial.println(WiFi.localIP());
  Serial.println(WiFi.getHostname());

  // Connect to MQTT Broker
  // client.connect returns a boolean value to let us know if the connection was successful.
  // If the connection is failing, make sure you are using the correct MQTT Username and Password (Setup Earlier in the Instructable)
  if (client.connect(clientID, mqtt_username, mqtt_password)) {
    Serial.println("Connected to MQTT Broker!");
  }
  else {
    Serial.println("Connection to MQTT Broker failed...");
  }
}

void reconnect() {
  // Loop until we're reconnected
  while (!client.connected()) {
    Serial.print("Attempting MQTT connection...");
    // Attempt to connect
    if (client.connect("arduinoClient_waterflow_sensor")) {
      Serial.println("connected");
    } else {
      Serial.print("failed, rc=");
      Serial.print(client.state());
      Serial.println(" try again in 5 seconds");
      // Wait 5 seconds before retrying
      delay(5000);
    }
  }
}
 
void setup()
{
  Serial.begin(115200);
  setup_wifi(); 
  client.setServer(mqtt_server, 1883); 
  delay(2000);
  pinMode(input,INPUT);
}

void loop()
{
  if (!client.connected()) {
    reconnect();
  }
  client.loop();
  X = pulseIn(input, HIGH);
  Y = pulseIn(input, LOW);
  TIME = X + Y;
  FREQUENCY = 1000000/TIME;
  WATER = FREQUENCY/7.5;
  LS = WATER/60;
  if(FREQUENCY >= 0)
  {
  if(isinf(FREQUENCY))
  {

  }
  else
  {
  TOTAL = TOTAL + LS;
  Serial.println(TOTAL);
  client.publish(waterflow_topic, String(TOTAL).c_str());
  TOTAL = 0;
  }
  }
  delay(1000);
}

Intégration dans jeedom

J’utilise le plugin jMQTT pour récupérer les informations transmises.

Suite à la création de l’équipement, dès qu’une transmission est effectuée avec une valeur, la commande water flow sera créée. Attention, il faut permettre la répétition de la valeur même si identique dans la configuration de la commande (roue crantée à côté de la commande) pour qu’il mette bien à jour à chaque transmission.

Enfin, un petit scénario qui additionne la valeur transmise à la valeur précédente et le tour est joué. J’ai pour ma part créé un virtuel où un scenario stocke le calcul à chaque transmission comme ceci:

Et voici le résultat dans le résumé visible à partir de la page synthèse

Je peux maintenant clore ce sujet et je suis très content d’avoir enfin ma consommation d’eau domotisée.

J’écrirai prochainement un article pour expliquer comment j’ai mis en place une solution pour détecter d’éventuelles fuites sur le réseau ainsi que le dossier suivant, le routeur solaire maison que je compte réaliser.

Publié le 7 février 2023
Mis à jour le 1 juillet 2024