Tuya meter

Introduction

Ressemble beaucoup au TuYa TS0601_din sauf que celui ci permet de monter jusqu’à 80A. A l’heure où j’ai écris cet article il n’est pas reconnu nativement sur Z2M mais je vous montre l’astuce pour le remonter (très simple).

Fiche technique

TuYa Smart ZigBee Compteur d’énergie Monophasé 80A

Il se monte sur un support de type Din Rail , parfait pour le mettre sur un tableau éléctrique.

Remonte les informations en KWh, Wattmètre, Voltmètre, Ampèremètre sur du voltage 110V 220V et sur une fréquende de 50/60Hz

Permet aussi de jouer sur l’interrupteur On/Off et protège contre les surcharges.

Permet aussi de configurer une alarme et d’autre paramètre:

WARNING

On le rappellera jamais assez –> On travail sur du 220v on coupe le courant :D

Installation

Installation assez basique, bien suivre le schéma tout est bien expliqué :

Ne pas oublier de remettre le cache de protection.

Une notice très clair est fournit avec le produit :

Intégration sur Zigbee2mqtt

Comme je le disais au début de l’article, mon device n’était pas reconnu nativement par Z2M, après quelques recherches, il semblerait que le nom du fabriquant n’était pas le bon. Grace à la communauté https://github.com/Koenkk/zigbee2mqtt/issues/13097 et plus précisement à bootuz-dinamon.

J’ai pu l’intégrer facilement.

Comment l’intégrer dans Z2M ?

Sur la version 1.27.2 de koenkk/zigbee2mqtt (qui est la dernière à l’heure où j’écris cet article) mon device n’est pas reconnu. Si le votre est correctement reconnu vous n’avez rien à faire.

Si au contraire, comme moi, vous avez ce genre de message lors de l’appairage vous aurez besoin de faire la manipulation suivante :

PS : je ne fais que copier/coller sa solution, tout le crédit lui revient à bootuz-dinamon :)

1. appairage

Une fois connecté, effectuer l’appairage de l’objet.

—> 3 seconde sur le bouton de gauche, puis 3 seconde sur le bouton de droite.

2. Localiser le nom du fabriquant

Dans mon cas le nom du fabriquant est _TZE200_lsanae15

3. Créer le fichier avec le bon nom

Créer un fichier nommé TZE200_lsanae15.js dans votre dossier data

touch TZE200_lsanae15.js

Puis copier le contenu si dessous en remplacant _TZE200_lsanae15 par le nom de votre fabriquant (si différent) :

vi  TZE200_lsanae15.js
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 extend = require('zigbee-herdsman-converters/lib/extend');
const e = exposes.presets;
const ea = exposes.access;
const tuya = require("zigbee-herdsman-converters/lib/tuya");



const fzLocal = {
    tuya_xocadinrail_switch: {
        cluster: 'manuSpecificTuya',
        type: ['commandDataResponse', 'commandDataReport'],
        convert: (model, msg, publish, options, meta) => {
            for (const dpValue of msg.data.dpValues) {
                const value = tuya.getDataValue(dpValue);
                const dp = dpValue.dp;
                meta.logger.info(`RECEIVED DP #${dp} -- VALUE = ${value}`);

                switch (dp) {
                    case 16: // DPID that we added to common
                       return {   state: value ? 'ON' : 'OFF'};


                    case 1:
                        return {
                            energy: value / 100
                        };
                    case 6:
                     return {
                            current: ((value[4] | value[3] << 8) / 1000), voltage: ((value[1] | value[0] << 8) / 10), power: ((value[7] | value[6] << 8))
                        };

                    case 17:
                      const lookup = {
                       0: 'not set',
                       1: 'Over current threshold',
                       3: 'Over voltage threshold',
                                      };
                        return {
                            threshold_1: lookup[value[0]],
                            threshold1_value : (value[3] | value[2] << 8),
                            threshold_2: lookup[value[4]],
                            threshold2_value : (value[7] | value[6] << 8),
                    };

                      case 10:{
                          const lookup = {
                          0: 'clear',
                          1: 'over current threshold',
                          2: 'over power threshold',
                          4: 'over voltage threshold',
                          8: 'wrong frequency threshold',
                           };
                           return { alarm : lookup[value]} ;
                    }
                    case 18:{
                        meta.logger.warn(`zigbee-herdsman-converters:: NOT RECOGNIZED DP ` +
                            `#${dp} with data ${JSON.stringify(msg.data)} VALUE = ${value}`);
                            break;
                    }
                    default: {
                        meta.logger.warn(`zigbee-herdsman-converters:: NOT RECOGNIZED DP ` +
                            `#${dp} with data ${JSON.stringify(msg.data)} VALUE = ${value}`);
                            break;
                    }
                }
            }
        },
    },
};


