Capteur de niveau d'eau Zigbee (pour cuve)

Bonjour,

Cela faisait plusieurs mois que je recherchais un capteur/sonde en Zigbee pour connaitre le niveau de remplissage de ma cuve de récupération d’eau.
Je sais que plusieurs tuto existent à base d’ESP … Mais je recherchais un module tout fait plug’n’play, et ne voulais pas me lancer dans du « bricolage ».

J’ai fini par trouver cette sonde :

Acheté sur Ali pour une 50aine d’euros (dispo aussi sur Amazon)
Il existe en diverses variantes : Zigbee, Wifi, autonome avec affichage déporté, solaire, …

Je l’ai intégré à Z2M via un convertisseur externe.
Il sera surement intégré de base dans une prochaine version :

Voici les données remontées dans Z2M :

Et dans HA :

Il suffit de paramétrer la hauteur d’installation de la sonde par rapport au fond de la cuve, et la hauteur correspondant au niveau max de l’eau, et c’est tout.

Ca fonctionne plutôt bien. Les valeurs remontées sont assez justes.

Je l’ai installé dans ma cuve sur un support en équerre que j’ai fabriqué à partir de chutes de panneaux de plastique :

Si on ouvre le boitier, tout est étanche. Le PCB est isolé/noyé dans de la résine :

Le seul soucis c’est ça :

Avec le couvercle en acier de 5mm, le signal Zigbee ne passe plus ! (je m’y attendais un peu :pensive:…)

Si j’entrouvre le couvercle de moitié, c’est bon, ça passe…
Je vais donc ajouter une antenne déportée dans le regard de branchement (en plastique) qui se trouve 2m à côté.

Mis à part ça, je suis satisfait de la sonde. :+1:

6 « J'aime »

Très intéressant !!
Par contre, il doit être alimenté en continue par un transfo, n’est ce pas ?
Pour ton pb, une autre solution serait de mettre au niveau du sol pas très loin un appareil zigbee qui ferait relai…

L’avantage d’un ESP par contre est qu’il peut être en sommeil et réveillé à intervalle régulier pour permettre de fonctionner sur pile. Enfin l’esp peut être déporté de la sonde.

Oui il est alimenté en continu via un transfo 9V.
Mais je l’ai branché sur une prise commandée par interrupteur. Il ne s’allume que quand j’active la pompe de la cuve.

J’ai déjà essaye de mettre une prise ZigBee, à côté dans le regard, mais sans succès non plus.
Il faut dire qu’en plus du couvercle en acier, la sonde se trouve à environ 1m sous terre …

Salut,
C’est une chose qui m’interesserai surtout par rapport a ma cuve exterieur 1000 litres pour mon arrosage automatique. Est-ce que ton système existe en 12V ou 5V ?
A ce jour je n’ai pas trouvé de capteur de niveau de cuve.
En attendant j’avait pensé à un système utilisant un capteur fuite d’eau (Tuya-Capteur de fuite d'eau WiFi Zigbee, détecteur de fuite d'eau d'inondation, alarme, application Smart Life, surveillance à distance, maison - AliExpress 30) soudé sur fils étanches à un capteur de niveau d’eau (EGBO-Capteur de niveau d'eau liquide PP, flotteur horizontal, interrupteur vers le bas, 52mm, 1PC - AliExpress 502) lui-même fixé dans la cuve.
Une fois le flotteur dans le vide à un niveau déterminé, je recois une alarme manque d’eau quand il reste moins de 100 Litres (sur les 1000).
J’ignore si cette idée peut aider.
Cela étant dit, s’il existe une solution toute faite en zigbee pas trop chère je suis preneur :wink:, sachant que ce système pourrait être alimenté par un panneau solaire régulé a 12V et 5V en USB

Bonjour alju,

pourrais-tu stp nous décrire en détail comment tu as fait pour le faire remonter dans Z2M via un convertisseur externe?

Il y a pas mal de tutos pour les convertisseurs externes, mais en résumé il faut faire ça :

  1. Créer un fichier pour le convertisseur externe.
    Je l’ai nommé « ExtConverter_TankLevelMonitor.js »
  2. Editer le fichier et y coller ce code :
