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/