UNPKG

@willieee802/zigbee-herdsman-converters

Version:
1,905 lines 78.5 kB
"use strict"; var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) { if (k2 === undefined) k2 = k; var desc = Object.getOwnPropertyDescriptor(m, k); if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) { desc = { enumerable: true, get: function() { return m[k]; } }; } Object.defineProperty(o, k2, desc); }) : (function(o, m, k, k2) { if (k2 === undefined) k2 = k; o[k2] = m[k]; })); var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) { Object.defineProperty(o, "default", { enumerable: true, value: v }); }) : function(o, v) { o["default"] = v; }); var __importStar = (this && this.__importStar) || function (mod) { if (mod && mod.__esModule) return mod; var result = {}; if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k); __setModuleDefault(result, mod); return result; }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); /* eslint-disable max-len */ /* eslint-disable no-multi-spaces */ const exposes = __importStar(require("../lib/exposes")); const globalStore = __importStar(require("../lib/store")); const reporting = __importStar(require("../lib/reporting")); const fromZigbee_1 = __importDefault(require("../converters/fromZigbee")); const constants_1 = require("../lib/constants"); const ota = __importStar(require("../lib/ota")); const buffer_1 = require("buffer"); const logger_1 = require("../lib/logger"); const zigbee_herdsman_1 = require("@willieee802/zigbee-herdsman"); const ea = exposes.access; const e = exposes.presets; const METER_ID_CLUSTER = "haMeterIdentification"; // 0x0B01 const CLUSTER_ELE = "haElectricalMeasurement"; // 0x0B04 const CLUSTER_MET = "seMetering"; // 0x0702 const CLUSTER_TIC = "manuSpecificGmmts"; // 0xFF42 const STRING = "string"; const NUMBER = "numeric"; const NUM_RW = "read/write numeric"; const ENUM = "enum"; const TIME = "date"; const TRANSLATION_EN = "ENGLISH"; const TRANSLATION_FR = "FRANCAIS"; const DEFAULT_POLL_INTERVAL = 120; const C = { ANY: "AUTO", BASE: "BASE", HCHP: "HCHP", EJP: "EJP", TEMPO: "TEMPO", }; const E = { ANY: "AUTO", MONO: "MONOPHASE", TRI: "TRIPHASE", }; const T = { ANY: "AUTO", HIST: "HISTORIQUE", STD: "STANDARD", }; const modeTICEnum = ["HISTORIQUE", "STANDARD", "AUTO"]; const modeElecEnum = ["MONOPHASE", "TRIPHASE", "AUTO"]; const modeContractEnum = ["AUTO", "BASE", "HCHP", "EJP", "TEMPO", "PRODUCTEUR"]; const ticmeterOptionsFRTr = { 0: { descEN: `Refresh rate for static values (those with refresh buttons). Default: ${DEFAULT_POLL_INTERVAL} s`, descFR: `Temps d'actualisation des valeurs statiques (celles qui possèdent des boutons refresh). Par défaut: ${DEFAULT_POLL_INTERVAL} s`, }, 1: { descEN: "Linky TIC communication mode. Defaults to AUTO mode. To be used in case of problem", descFR: "Mode de communication TIC du Linky. Par défaut en mode AUTO. À utiliser en cas de problème", }, 2: { descEN: "Current electricity contract on Linky. Defaults to AUTO mode. Displays the correct entities. To be used in case of problem", descFR: "Contrat électrique actuel sur le Linky. Par défaut en mode AUTO. Permet d'afficher les bonnes entités. À utiliser en cas de problème", }, 3: { descEN: "Linky electrical mode. Defaults to AUTO mode. To be used in case of problem", descFR: "Mode électrique du Linky. Par défaut en mode AUTO. À utiliser en cas de problème", }, 4: { descEN: "Producer mode: displays electricity production indexes. Default: OFF", descFR: "Mode producteur: affiche les index de production électrique. Par défaut: OFF", }, 5: { descEN: "Displays all meter data. For advanced use. Default: OFF", descFR: "Affiche toutes les données du compteur. Pour un usage avancé. Par défaut: OFF", }, 6: { descEN: "Language: Default French", descFR: "Langue. Par défaut Francais", }, }; const ticmeterOptions = [ e .numeric(`refresh_rate`, ea.SET) .withValueMin(60) .withDescription(ticmeterOptionsFRTr[0].descEN) .withValueMin(60) .withValueMax(3600), e .enum("tic_mode", ea.SET, modeTICEnum) .withDescription(ticmeterOptionsFRTr[1].descEN), e .enum("contract_type", ea.SET, modeContractEnum) .withDescription(ticmeterOptionsFRTr[2].descEN), e .enum("linky_elec", ea.SET, modeElecEnum) .withDescription(ticmeterOptionsFRTr[3].descEN), e .binary("producer", ea.SET, "ON", "OFF") .withDescription(ticmeterOptionsFRTr[4].descEN), e .binary("advanced", ea.SET, "ON", "OFF") .withDescription(ticmeterOptionsFRTr[5].descEN), e .enum("translation", ea.SET, [TRANSLATION_FR, TRANSLATION_EN]) .withDescription(ticmeterOptionsFRTr[6].descEN), ]; const ticmeterDatasFRTranslation = { 0: { nameFR: "Mode TIC", descFR: "Mode de communication TIC" }, 1: { nameFR: "Mode électrique", descFR: "Mode de électrique du compteur" }, 2: { nameFR: "Option tarifaire", descFR: "Option tarifaire" }, 3: { nameFR: "Durée de fonctionnement", descFR: "Durée depuis le dernier redémmarage", }, 4: { nameFR: "Durée d'actualisation", descFR: "Durée entre les actualisations", }, 5: { nameFR: "Identifiant", descFR: "Numéro de serie du compteur" }, 6: { nameFR: "Puissance Max contrat", descFR: "Puissance Max contrat" }, 7: { nameFR: "Index total", descFR: "Somme de tous les index" }, 8: { nameFR: "Index BASE", descFR: "Index Tarif Base" }, 9: { nameFR: "Index HC", descFR: "Index Tarif Heures Creuses" }, 10: { nameFR: "Index HP", descFR: "Index Tarif Heures Pleines" }, 11: { nameFR: "Index EJP HN", descFR: "Index Tarif EJP Heures Normales" }, 12: { nameFR: "Index EJP HPM", descFR: "Index Tarif EJP Heures de Pointe Mobile", }, 13: { nameFR: "Préavis EJP", descFR: "Préavis EJP" }, 14: { nameFR: "Index BBRHCJB", descFR: "Index Tarif Heures Creuses Jours Bleus", }, 15: { nameFR: "Index BBRHPJB", descFR: "Index Tarif Heures Pleines Jours Bleus", }, 16: { nameFR: "Index BBRHCJW", descFR: "Index Tarif Heures Creuses Jours Blancs", }, 17: { nameFR: "Index BBRHPJW", descFR: "Index Tarif Heures Pleines Jours Blancs", }, 18: { nameFR: "Index BBRHCJR", descFR: "Index Tarif Heures Creuses Jours Rouges", }, 19: { nameFR: "Index BBRHPJR", descFR: "Index Tarif Heures Pleines Jours Rouges", }, 20: { nameFR: "Index 7", descFR: "Index 7" }, 21: { nameFR: "Index 8", descFR: "Index 8" }, 22: { nameFR: "Index 9", descFR: "Index 9" }, 23: { nameFR: "Index 10", descFR: "Index 10" }, 24: { nameFR: "Tarif en cours", descFR: "Option tarifaire en cours" }, 25: { nameFR: "Couleur demain", descFR: "Couleur demain" }, 26: { nameFR: "Intensité instantanée", descFR: "Intensité instantanée" }, 27: { nameFR: "Intensité instantanée Ph A", descFR: "Intensité instantanée Phase A", }, 28: { nameFR: "Intensité instantanée Ph B", descFR: "Intensité instantanée Phase B", }, 29: { nameFR: "Intensité instantanée Ph C", descFR: "Intensité instantanée Phase C", }, 30: { nameFR: "Intensité maximale", descFR: "Intensité maximale" }, 31: { nameFR: "Intensité maximale Ph A", descFR: "Intensité maximale Phase A", }, 32: { nameFR: "Intensité maximale Ph B", descFR: "Intensité maximale Phase B", }, 33: { nameFR: "Intensité maximale Ph C", descFR: "Intensité maximale Phase C", }, 34: { nameFR: "Dépassement de puissance", descFR: "Dépassement de puissance", }, 35: { nameFR: "Dépassement Itensité Ph A", descFR: "Dépassement de puissance Phase A", }, 36: { nameFR: "Dépassement Itensité Ph B", descFR: "Dépassement de puissance Phase B", }, 37: { nameFR: "Dépassement Itensité Ph C", descFR: "Dépassement de puissance Phase C", }, 38: { nameFR: "Puissance Apparente", descFR: "Puissance Apparente" }, 39: { nameFR: "Puissance Apparente Ph A", descFR: "Puissance Apparente Phase A", }, 40: { nameFR: "Puissance Apparente Ph B", descFR: "Puissance Apparente Phase B", }, 41: { nameFR: "Puissance Apparente Ph C", descFR: "Puissance Apparente Phase C", }, 42: { nameFR: "Index énergie injectée", descFR: "Index énergie injectée" }, 43: { nameFR: "Puissance injectée", descFR: "Puissance injectée" }, 44: { nameFR: "Puissance max injectée Auj.", descFR: "Puissance max injectée Aujourd'hui", }, 45: { nameFR: "Heure PMAX injectée Auj.", descFR: "Date et Heure puissance max injectée aujourd'hui", }, 46: { nameFR: "Puissance max injectée Hier", descFR: "Puissance max injectée Hier", }, 47: { nameFR: "Heure PMAX injectée Hier", descFR: "Date et Heure puissance max injectée hier", }, 48: { nameFR: "Présence de potentiels", descFR: "Présence de potentiels" }, 49: { nameFR: "Horaire Heures Creuses", descFR: "Horaire Heures Creuses" }, 50: { nameFR: "Registre Status", descFR: "Registre de status du compteur" }, 51: { nameFR: "Index 1 Distributeur", descFR: "Index 1 Energie soutirée Distributeur", }, 52: { nameFR: "Index 2 Distributeur", descFR: "Index 2 Energie soutirée Distributeur", }, 53: { nameFR: "Index 3 Distributeur", descFR: "Index 3 Energie soutirée Distributeur", }, 54: { nameFR: "Index 4 Distributeur", descFR: "Index 4 Energie soutirée Distributeur", }, 55: { nameFR: "Tension instantanée", descFR: "Tension instantanée efficace" }, 56: { nameFR: "Tension instantanée Ph A", descFR: "Tension instantanée efficace Phase A", }, 57: { nameFR: "Tension instantanée Ph B", descFR: "Tension instantanée efficace Phase B", }, 58: { nameFR: "Tension instantanée Ph C", descFR: "Tension instantanée efficace Phase C", }, 59: { nameFR: "Tension moyenne", descFR: "Tension moyenne" }, 60: { nameFR: "Tension moyenne Ph A", descFR: "Tension moyenne Phase A" }, 61: { nameFR: "Tension moyenne Ph B", descFR: "Tension moyenne Phase B" }, 62: { nameFR: "Tension moyenne Ph C", descFR: "Tension moyenne Phase C" }, 63: { nameFR: "Puissance max Auj", descFR: "Puissance max Aujourd'hui" }, 64: { nameFR: "Heure Puissance max Auj", descFR: "Date et Heure de la puissance max aujourd'hui", }, 65: { nameFR: "Puissance max Auj Ph A", descFR: "Puissance max Aujourd'hui Phase A", }, 66: { nameFR: "Heure Puissance max Auj Ph A", descFR: "Date et Heure de la puissance max aujourd'hui Ph A", }, 67: { nameFR: "Puissance max Auj Ph B", descFR: "Puissance max Aujourd'hui Phase B", }, 68: { nameFR: "Heure Puissance max Auj Ph B", descFR: "Date et Heure de la puissance max aujourd'hui Ph B", }, 69: { nameFR: "Puissance max Auj Ph C", descFR: "Puissance max Aujourd'hui Phase C", }, 70: { nameFR: "Heure Puissance max Auj Ph C", descFR: "Date et Heure de la puissance max aujourd'hui Ph C", }, 71: { nameFR: "Puissance maximale triphasée", descFR: "Puissance maximale triphasée", }, 72: { nameFR: "Puissance max Hier", descFR: "Puissance max Hier" }, 73: { nameFR: "Heure Puissance max Hier", descFR: "Date et Heure de la puissance max hier", }, 74: { nameFR: "Puissance max Hier Ph A", descFR: "Puissance max Hier Phase A", }, 75: { nameFR: "Heure Puissance max Hier Ph A", descFR: "Date et Heure de la puissance max hier Ph A", }, 76: { nameFR: "Puissance max Hier Ph B", descFR: "Puissance max Hier Phase B", }, 77: { nameFR: "Heure Puissance max Hier Ph B", descFR: "Date et Heure de la puissance max hier Ph B", }, 78: { nameFR: "Puissance max Hier Ph C", descFR: "Puissance max Hier Phase C", }, 79: { nameFR: "Heure Puissance max Hier Ph C", descFR: "Date et Heure de la puissance max hier Ph C", }, 80: { nameFR: "Index en cours", descFR: "Numeréo de l'index tarifaire en cours", }, 81: { nameFR: "N° jours en cours", descFR: "N° jours en cours fournisseur" }, 82: { nameFR: "N° prochain jour", descFR: "N° prochain jour fournisseur" }, 83: { nameFR: "Relais", descFR: "Relais virtuel du compteur" }, 84: { nameFR: "PMR", descFR: "Identifiant Point Référence Mesure" }, 85: { nameFR: "Message court", descFR: "Message court" }, 86: { nameFR: "Message ultra court", descFR: "Message ultra court" }, 87: { nameFR: "Version de la TIC", descFR: "Version de la TIC" }, 88: { nameFR: "Date et heure Compteur", descFR: "Date et heure du compteur" }, 89: { nameFR: "Profil prochain jour", descFR: "Profil du prochain jour" }, 90: { nameFR: "Profil prochain jour pointe", descFR: "Profil du prochain jour pointe", }, 91: { nameFR: "Point n courbe soutirée", descFR: "Point n de la courbe de charge active soutirée", }, 92: { nameFR: "Point n-1 courbe soutirée", descFR: "Point n-1 de la courbe de charge active soutirée", }, 93: { nameFR: "Point n courbe injectée", descFR: "Point n de la courbe de charge active injectée", }, 94: { nameFR: "Point n-1 courbe injectée", descFR: "Point n-1 de la courbe de charge active injectée", }, 95: { nameFR: "Energie réactive Q1 totale", descFR: "Energie réactive Q1 totale", }, 96: { nameFR: "Energie réactive Q2 totale", descFR: "Energie réactive Q2 totale", }, 97: { nameFR: "Energie réactive Q3 totale", descFR: "Energie réactive Q3 totale", }, 98: { nameFR: "Energie réactive Q4 totale", descFR: "Energie réactive Q4 totale", }, 99: { nameFR: "Début Pointe Mobile 1", descFR: "Début Pointe Mobile 1" }, 100: { nameFR: "Fin Pointe Mobile 1", descFR: "Fin Pointe Mobile 1" }, 101: { nameFR: "Début Pointe Mobile 2", descFR: "Début Pointe Mobile 2" }, 102: { nameFR: "Fin Pointe Mobile 2", descFR: "Fin Pointe Mobile 2" }, 103: { nameFR: "Début Pointe Mobile 3", descFR: "Début Pointe Mobile 3" }, 104: { nameFR: "Fin Pointe Mobile 3", descFR: "Fin Pointe Mobile 3" }, }; const ticmeterDatas = [ { id: 0, name: "TIC Mode", desc: "TIC Communication Mode", clust: CLUSTER_TIC, attr: "ticMode", type: ENUM, unit: "", poll: true, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, values: modeTICEnum, }, { id: 1, name: "Electric Mode", desc: "Meter Electric Mode", clust: CLUSTER_TIC, attr: "elecMode", type: ENUM, unit: "", poll: true, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, values: modeElecEnum, }, { id: 2, name: "Tariff Option", desc: "Tariff Option", clust: CLUSTER_TIC, attr: "contractType", type: STRING, unit: "", poll: true, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 3, name: "Uptime", desc: "Duration since last restart", clust: CLUSTER_TIC, attr: "uptime", type: NUMBER, unit: "s", poll: true, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 4, name: "Refresh Rate", desc: "Time between refreshes", clust: CLUSTER_TIC, attr: "refreshRate", type: NUM_RW, unit: "s", poll: true, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, min: 30, max: 300, }, { id: 5, name: "Identifier", desc: "Meter serial number", clust: CLUSTER_MET, attr: "meterSerialNumber", type: STRING, unit: "", poll: true, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 6, name: "Max Contract Power", desc: "Max Contract Power", clust: CLUSTER_TIC, attr: "maxContractPower", type: NUMBER, unit: "kVA", poll: true, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 7, name: "Total Index", desc: "Sum of all Index", clust: CLUSTER_MET, attr: "currentSummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 8, name: "BASE Index", desc: "Base Tariff Index", clust: CLUSTER_MET, attr: "currentTier1SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.BASE, elec: E.ANY, prod: false, }, { id: 9, name: "Off-Peak Index", desc: "Off-Peak Tariff Index", clust: CLUSTER_MET, attr: "currentTier1SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.HCHP, elec: E.ANY, prod: false, }, { id: 10, name: "Peak Index", desc: "Peak Tariff Index", clust: CLUSTER_MET, attr: "currentTier2SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.HCHP, elec: E.ANY, prod: false, }, { id: 11, name: "EJP Normal Hours Index", desc: "EJP Normal Hours Tariff Index", clust: CLUSTER_MET, attr: "currentTier1SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.EJP, elec: E.ANY, prod: false, }, { id: 12, name: "EJP Mobile Peak Hours Index", desc: "EJP Mobile Peak Hours Tariff Index", clust: CLUSTER_MET, attr: "currentTier2SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.EJP, elec: E.ANY, prod: false, }, { id: 13, name: "EJP Notice", desc: "EJP Notice", clust: CLUSTER_TIC, attr: "startEJP", type: STRING, unit: "", poll: false, tic: T.ANY, contract: C.EJP, elec: E.ANY, prod: false, }, { id: 14, name: "BBRHCJB Index", desc: "Blue Days Off-Peak Tariff Index", clust: CLUSTER_MET, attr: "currentTier1SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.TEMPO, elec: E.ANY, prod: false, }, { id: 15, name: "BBRHPJB Index", desc: "Blue Days Peak Tariff Index", clust: CLUSTER_MET, attr: "currentTier2SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.TEMPO, elec: E.ANY, prod: false, }, { id: 16, name: "BBRHCJW Index", desc: "White Days Off-Peak Tariff Index", clust: CLUSTER_MET, attr: "currentTier3SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.TEMPO, elec: E.ANY, prod: false, }, { id: 17, name: "BBRHPJW Index", desc: "White Days Peak Tariff Index", clust: CLUSTER_MET, attr: "currentTier4SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.TEMPO, elec: E.ANY, prod: false, }, { id: 18, name: "BBRHCJR Index", desc: "Red Days Off-Peak Tariff Index", clust: CLUSTER_MET, attr: "currentTier5SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.TEMPO, elec: E.ANY, prod: false, }, { id: 19, name: "BBRHPJR Index", desc: "Red Days Peak Tariff Index", clust: CLUSTER_MET, attr: "currentTier6SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.ANY, contract: C.TEMPO, elec: E.ANY, prod: false, }, { id: 20, name: "Index 7", desc: "Index 7", clust: CLUSTER_MET, attr: "currentTier7SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 21, name: "Index 8", desc: "Index 8", clust: CLUSTER_MET, attr: "currentTier8SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 22, name: "Index 9", desc: "Index 9", clust: CLUSTER_MET, attr: "currentTier9SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 23, name: "Index 10", desc: "Index 10", clust: CLUSTER_MET, attr: "currentTier10SummDelivered", type: NUMBER, unit: "Wh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 24, name: "Current Tariff", desc: "Current Tariff Option", clust: CLUSTER_TIC, attr: "currentTarif", type: STRING, unit: "", poll: false, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 25, name: "Tomorrow Color", desc: "Tomorrow Color", clust: CLUSTER_TIC, attr: "tomorowColor", type: STRING, unit: "", poll: false, tic: T.ANY, contract: C.TEMPO, elec: E.ANY, prod: false, }, { id: 26, name: "Instant Intensity", desc: "Instant Intensity", clust: CLUSTER_ELE, attr: "rmsCurrent", type: NUMBER, unit: "A", poll: false, tic: T.ANY, contract: C.ANY, elec: E.MONO, prod: false, }, { id: 27, name: "Instant Intensity Phase A", desc: "Instant Intensity Phase A", clust: CLUSTER_ELE, attr: "rmsCurrent", type: NUMBER, unit: "A", poll: false, tic: T.ANY, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 28, name: "Instant Intensity Phase B", desc: "Instant Intensity Phase B", clust: CLUSTER_ELE, attr: "rmsCurrentPhB", type: NUMBER, unit: "A", poll: false, tic: T.ANY, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 29, name: "Instant Intensity Phase C", desc: "Instant Intensity Phase C", clust: CLUSTER_ELE, attr: "rmsCurrentPhC", type: NUMBER, unit: "A", poll: false, tic: T.ANY, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 30, name: "Max Intensity", desc: "Max Intensity", clust: CLUSTER_ELE, attr: "rmsCurrentMax", type: NUMBER, unit: "A", poll: true, tic: T.HIST, contract: C.ANY, elec: E.MONO, prod: false, }, { id: 31, name: "Max Intensity Phase A", desc: "Max Intensity Phase A", clust: CLUSTER_ELE, attr: "rmsCurrentMax", type: NUMBER, unit: "A", poll: true, tic: T.HIST, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 32, name: "Max Intensity Phase B", desc: "Max Intensity Phase B", clust: CLUSTER_ELE, attr: "rmsCurrentMaxPhB", type: NUMBER, unit: "A", poll: true, tic: T.HIST, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 33, name: "Max Intensity Phase C", desc: "Max Intensity Phase C", clust: CLUSTER_ELE, attr: "rmsCurrentMaxPhC", type: NUMBER, unit: "A", poll: true, tic: T.HIST, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 34, name: "Power Exceedance", desc: "Power Exceedance", clust: CLUSTER_TIC, attr: "powerOverrun", type: NUMBER, unit: "A", poll: false, tic: T.ANY, contract: C.ANY, elec: E.MONO, prod: false, }, { id: 35, name: "Power Exceedance Phase A", desc: "Power Exceedance Phase A", clust: CLUSTER_TIC, attr: "powerOverrunA", type: NUMBER, unit: "A", poll: false, tic: T.ANY, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 36, name: "Power Exceedance Phase B", desc: "Power Exceedance Phase B", clust: CLUSTER_TIC, attr: "powerOverrunB", type: NUMBER, unit: "A", poll: false, tic: T.ANY, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 37, name: "Power Exceedance Phase C", desc: "Power Exceedance Phase C", clust: CLUSTER_TIC, attr: "powerOverrunC", type: NUMBER, unit: "A", poll: false, tic: T.ANY, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 38, name: "Apparent Power", desc: "Apparent Power", clust: CLUSTER_ELE, attr: "apparentPower", type: NUMBER, unit: "VA", poll: false, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 39, name: "Apparent Power Phase A", desc: "Apparent Power Phase A", clust: CLUSTER_ELE, attr: "apparentPower", type: NUMBER, unit: "VA", poll: false, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 40, name: "Apparent Power Phase B", desc: "Apparent Power Phase B", clust: CLUSTER_ELE, attr: "apparentPowerPhB", type: NUMBER, unit: "VA", poll: false, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 41, name: "Apparent Power Phase C", desc: "Apparent Power Phase C", clust: CLUSTER_ELE, attr: "apparentPowerPhC", type: NUMBER, unit: "VA", poll: false, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 42, name: "Injected Energy Index", desc: "Injected Energy Index", clust: CLUSTER_MET, attr: "currentSummReceived", type: NUMBER, unit: "Wh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: true, }, { id: 43, name: "Injected Power", desc: "Injected Power", clust: CLUSTER_TIC, attr: "powerInjected", type: NUMBER, unit: "VA", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: true, }, { id: 44, name: "Today Max Injected Power", desc: "Max Injected Power Today", clust: CLUSTER_TIC, attr: "powerMaxInjected", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: true, }, { id: 45, name: "Today Time Max Injected Power", desc: "Date and Time of Today Max Injected ", clust: CLUSTER_TIC, attr: "powerMaxInjectedTime", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: true, }, { id: 46, name: "Yesterday Max Injected Power", desc: "Max Injected Power Yesterday", clust: CLUSTER_TIC, attr: "powerMaxInjectedYesterday", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: true, }, { id: 47, name: "Yesterday Time Max Injected Power", desc: "Date and Time of Yesterday Max Injected", clust: CLUSTER_TIC, attr: "powerMaxInjectedYesterdayTime", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: true, }, { id: 48, name: "Potential Presence", desc: "Potential Presence", clust: CLUSTER_TIC, attr: "potentialPresence", type: NUMBER, unit: "", poll: true, tic: T.HIST, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 49, name: "Off-Peak Hours Schedule", desc: "Off-Peak Hours Schedule", clust: CLUSTER_TIC, attr: "hcHours", type: STRING, unit: "", poll: false, tic: T.ANY, contract: C.HCHP, elec: E.ANY, prod: false, }, { id: 50, name: "Status Register", desc: "Meter Status Register", clust: CLUSTER_TIC, attr: "motdetat", type: STRING, unit: "", poll: true, tic: T.ANY, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 51, name: "Distributor Index 1", desc: "Distributor Drawn Energy Index 1", clust: CLUSTER_TIC, attr: "index1Dist", type: NUMBER, unit: "Wh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 52, name: "Distributor Index 2", desc: "Distributor Drawn Energy Index 2", clust: CLUSTER_TIC, attr: "index2Dist", type: NUMBER, unit: "Wh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 53, name: "Distributor Index 3", desc: "Distributor Drawn Energy Index 3", clust: CLUSTER_TIC, attr: "index3Dist", type: NUMBER, unit: "Wh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 54, name: "Distributor Index 4", desc: "Distributor Drawn Energy Index 4", clust: CLUSTER_TIC, attr: "index4Dist", type: NUMBER, unit: "Wh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 55, name: "Instantaneous Voltage", desc: "Instantaneous Effective Voltage", clust: CLUSTER_ELE, attr: "rmsVoltage", type: NUMBER, unit: "V", poll: false, tic: T.STD, contract: C.ANY, elec: E.MONO, prod: false, }, { id: 56, name: "Instantaneous Voltage Phase A", desc: "Instantaneous Effective Voltage Phase A", clust: CLUSTER_ELE, attr: "rmsVoltage", type: NUMBER, unit: "V", poll: false, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 57, name: "Instantaneous Voltage Phase B", desc: "Instantaneous Effective Voltage Phase B", clust: CLUSTER_ELE, attr: "rmsVoltagePhB", type: NUMBER, unit: "V", poll: false, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 58, name: "Instantaneous Voltage Phase C", desc: "Instantaneous Effective Voltage Phase C", clust: CLUSTER_ELE, attr: "rmsVoltagePhC", type: NUMBER, unit: "V", poll: false, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 59, name: "Average Voltage", desc: "Average Voltage", clust: CLUSTER_ELE, attr: "averageRmsVoltageMeasPeriod", type: NUMBER, unit: "V", poll: true, tic: T.STD, contract: C.ANY, elec: E.MONO, prod: false, }, { id: 60, name: "Average Voltage Phase A", desc: "Average Voltage Phase A", clust: CLUSTER_ELE, attr: "averageRmsVoltageMeasPeriod", type: NUMBER, unit: "V", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 61, name: "Average Voltage Phase B", desc: "Average Voltage Phase B", clust: CLUSTER_ELE, attr: "averageRmsVoltageMeasurePeriodPhB", type: NUMBER, unit: "V", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 62, name: "Average Voltage Phase C", desc: "Average Voltage Phase C", clust: CLUSTER_ELE, attr: "averageRmsVoltageMeasPeriodPhC", type: NUMBER, unit: "V", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 63, name: "Today Max Power", desc: "Max Power Today", clust: CLUSTER_ELE, attr: "activePowerMax", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.MONO, prod: false, }, { id: 64, name: "Time Today Max Power", desc: "Date and Time of Max Power Today", clust: CLUSTER_TIC, attr: "powerMaxTodayTime", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.MONO, prod: false, }, { id: 65, name: "Today Max Power Phase A", desc: "Max Power Today Phase A", clust: CLUSTER_ELE, attr: "activePowerMax", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 66, name: "Time Today Max Power Phase A", desc: "Date and Time of Today Max Power Phase A", clust: CLUSTER_TIC, attr: "powerMaxToday1Time", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 67, name: "Today Max Power Phase B", desc: "Max Power Today Phase B", clust: CLUSTER_ELE, attr: "activePowerMaxPhB", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 68, name: "Time Today Max Power Phase B", desc: "Date and Time of Max Power Today Phase B", clust: CLUSTER_TIC, attr: "powerMaxToday2Time", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 69, name: "Today Max Power Phase C", desc: "Max Power Today Phase C", clust: CLUSTER_ELE, attr: "activePowerMaxPhC", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 70, name: "Time Today Max Power Phase C", desc: "Date and Time of Max Power Today Phase C", clust: CLUSTER_TIC, attr: "powerMaxToday3Time", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 71, name: "Three-Phase Max Power", desc: "Three-Phase Max Power", clust: CLUSTER_ELE, attr: "activePowerMax", type: NUMBER, unit: "W", poll: true, tic: T.HIST, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 72, name: "Yesterday Max Power", desc: "Max Power Yesterday", clust: CLUSTER_TIC, attr: "powerMaxYesterday", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.MONO, prod: false, }, { id: 73, name: "Time Yesterday Max Power", desc: "Date and Time of Max Power Yesterday", clust: CLUSTER_TIC, attr: "powerMaxYesterdayTime", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.MONO, prod: false, }, { id: 74, name: "Max Yesterday Power Phase A", desc: "Max Power Yesterday Phase A", clust: CLUSTER_TIC, attr: "powerMaxYesterday1", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 75, name: "Time Yesterday Max Power Phase A", desc: "DateTime of Max Power Yesterday Phase A", clust: CLUSTER_TIC, attr: "powerMaxYesterday1Time", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 76, name: "Max Yesterday Power Phase B", desc: "Max Power Yesterday Phase B", clust: CLUSTER_TIC, attr: "powerMaxYesterday2", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 77, name: "Time Yesterday Max Power Phase B", desc: "DateTime of Max Power Yesterday Phase B", clust: CLUSTER_TIC, attr: "powerMaxYesterday2Time", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 78, name: "Max Yesterday Power Phase C", desc: "Max Power Yesterday Phase C", clust: CLUSTER_TIC, attr: "powerMaxYesterday3", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 79, name: "Time Yesterday Max Power Phase C", desc: "DateTime of Max Power Yesterday Phase C", clust: CLUSTER_TIC, attr: "powerMaxYesterday3Time", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.TRI, prod: false, }, { id: 80, name: "Current Index", desc: "Current Tariff Index Number", clust: CLUSTER_TIC, attr: "currentIndex", type: NUMBER, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 81, name: "Current Days Number", desc: "Current Supplier Days Number", clust: CLUSTER_TIC, attr: "calendarSupplierDay", type: NUMBER, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 82, name: "Next Day Number", desc: "Next Supplier Day Number", clust: CLUSTER_TIC, attr: "nextSupplierCalendarDay", type: NUMBER, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 83, name: "Relay", desc: "Meter Virtual Relay", clust: CLUSTER_TIC, attr: "relays", type: STRING, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 84, name: "PMR", desc: "Measurement Reference Point Identifier", clust: CLUSTER_MET, attr: "siteId", type: STRING, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 85, name: "Short Message", desc: "Short Message", clust: CLUSTER_TIC, attr: "shortMsg", type: STRING, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 86, name: "Ultra-Short Message", desc: "Ultra-Short Message", clust: CLUSTER_TIC, attr: "ultraShortMsg", type: STRING, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 87, name: "TIC Version", desc: "TIC Version", clust: CLUSTER_TIC, attr: "ticVersion", type: STRING, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 88, name: "Meter Date and Time", desc: "Meter Date and Time", clust: CLUSTER_TIC, attr: "date", type: TIME, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 89, name: "Next Day Profile", desc: "Next Day Profile", clust: CLUSTER_TIC, attr: "calendarDay", type: STRING, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 90, name: "Next Day Peak Profile", desc: "Next Day Peak Profile", clust: CLUSTER_TIC, attr: "calendarDayPointe", type: STRING, unit: "", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 91, name: "Current Drawn Curve Point", desc: "Current Drawn Active Load Curve Point", clust: CLUSTER_ELE, attr: "activePower", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 92, name: "Previous Drawn Curve Point", desc: "Previous Drawn Active Load Curve Point", clust: CLUSTER_ELE, attr: "activePowerPhB", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 93, name: "Current Injected Curve Point", desc: "Current Injected Active Load Curve Point", clust: CLUSTER_TIC, attr: "injectedLoadN", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: true, }, { id: 94, name: "Previous Injected Curve Point", desc: "Previous Injected Active Load Curve Point", clust: CLUSTER_TIC, attr: "injectedLoadN_1", type: NUMBER, unit: "VA", poll: true, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: true, }, { id: 95, name: "Total Reactive Energy Q1", desc: "Total Reactive Energy Q1", clust: CLUSTER_ELE, attr: "totalReactivePower", type: NUMBER, unit: "VARh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 96, name: "Total Reactive Energy Q2", desc: "Total Reactive Energy Q2", clust: CLUSTER_ELE, attr: "reactivePower", type: NUMBER, unit: "VARh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 97, name: "Total Reactive Energy Q3", desc: "Total Reactive Energy Q3", clust: CLUSTER_ELE, attr: "reactivePowerPhB", type: NUMBER, unit: "VARh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 98, name: "Total Reactive Energy Q4", desc: "Total Reactive Energy Q4", clust: CLUSTER_ELE, attr: "reactivePowerPhC", type: NUMBER, unit: "VARh", poll: false, tic: T.STD, contract: C.ANY, elec: E.ANY, prod: false, }, { id: 99, name: "Start Mobile Peak 1", desc: "Start Mobile Peak 1", clust: CLUSTER_TIC, attr: "startEJP1", type: TIME, unit: "", poll: true, tic: T.ANY, contract: C.EJP, elec: E.ANY, prod: false, }, { id: 100, name: "End Mobile Peak 1", desc: "End Mobile Peak 1", clust: CLUSTER_TIC, attr: "stopEJP1", type: TIME, unit: "", poll: true, tic: T.ANY, contract: C.EJP, elec: E.ANY, prod: false, }, { id: 101, name: "Start Mobile Peak 2", desc: "Start Mobile Peak 2", clust: CLUSTER_TIC, attr: "startEJP2", type: TIME, unit: "", poll: true, tic: T.ANY, contract: C.EJP, elec: E.ANY, prod: false, }, { id: 102, name: "End Mobile Peak 2", desc: "End Mobile Peak 2", clust: CLUSTER_TIC, attr: "stopEJP2", type: TIME, unit: "", poll: true, tic: T.ANY, contract: C.EJP, elec: E.ANY, prod: false, }, { id: 103, name: "Start Mobile Peak 3", desc: "Start Mobile Peak 3", clust: CLUSTER_TIC, attr: "startEJP3", type: TIME, unit: "", poll: true, tic: T.ANY, contract: C.EJP, elec: E.ANY, prod: false, }, { id: 104, name: "End Mobile Peak 3", desc: "End Mobile Peak 3", clust: CLUSTER_TIC, attr: "stopEJP3", type: TIME, unit: "", poll: true, tic: T.ANY, contract: C.EJP, elec: E.ANY, prod: false, }, ]; const ticmeterCustomCluster = { ID: 0xff42, attributes: { contractType: { ID: 0x0000, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR }, startEJP: { ID: 0x0001, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, refreshRate: { ID: 0x0002, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, tomorowColor: { ID: 0x0003, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR }, // powerOverrun: { ID: 0x0004, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, powerOverrunA: { ID: 0x0005, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, powerOverrunB: { ID: 0x0006, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, powerOverrunC: { ID: 0x0007, type: zigbee_herdsman_1.Zcl.DataType.UINT16 }, // potentialPresence: { ID: 0x0008, type: zigbee_herdsman_1.Zcl.DataType.UINT32 }, // hcHours: { ID: 0x0009, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR }, motdetat: { ID: 0x000a, type: zigbee_herdsman_1.Zcl.DataType.CHAR_STR }, // date: { ID: 0x000b, type: zigbee