const fz = require("zigbee-herdsman-converters/converters/fromZigbee");
const tz = require("zigbee-herdsman-converters/converters/toZigbee");
const exposes = require("zigbee-herdsman-converters/lib/exposes");
const reporting = require("zigbee-herdsman-converters/lib/reporting");
const {} = require("zigbee-herdsman-converters/lib/modernExtend");
const e = exposes.presets;
const ea = exposes.access;
const tuya = require("zigbee-herdsman-converters/lib/tuya");
const utils = require("zigbee-herdsman-converters/lib/utils");

const dp = {
  instalationHeight: 19,
  liquidDepthMax: 21,
  maxSet: 7,
  miniSet: 8,
};

const tzdatapoints = {
  key: [
    "installation_height",
    "liquid_depth_max",
    "max_set",
    "mini_set",
  ],
  convertSet: async (entity, key, value, meta) => {
    switch (key) {
      case "installation_height": {
        await tuya.sendDataPointValue(entity, dp.instalationHeight, value);
        break;
      }
      case "liquid_depth_max": {
        await tuya.sendDataPointValue(entity, dp.liquidDepthMax, value);
        break;
      }
      case "max_set": {
        await tuya.sendDataPointValue(entity, dp.maxSet, value);
        break;
      }
      case "mini_set": {
        await tuya.sendDataPointValue(entity, dp.miniSet, value);
        break;
      }
    }
  },
};

const definition = {
  // Since a lot of TuYa devices use the same modelID, but use different datapoints
  // it's necessary to provide a fingerprint instead of a zigbeeModel
  fingerprint: [
    {
      // The model ID from: Device with modelID 'TS0601' is not supported
      // You may need to add \u0000 at the end of the name in some cases
      modelID: "TS0601",
      // The manufacturer name from: Device with modelID 'TS0601' is not supported.
      manufacturerName: "_TZE200_lvkk0hdg",
    },
  ],
  model: "TS0601_tlc2206zb",
  vendor: "TuYa",
  whiteLabel: [
    {
      vendor: "EPTTECH",
      model: "TLC2206-ZB",
    },
  ],
  description: "EPTTECH Tank Level Monitor Zigbee",
  fromZigbee: [tuya.fz.datapoints],
  // toZigbee: [tuya.tz.datapoints],
  toZigbee: [tzdatapoints],
  onEvent: tuya.onEventSetTime, // Add this if you are getting no converter for 'commandMcuSyncTime'
  configure: tuya.configureMagicPacket,
  exposes: [
    // Here you should put all functionality that your device exposes
    e
      .numeric("liquid_level_percent", ea.STATE)
      .withUnit("%")
      .withDescription("Liquid level percentage"),
    e
      .numeric("liquid_depth", ea.STATE)
      .withUnit("m")
      .withDescription("Liquid Depth"),
    e
      .enum("liquid_state", ea.STATE, ["low", "normal", "high"])
      .withDescription("Liquid State"),

    e
      .numeric("installation_height", ea.STATE_SET)
      .withUnit("mm")
      .withDescription("Height from sensor to tank bottom")
      .withValueMin(100)
      .withValueMax(3000)
      .withValueStep(1),
    e
      .numeric("mini_set", ea.STATE_SET)
      .withUnit("%")
      .withDescription("Liquid minimal percentage")
      .withValueMin(0)
      .withValueMax(100)
      .withValueStep(1),
    e
      .numeric("max_set", ea.STATE_SET)
      .withUnit("%")
      .withDescription("Liquid max percentage")
      .withValueMin(0)
      .withValueMax(100)
      .withValueStep(1),
    e
      .numeric("liquid_depth_max", ea.STATE_SET)
      .withUnit("mm")
      .withDescription("Height from sensor to liquid level")
      .withValueMin(100)
      .withValueMax(2000)
      .withValueStep(1),
  ],
  meta: {
    // All datapoints go in here
    tuyaDatapoints: [
      [22, "liquid_level_percent", tuya.valueConverter.raw],
      [2, "liquid_depth", tuya.valueConverter.divideBy100],
      [
        1,
        "liquid_state",
        tuya.valueConverterBasic.lookup({ low: 1, normal: 0, high: 2 }),
      ],
      [19, "installation_height", tuya.valueConverter.raw],
      [7, "max_set", tuya.valueConverter.raw],
      [8, "mini_set", tuya.valueConverter.raw],
      [21, "liquid_depth_max", tuya.valueConverter.raw],
    ],
  },
  extend: [
    // A preferred new way of extending functionality.
  ],
};

