TLC2206ZB Niveau d'eau Zigbee / zigbee2mqtt

Bonjour à tous.

Aprés avoir cherché pendant un bon moment et à défaut de solution plug and play je me suis lancé sur sa:

Sur les commentaires il y a un imprim ecran de l’interface zigbee2mqtt alors je me suis dit je tante.
Connection facile mais bien sur matériel non reconnu.
Je suis parti a la recherche de la réalisation de convertisseur et là j’étais un peu dans le mur jusqu’a ce que je tombe sur:

Et là cadeau:

You’ll need to add an external converter to Z2M:

Create a file named "TZE200.js" and put it in the same directory as your Z2M configuration.yml file
Use the text below as the content for TZE200.js
Add TZE200.js on the external converters tab to Z2M's settings
Restart Z2M

TZE200.js contents:

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;

Avec sa la magie opère:

Et coté Jeedom ca donne:

image

Dans les détails:
Réglage du point bas jusqu’a 2 m
Réglage du point au mini 10cm
réglage d’une alerte en point bas
reglage d’une alerte en point haut

De mon coté je compte utiliser ce truc pour le niveau d’eau de ma piscine.
D’origine c’est prévu pour le niveau de hauteur d’eau dans les citernes.

En espérant que ca vous serve.

Et si jamais vous avez vos entrées chez Zigbee2mqtt ??? vous pouvez leur souffler d’intégrer ce convertisseur ?

Jeedomez vous bien :grinning:

4 « J'aime »

Excellent!

Allez un blague:
Pour tester le truc aujourd’hui le truc fonctionne pour suivre le niveau d’eau…
De la gamelle du chien.

J’étais à deux doigts de déclencher un sms à ma fille sur le niveau bas mais je me suis dit ça risque de faire trop :joy:

Après c’est quand même 35€
on en avait parlé ici : Recherche un capteur de niveau d eau de cuve zigbee

moi j’ai acheté ça: Transducteur de capteur de pression, transmetteur pour eau, huile, carburant, gaz, air, capteur céramique DC 5V, 5-300psi en option - AliExpress 1420
je dois encore faire le montage avec un arduino et mysensors, quand j’aurai le temps…

Salut !

J’ai des cuves pour lesquelles j’ai tenté tant bien que mal de mesurer la hauteur du niveau d’eau avec des ESP32 + capteur infrarouge étanche ; mais le résultat était pas ouf…
j’ai mis en stand-by en attendant le printemps mais en lisant ton article, j’ai craqué et commandé ton capteur ! :blush:

Merci beaucoup pour ce partage ! @Sportback

A+

1 « J'aime »

Perso j’utilise une sonde de pression prévue pour.

Antoine

Quel modèle ? tu installes la sonde au fond de la cuve ?

Hello !

Aussitôt reçue, aussitôt installée :slight_smile:

J’ai taillé un bouchon d’une de mes cuves à la dremel pour insérer proprement le capteur et visser de l’autre coté.



Le capteur est remonté instannément sur Z2M ; juste un peu galéré avec le converter car celui du Github n’a pas fonctionné ; je suis reparti du tiens du coup @Sportback !

Seul défaut, le produit remonte à trop haute fréquence sur MQTT :
image

ça change de mon ESP32 qui remontait 1x toute les 10 minutes ^^

Est ce que tu sais comment utiliser les rapports de Z2M pour réduire la fréquence ?

En tout cas, je suis prêt pour cet été :slight_smile: !

Tout à fait d accord avec toi.
J ai du coup le même soucis que toi…

J ai vu que sous mqtt il y a moyen de brider le nombre de messages mais j ai pas encore suffisamment avancé pour avoir la soluce.

Si tu trouves fait suivre :wink:.

Plan B tu met l alimentation de la jauge derrière une prise commandée qui alimente ton truc toutes les heures pendant 5 minutes…?

Etes-vous content de la précision/qualité des mesures ?

J’avais fabriqué moi même à peu près l’équivalent avec mysensors (lien ici : What did you build today (Pictures) ? | MySensors Forum) mais mais cuve à fuel avait des formes de renfort plastic à l’intérieur qui provoquaient des rebonds du sonar ultrasonic

Difficile de te donner un vrai retour d’expérience car mes cuves sont vides en hiver.

il y a un tout petit fond et le relai envoi toujours la même valeur : 0.03 ou 0.04.
Donc ça semble assez juste

je te fais un retour en Mars dés que je commence à stocker l’eau.

1 « J'aime »

Bon, j’ai fait un truc:

1/ scenario récurent tt les 30 minutes:

2/ Virtuel:

→ Tu te retrouves avec :

Il y a moyen de faire mieux au niveau de l’affichage…

Pourquoi tu as fait un virtuel ?
J’ai constaté que lorsqu’on décoche « activer », l’affichage sur le dashboard disparait (donc uniquement affiché 5 minutes toutes les 30 minutes) et peut importe l’état du « visible » → Donc j’ai décoché…

image

Avec cette combine ça te permet de diviser par 5 le nombre de messages…

Pas le top mais bon :hugs:

1 « J'aime »

Bonjour, c’est exactement ce que je voudrai faire mais je ne saisis pas bien dans quel dossier mettre le fichier et comment le déclarer dans z2m ? Merci d’avance pour vos lumières :grinning:

Tu créer un fichier en .js ( TZE200.js en l’occurrence ici ) que tu places , à l’aide de l’éditeur de fichier de Jeedom dans :

html / Plugins /zigbee2mqtt / data / zigbee2mqtt .

Ensuite , via le plugin zigbeelinker , tu ouvres l’interface Zigbee2mqtt / paramètres / convertisseurs externes et tu rajoute TZE200.js .

Tu redémarres le plugin .

Merci beaucoup :smiling_face:

1 « J'aime »

Methode decrite pour une version 1.42 de Zigbee2mqtt .

Pour un Z2M en 2.0 et + , dans le dossier html/plugins/zigbee2mqtt/data/zigbee2mqtt créer un répertoire " external_converters " , y placer le/les convertisseurs personnalisés ( les .js ) , redémarrer Z2M . IIs seront automatiquement chargés .

Bonjour,
vous avez l,image du produit?
merci

Menu :
/ Plugin
/Protocole domotique
/Zigbee
/Configuration