diff --git a/src/converters/fromZigbee.ts b/src/converters/fromZigbee.ts index b363cf07cc175..f3daac71ec9c8 100644 --- a/src/converters/fromZigbee.ts +++ b/src/converters/fromZigbee.ts @@ -753,17 +753,15 @@ const converters1 = { payload[property] = power; } - if (factor != null && (msg.data.currentSummDelivered !== undefined || msg.data.currentSummReceived !== undefined)) { - if (msg.data.currentSummDelivered !== undefined) { - const value = msg.data['currentSummDelivered']; - const property = postfixWithEndpointName('energy', msg, model, meta); - payload[property] = value * factor; - } - if (msg.data.currentSummReceived !== undefined) { - const value = msg.data['currentSummReceived']; - const property = postfixWithEndpointName('produced_energy', msg, model, meta); - payload[property] = value * factor; - } + if (msg.data.currentSummDelivered !== undefined) { + const value = msg.data['currentSummDelivered']; + const property = postfixWithEndpointName('energy', msg, model, meta); + payload[property] = value * (factor ?? 1); + } + if (msg.data.currentSummReceived !== undefined) { + const value = msg.data['currentSummReceived']; + const property = postfixWithEndpointName('produced_energy', msg, model, meta); + payload[property] = value * (factor ?? 1); } return payload; diff --git a/src/devices/frient.ts b/src/devices/frient.ts index eda40a3a510f6..eacdee2b1bd4b 100644 --- a/src/devices/frient.ts +++ b/src/devices/frient.ts @@ -1,25 +1,24 @@ -import fz from '../converters/fromZigbee'; -import * as exposes from '../lib/exposes'; -import {electricityMeter, onOff, ota} from '../lib/modernExtend'; -import * as reporting from '../lib/reporting'; +import {develcoModernExtend} from '../lib/develco'; +import {battery, electricityMeter, onOff, ota} from '../lib/modernExtend'; import {DefinitionWithExtend} from '../lib/types'; -const e = exposes.presets; +// NOTE! Develco and Frient is the same company, therefore we use develco specific things in here. const definitions: DefinitionWithExtend[] = [ { zigbeeModel: ['EMIZB-141'], model: 'EMIZB-141', vendor: 'Frient', - description: 'Smart powermeter Zigbee bridge', - fromZigbee: [fz.metering, fz.battery], - toZigbee: [], - extend: [ota()], - exposes: [e.battery(), e.power(), e.energy()], - configure: async (device, coordinatorEndpoint) => { - const endpoint = device.getEndpoint(2); - await reporting.bind(endpoint, coordinatorEndpoint, ['seMetering', 'genPowerCfg']); - }, + description: 'Electricity meter interface 2 LED', + extend: [ + ota(), + electricityMeter({cluster: 'metering', power: {divisor: 1000, multiplier: 1}, energy: {divisor: 1000, multiplier: 1}}), + battery(), + develcoModernExtend.addCustomClusterManuSpecificDevelcoGenBasic(), + develcoModernExtend.readGenBasicPrimaryVersions(), + develcoModernExtend.pulseConfiguration(), + develcoModernExtend.currentSummation(), + ], }, { zigbeeModel: ['SMRZB-153'], @@ -27,7 +26,7 @@ const definitions: DefinitionWithExtend[] = [ vendor: 'Frient', description: 'Smart Cable - Power switch with power measurement', extend: [onOff({configureReporting: false}), electricityMeter()], - endpoint: (device) => { + endpoint: () => { return {default: 2}; }, }, diff --git a/src/lib/develco.ts b/src/lib/develco.ts index f806d640ba248..2458fb7aa7e67 100644 --- a/src/lib/develco.ts +++ b/src/lib/develco.ts @@ -170,4 +170,26 @@ export const develcoModernExtend = { valueIgnore: [0xffff, -0x8000], ...args, }), + currentSummation: (args?: Partial) => + numeric({ + name: 'current_summation', + cluster: 'seMetering', + attribute: 'develcoCurrentSummation', + description: 'Current summation value sent to the display. e.g. 570 = 0,570 kWh', + access: 'SET', + valueMin: 0, + valueMax: 268435455, + ...args, + }), + pulseConfiguration: (args?: Partial) => + numeric({ + name: 'pulse_configuration', + cluster: 'seMetering', + attribute: 'develcoPulseConfiguration', + description: 'Pulses per kwh. Default 1000 imp/kWh. Range 0 to 65535', + access: 'ALL', + valueMin: 0, + valueMax: 65535, + ...args, + }), };