Skip to content

Commit c05d482

Browse files
shinasysautofix-ci[bot]Koenkk
authored
fix: ShinaSystem: use metering cluster for power measurements (#8909)
Co-authored-by: autofix-ci[bot] <114827586+autofix-ci[bot]@users.noreply.github.com> Co-authored-by: Koen Kanters <[email protected]>
1 parent d101973 commit c05d482

File tree

2 files changed

+13
-7
lines changed

2 files changed

+13
-7
lines changed

src/devices/shinasystem.ts

+3-3
Original file line numberDiff line numberDiff line change
@@ -598,23 +598,23 @@ export const definitions: DefinitionWithExtend[] = [
598598
model: "PMM-300Z1",
599599
vendor: "ShinaSystem",
600600
description: "SiHAS energy monitor",
601-
extend: [m.electricityMeter()],
601+
extend: [m.electricityMeter({power: {cluster: "metering"}})],
602602
},
603603
{
604604
zigbeeModel: ["PMM-300Z2"],
605605
model: "PMM-300Z2",
606606
vendor: "ShinaSystem",
607607
ota: true,
608608
description: "SiHAS energy monitor",
609-
extend: [m.electricityMeter({acFrequency: {multiplier: 1, divisor: 10}, powerFactor: true}), m.temperature()],
609+
extend: [m.electricityMeter({power: {cluster: "metering"}, acFrequency: {multiplier: 1, divisor: 10}, powerFactor: true}), m.temperature()],
610610
},
611611
{
612612
zigbeeModel: ["PMM-300Z3"],
613613
model: "PMM-300Z3",
614614
vendor: "ShinaSystem",
615615
ota: true,
616616
description: "SiHAS 3phase energy monitor",
617-
extend: [m.electricityMeter({acFrequency: {multiplier: 1, divisor: 10}, powerFactor: true}), m.temperature()],
617+
extend: [m.electricityMeter({power: {cluster: "metering"}, acFrequency: {multiplier: 1, divisor: 10}, powerFactor: true}), m.temperature()],
618618
},
619619
{
620620
zigbeeModel: ["DLM-300Z"],

src/lib/modernExtend.ts

+10-4
Original file line numberDiff line numberDiff line change
@@ -1678,7 +1678,7 @@ type MeterType = "electricity" | "gas"; // water, etc
16781678
interface MeterArgs {
16791679
type?: MeterType;
16801680
cluster?: "both" | "metering" | "electrical";
1681-
power?: false | (MultiplierDivisor & Partial<ReportingConfigWithoutAttribute>);
1681+
power?: false | (MultiplierDivisor & Partial<ReportingConfigWithoutAttribute> & {cluster?: "metering" | "electrical"});
16821682
energy?: false | (MultiplierDivisor & Partial<ReportingConfigWithoutAttribute>);
16831683
status?: boolean;
16841684
extendedStatus?: boolean;
@@ -1951,17 +1951,23 @@ function genericMeter(args?: MeterArgs) {
19511951
if (args.energy !== false) exposes.push(e.energy().withAccess(ea.STATE_GET));
19521952
if (args.producedEnergy !== false) exposes.push(e.produced_energy().withAccess(ea.STATE_GET));
19531953
fromZigbee = [args.fzElectricalMeasurement ?? fz.electrical_measurement, args.fzMetering ?? fz.metering];
1954+
const useMeteringForPower = args.power !== false && args.power?.cluster === "metering";
19541955
toZigbee = [
1955-
tz.electrical_measurement_power,
1956+
useMeteringForPower ? tz.metering_power : tz.electrical_measurement_power,
19561957
tz.acvoltage,
19571958
tz.accurrent,
19581959
tz.currentsummdelivered,
19591960
tz.currentsummreceived,
19601961
tz.frequency,
19611962
tz.powerfactor,
19621963
];
1963-
// biome-ignore lint/performance/noDelete: ignored using `--suppress`
1964-
delete configureLookup.seMetering.power;
1964+
if (useMeteringForPower) {
1965+
// biome-ignore lint/performance/noDelete: ignored using `--suppress`
1966+
delete configureLookup.haElectricalMeasurement.power;
1967+
} else {
1968+
// biome-ignore lint/performance/noDelete: ignored using `--suppress`
1969+
delete configureLookup.seMetering.power;
1970+
}
19651971
} else if (args.cluster === "metering" && args.type === "electricity") {
19661972
if (args.power !== false) exposes.push(e.power().withAccess(ea.STATE_GET));
19671973
if (args.energy !== false) exposes.push(e.energy().withAccess(ea.STATE_GET));

0 commit comments

Comments
 (0)