module.exports = definition;
  1. Déposer ce fichier dans le dossier de Z2M ou dans un sous-dossier dédié.
    J’ai tous mes convertisseurs dans « /config/zigbee2mqtt/external_converters »
  2. Editer le « configuration.yaml » de Z2M (pas celui de Home Assistant), y ajouter la rubrique pour les convertisseurs et le chemin vers ton fichier.
    Chez moi :
external_converters:
  - external_converters/ExtConverter_TankLevelMonitor.js
  1. Redémarrer Z2M
3 « J'aime »

Tu peut facilement déconnecter l’antenne pour pouvoir la déporter ? Ou va falloir gratter l’epoxi? :sweat_smile:
Jaurai bien fait pareil avec ma cuve de fuel si seulement c’était pas inflammable…

Bonjour alju,

cela a fonctionné parfaitement et du premier coup ! Tu es incroyable !! Merci pour ton apport ! C’est grace à des gens comme toi que l’utilisation de HomeAssistant devient un plaisir :heart_eyes:

Je n’ai pas encore fait la modif, mais je vais laisser le connecteur noyé dans la résine pour rester bien étanche.
A l’autre extrémité du câble, il y a une antenne plate collée sur la paroi intérieure du boîtier. Je vais plutôt couper à ce niveau-là et souder l’extension directement sur le câble.

De rien ami du 67 :slight_smile:
(si ton pseudo est ton code postal, on est juste à côté … )

Tu a trouvé des exemples de gens qui ont fait une pareille modif ? Car le changement d’impédance due à un câble rallongé risque peut etre de te créer quelques problèmes. Après, ça ira sûrement, mais si jamais tu perds en qualité de signal, ça peut être un point à vérifier.

C’est en effet bien le cas! Nous sommes voisins :smiley:

Par contre je n’arrive plus à l’appairer. Il est reconnu mais l’interview de l’appareil n’arrive pas au bout.

Je n’ai plus de valeurs…
et je ne trouve rien dans les logs


Bizarre,
Je n’ai pas eu de soucis.
Supprime le de Z2M, débranche/rebranche la sonde et réappaire la

Bonjour,
si tu as un bouton sur l’appareil, tu peux cliquer dessus toutes les 2 sec pour garder l’appareil allumé, pendant l’appairage. À faire jusqu’à que l’appairage soit fini.

C’est ce que j’ai fait mais rien n’y fait…

Egalement essayé ceci, en vain…

J’ai redémarré Z2M et ca fonctionne à nouveau ! J’avais pourtant tenté de redémarrer HA, mais pas spécifiquement Z2M. Bizarre…

Ca me faisait des truc étranges de ce genre la, les premières fois ou j’ai essayé d’appairer des dispositifs Zigbee à Z2MQTT. Chez moi le problème venait du fait que je ne renommait pas correctement mes dispositifs. J’utilisais des espaces et des caractère inadaptés (é-è-à-ç…) dans les noms, puis activait « Modifier l’ID de l’entité sous Home Assistant ». Grosse erreur de débutant. Donc je t’invite à checker l’ID de ton dispositif, on est jamais à l’abri d’une erreur aussi bête, et c’est généralement pas le premier truc qu’on vérifie…

1 « J'aime »

@alju : tu nous tiendras au courant de l’avancée de ta modif concernant l’antenne. Je vais procéder au montage de ma sonde ce week-end si je trouve le temps. Chez moi le couvercle est en plastique, à voir si cela fonctionne. Sinon j’essayerai probablement d’y mettre une prise Zigbee dans un boitier etanche dans la rehausse de cuve directement. A voir. Et sinon, ce sera rallonge de l’antenne comme chez toi.

Quel est ton avis sur le fait que l’info de niveau max ne soit pas prise en compte? cela ne change rien à la valeur de remplissage en pourcentage. Je vais probablement créer un capteur avec une règle de trois en relevant les valeurs de profondeur mesurées par la sonde à vide et à plein (ma cuve étant via mon arrosage auto assez rapidement « vidable »)