const tzLocal = {
    state: {
        key: ['state'],
        convertSet: async (entity, key, value, meta) => {
            await tuya.sendDataPointBool(entity, 16, value === 'ON');
        },
    },
};


const definition = {
    fingerprint: [{
        modelID: 'TS0601',
        manufacturerName: '_TZE200_lsanae15'
    }],
    model: 'DAC2161C',
    vendor: 'Tuya',
    extend: extend.switch(),
    description: 'DIN Rail Smart Energy Meter',
    fromZigbee: [fzLocal.tuya_xocadinrail_switch, ],
    toZigbee: [tzLocal.state],
    configure: async (device, coordinatorEndpoint, logger) => {
        const endpoint = device.getEndpoint(1);
        await reporting.bind(endpoint, coordinatorEndpoint, ['genBasic']);
    },
    exposes: [e.switch().setAccess('state', ea.STATE_SET),
              e.voltage(),
              e.power(),
              e.current(),
              e.energy(),
              exposes.text('threshold_1', ea.STATE),
              exposes.text('threshold1_value', ea.STATE),
              exposes.text('threshold_2', ea.STATE),
              exposes.text('threshold2_value', ea.STATE),
              exposes.text('alarm', ea.STATE),

              ]

};

module.exports = definition;

4. Modifier votre configuration.yaml

Ajouter dans votre configuration.yaml

external_converters:
  - TZE200_lsanae15.js

5 Redémarrer Z2M

Une fois Zigbee2mqtt redémarré, vous aurez ceci:

Et sur Home assistant vous devriez avoir:

Intégration dans le tableau éléctrique

J’ai fais le choix de mettre mon TuYa tout à gauche car ce tableau secondaire est relié derrière un differentiel sur mon tableau principal.

Bien remettre le petit cache

Une fois l’installation complétement terminé monté cela donne ceci :

Automation

Dans mon cas, ce tableau éléctrique est situé dans une buanderie donc sujet à l’eau. J’ai plusieurs capteurs dans la buanderie qui me permet de détécté si une fuite d’eau est détécté.

Si une fuite d’eau est détécté, nous allons coupé l’électricité et couper l’arrivé d’eau (plus d’information sur la coupure d’eau ici https://blog.ravindra-job.fr/iot/hs-water-valve/)

On souhaite aussi recevoir une notification via Telegram et Alexa.

Pour se faire :

- id: waterleak_buanderie
  alias: waterleak_buanderie
  description: 'Couper le courant et l arrivée d eau en cas d innondation'
  trigger:
    - type: moist
      platform: device
      device_id: 5c0d2a610f39b954a4c21afd9149874f
      entity_id: binary_sensor.waterleak_buanderie_water_leak
      domain: binary_sensor
  condition: []
  action:
  - service: notify.telegram_groupe # Notification Telegram (plus d'information ici https://blog.ravindra-job.fr/iot/hs-motion-telegram/)
    data_template:
      title: 🌊Home assistant💦
      message: Innondation détécté par le capteur water leak {{ trigger.to_state.attributes.friendly_name }}
  - service: shell_command.alexa_dynamic # Notification Alexa (plus d'information ici https://blog.ravindra-job.fr/iot/domoticz-alexa//)
    data:
      message: Attention%20innondation%20détéctée%20dans%20la%20buanderie
      location: desk
  - type: turn_off
    device_id: ce7d91d836ce45653592edea85de0039
    entity_id: switch.valve_eau_chaude_buanderie # On coupe l'eau chaude
    domain: switch
  - type: turn_off
    device_id: 72e2fce50c79274a8b277cb90644314f
    entity_id: switch.valve_eau_froide_buanderie # On coupe l'eau froide
    domain: switch
  - type: turn_off
    device_id: 7bac864b90982a3276dd5859f557f7c5
    entity_id: switch.tuya_meter80_01_sous_sol # On disjoncte le tableau éléctrique de la buanderie
    domain: switch

Si vous voulez plus de scripts Home assistant ou sur la domotique vous pouvez voir mes repos à ce sujet : https://github.com/ravindrajob/