diff --git a/src/devices/shinasystem.ts b/src/devices/shinasystem.ts index 3218c60cf6e20..e9ccc511e1d4a 100644 --- a/src/devices/shinasystem.ts +++ b/src/devices/shinasystem.ts @@ -598,7 +598,7 @@ export const definitions: DefinitionWithExtend[] = [ model: "PMM-300Z1", vendor: "ShinaSystem", description: "SiHAS energy monitor", - extend: [m.electricityMeter()], + extend: [m.electricityMeter({power: {cluster: "metering"}})], }, { zigbeeModel: ["PMM-300Z2"], @@ -606,7 +606,7 @@ export const definitions: DefinitionWithExtend[] = [ vendor: "ShinaSystem", ota: true, description: "SiHAS energy monitor", - extend: [m.electricityMeter({acFrequency: {multiplier: 1, divisor: 10}, powerFactor: true}), m.temperature()], + extend: [m.electricityMeter({power: {cluster: "metering"}, acFrequency: {multiplier: 1, divisor: 10}, powerFactor: true}), m.temperature()], }, { zigbeeModel: ["PMM-300Z3"], @@ -614,7 +614,7 @@ export const definitions: DefinitionWithExtend[] = [ vendor: "ShinaSystem", ota: true, description: "SiHAS 3phase energy monitor", - extend: [m.electricityMeter({acFrequency: {multiplier: 1, divisor: 10}, powerFactor: true}), m.temperature()], + extend: [m.electricityMeter({power: {cluster: "metering"}, acFrequency: {multiplier: 1, divisor: 10}, powerFactor: true}), m.temperature()], }, { zigbeeModel: ["DLM-300Z"], diff --git a/src/lib/modernExtend.ts b/src/lib/modernExtend.ts index 5c6e02b8d2b2b..a8cb88ebec1e5 100644 --- a/src/lib/modernExtend.ts +++ b/src/lib/modernExtend.ts @@ -1678,7 +1678,7 @@ type MeterType = "electricity" | "gas"; // water, etc interface MeterArgs { type?: MeterType; cluster?: "both" | "metering" | "electrical"; - power?: false | (MultiplierDivisor & Partial); + power?: false | (MultiplierDivisor & Partial & {cluster?: "metering" | "electrical"}); energy?: false | (MultiplierDivisor & Partial); status?: boolean; extendedStatus?: boolean; @@ -1951,8 +1951,9 @@ function genericMeter(args?: MeterArgs) { if (args.energy !== false) exposes.push(e.energy().withAccess(ea.STATE_GET)); if (args.producedEnergy !== false) exposes.push(e.produced_energy().withAccess(ea.STATE_GET)); fromZigbee = [args.fzElectricalMeasurement ?? fz.electrical_measurement, args.fzMetering ?? fz.metering]; + const useMeteringForPower = args.power !== false && args.power?.cluster === "metering"; toZigbee = [ - tz.electrical_measurement_power, + useMeteringForPower ? tz.metering_power : tz.electrical_measurement_power, tz.acvoltage, tz.accurrent, tz.currentsummdelivered, @@ -1960,8 +1961,13 @@ function genericMeter(args?: MeterArgs) { tz.frequency, tz.powerfactor, ]; - // biome-ignore lint/performance/noDelete: ignored using `--suppress` - delete configureLookup.seMetering.power; + if (useMeteringForPower) { + // biome-ignore lint/performance/noDelete: ignored using `--suppress` + delete configureLookup.haElectricalMeasurement.power; + } else { + // biome-ignore lint/performance/noDelete: ignored using `--suppress` + delete configureLookup.seMetering.power; + } } else if (args.cluster === "metering" && args.type === "electricity") { if (args.power !== false) exposes.push(e.power().withAccess(ea.STATE_GET)); if (args.energy !== false) exposes.push(e.energy().withAccess(ea.STATE_GET));