zigbee-herdsman-converters 25.114.0 → 25.116.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +45 -0
- package/dist/converters/fromZigbee.d.ts.map +1 -1
- package/dist/converters/fromZigbee.js +10 -0
- package/dist/converters/fromZigbee.js.map +1 -1
- package/dist/converters/toZigbee.d.ts +4 -0
- package/dist/converters/toZigbee.d.ts.map +1 -1
- package/dist/converters/toZigbee.js +36 -4
- package/dist/converters/toZigbee.js.map +1 -1
- package/dist/devices/acova.d.ts.map +1 -1
- package/dist/devices/acova.js +3 -2
- package/dist/devices/acova.js.map +1 -1
- package/dist/devices/ecodim.d.ts.map +1 -1
- package/dist/devices/ecodim.js +9 -0
- package/dist/devices/ecodim.js.map +1 -1
- package/dist/devices/futurehome.d.ts.map +1 -1
- package/dist/devices/futurehome.js +17 -0
- package/dist/devices/futurehome.js.map +1 -1
- package/dist/devices/halemeier.d.ts.map +1 -1
- package/dist/devices/halemeier.js +8 -1
- package/dist/devices/halemeier.js.map +1 -1
- package/dist/devices/ikea.js +3 -3
- package/dist/devices/ikea.js.map +1 -1
- package/dist/devices/index.d.ts.map +1 -1
- package/dist/devices/index.js +2 -0
- package/dist/devices/index.js.map +1 -1
- package/dist/devices/inovelli.d.ts.map +1 -1
- package/dist/devices/inovelli.js +283 -47
- package/dist/devices/inovelli.js.map +1 -1
- package/dist/devices/lds.d.ts.map +1 -1
- package/dist/devices/lds.js +7 -0
- package/dist/devices/lds.js.map +1 -1
- package/dist/devices/lumi.js +1 -1
- package/dist/devices/lumi.js.map +1 -1
- package/dist/devices/nous.js +3 -3
- package/dist/devices/nous.js.map +1 -1
- package/dist/devices/robb.js +1 -1
- package/dist/devices/robb.js.map +1 -1
- package/dist/devices/shinasystem.js +1 -1
- package/dist/devices/slacky_diy.d.ts.map +1 -1
- package/dist/devices/slacky_diy.js +230 -260
- package/dist/devices/slacky_diy.js.map +1 -1
- package/dist/devices/sonoff.d.ts +1 -0
- package/dist/devices/sonoff.d.ts.map +1 -1
- package/dist/devices/sonoff.js +166 -42
- package/dist/devices/sonoff.js.map +1 -1
- package/dist/devices/sunricher.d.ts.map +1 -1
- package/dist/devices/sunricher.js +11 -4
- package/dist/devices/sunricher.js.map +1 -1
- package/dist/devices/tis_control.d.ts +3 -0
- package/dist/devices/tis_control.d.ts.map +1 -0
- package/dist/devices/tis_control.js +47 -0
- package/dist/devices/tis_control.js.map +1 -0
- package/dist/devices/tuya.d.ts.map +1 -1
- package/dist/devices/tuya.js +84 -3
- package/dist/devices/tuya.js.map +1 -1
- package/dist/devices/yandex.d.ts.map +1 -1
- package/dist/devices/yandex.js +10 -1
- package/dist/devices/yandex.js.map +1 -1
- package/dist/lib/legacy.d.ts.map +1 -1
- package/dist/lib/legacy.js +12 -1
- package/dist/lib/legacy.js.map +1 -1
- package/dist/models-index.json +1 -1
- package/package.json +3 -3
|
@@ -39,7 +39,6 @@ const tz = __importStar(require("../converters/toZigbee"));
|
|
|
39
39
|
const exposes = __importStar(require("../lib/exposes"));
|
|
40
40
|
const m = __importStar(require("../lib/modernExtend"));
|
|
41
41
|
const reporting = __importStar(require("../lib/reporting"));
|
|
42
|
-
const globalStore = __importStar(require("../lib/store"));
|
|
43
42
|
const utils = __importStar(require("../lib/utils"));
|
|
44
43
|
//import {logger} from "../lib/logger";
|
|
45
44
|
const e = exposes.presets;
|
|
@@ -780,6 +779,40 @@ const energyResetExtend = {
|
|
|
780
779
|
};
|
|
781
780
|
},
|
|
782
781
|
};
|
|
782
|
+
function electricityDeviceModel(args) {
|
|
783
|
+
const { name, lookup, cluster, attribute, zigbeeCommandOptions } = args;
|
|
784
|
+
const attributeKey = utils.isString(attribute) ? attribute : attribute.ID;
|
|
785
|
+
const access = ea[args.access ?? "ALL"];
|
|
786
|
+
const mExtend = m.enumLookup(args);
|
|
787
|
+
const toZigbee = [
|
|
788
|
+
{
|
|
789
|
+
key: [name],
|
|
790
|
+
convertSet: access & ea.SET
|
|
791
|
+
? async (entity, key, value, meta) => {
|
|
792
|
+
const payloadValue = utils.getFromLookup(value, lookup);
|
|
793
|
+
const payload = utils.isString(attribute)
|
|
794
|
+
? { [attribute]: payloadValue }
|
|
795
|
+
: { [attribute.ID]: { value: payloadValue, type: attribute.type } };
|
|
796
|
+
const ep = utils.determineEndpoint(entity, meta, cluster);
|
|
797
|
+
await ep.write(cluster, payload, zigbeeCommandOptions);
|
|
798
|
+
await ep.read("seMetering", ["divisor", "multiplier"]);
|
|
799
|
+
await ep.read("haElectricalMeasurement", ["acPowerDivisor", "acPowerMultiplier"]);
|
|
800
|
+
await ep.read("haElectricalMeasurement", ["acCurrentDivisor", "acCurrentMultiplier"]);
|
|
801
|
+
await ep.read("haElectricalMeasurement", ["acVoltageDivisor", "acVoltageMultiplier"]);
|
|
802
|
+
return { state: { [key]: value } };
|
|
803
|
+
}
|
|
804
|
+
: undefined,
|
|
805
|
+
convertGet: access & ea.GET
|
|
806
|
+
? async (entity, key, meta) => {
|
|
807
|
+
await utils
|
|
808
|
+
.determineEndpoint(entity, meta, cluster)
|
|
809
|
+
.read(cluster, [attributeKey], zigbeeCommandOptions);
|
|
810
|
+
}
|
|
811
|
+
: undefined,
|
|
812
|
+
},
|
|
813
|
+
];
|
|
814
|
+
return { ...mExtend, toZigbee, isModernExtend: true };
|
|
815
|
+
}
|
|
783
816
|
const electricityMeterExtend = {
|
|
784
817
|
elMeter: () => {
|
|
785
818
|
const exposes = [
|
|
@@ -798,24 +831,14 @@ const electricityMeterExtend = {
|
|
|
798
831
|
e.numeric("device_measurement_preset", ea.ALL).withDescription("Measurement Period").withValueMin(1).withValueMax(255),
|
|
799
832
|
];
|
|
800
833
|
const toZigbee = [
|
|
801
|
-
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
"currentTier1SummDelivered",
|
|
806
|
-
"currentTier2SummDelivered",
|
|
807
|
-
"currentTier3SummDelivered",
|
|
808
|
-
"currentTier4SummDelivered",
|
|
809
|
-
]);
|
|
810
|
-
},
|
|
811
|
-
convertSet: async (entity, key, value, meta) => {
|
|
812
|
-
return await null;
|
|
813
|
-
},
|
|
814
|
-
},
|
|
834
|
+
tz.currenttier1summdelivered,
|
|
835
|
+
tz.currenttier2summdelivered,
|
|
836
|
+
tz.currenttier3summdelivered,
|
|
837
|
+
tz.currenttier4summdelivered,
|
|
815
838
|
{
|
|
816
839
|
key: ["model_name"],
|
|
817
840
|
convertGet: async (entity, key, meta) => {
|
|
818
|
-
await entity.read("seMetering", [
|
|
841
|
+
await entity.read("seMetering", ["deviceName"]);
|
|
819
842
|
},
|
|
820
843
|
convertSet: async (entity, key, value, meta) => {
|
|
821
844
|
return await null;
|
|
@@ -833,7 +856,7 @@ const electricityMeterExtend = {
|
|
|
833
856
|
{
|
|
834
857
|
key: ["date_release"],
|
|
835
858
|
convertGet: async (entity, key, meta) => {
|
|
836
|
-
await entity.read("seMetering", [
|
|
859
|
+
await entity.read("seMetering", ["dateRelease"]);
|
|
837
860
|
},
|
|
838
861
|
convertSet: async (entity, key, value, meta) => {
|
|
839
862
|
return await null;
|
|
@@ -852,7 +875,7 @@ const electricityMeterExtend = {
|
|
|
852
875
|
key: ["device_address_preset"],
|
|
853
876
|
convertSet: async (entity, key, value, meta) => {
|
|
854
877
|
const device_address_preset = value;
|
|
855
|
-
await entity.write("seMetering", {
|
|
878
|
+
await entity.write("seMetering", { deviceAddress: device_address_preset });
|
|
856
879
|
return { readAfterWriteTime: 250, state: { device_address_preset: value } };
|
|
857
880
|
},
|
|
858
881
|
},
|
|
@@ -860,7 +883,7 @@ const electricityMeterExtend = {
|
|
|
860
883
|
key: ["device_password_preset"],
|
|
861
884
|
convertSet: async (entity, key, value, meta) => {
|
|
862
885
|
const device_password_preset = value.toString();
|
|
863
|
-
await entity.write("seMetering", {
|
|
886
|
+
await entity.write("seMetering", { devicePassword: device_password_preset });
|
|
864
887
|
return { readAfterWriteTime: 250, state: { device_password_preset: value } };
|
|
865
888
|
},
|
|
866
889
|
},
|
|
@@ -868,128 +891,23 @@ const electricityMeterExtend = {
|
|
|
868
891
|
key: ["device_measurement_preset"],
|
|
869
892
|
convertSet: async (entity, key, value, meta) => {
|
|
870
893
|
const device_measurement_preset = value;
|
|
871
|
-
await entity.write("seMetering", {
|
|
894
|
+
await entity.write("seMetering", { readPeriod: device_measurement_preset });
|
|
872
895
|
return { readAfterWriteTime: 250, state: { device_measurement_preset: value } };
|
|
873
896
|
},
|
|
874
897
|
convertGet: async (entity, key, meta) => {
|
|
875
|
-
await entity.read("seMetering", [
|
|
898
|
+
await entity.read("seMetering", ["readPeriod"]);
|
|
876
899
|
},
|
|
877
900
|
},
|
|
878
901
|
];
|
|
879
902
|
const fromZigbee = [
|
|
903
|
+
fz.metering,
|
|
880
904
|
{
|
|
881
905
|
cluster: "seMetering",
|
|
882
906
|
type: ["attributeReport", "readResponse"],
|
|
883
907
|
convert: (model, msg, publish, options, meta) => {
|
|
884
908
|
const result = {};
|
|
885
|
-
if (msg.data.
|
|
886
|
-
const
|
|
887
|
-
globalStore.putValue(meta.device, "energyDivisor", energyDivisor);
|
|
888
|
-
result.e_divisor = energyDivisor;
|
|
889
|
-
}
|
|
890
|
-
return result;
|
|
891
|
-
},
|
|
892
|
-
},
|
|
893
|
-
{
|
|
894
|
-
cluster: "seMetering",
|
|
895
|
-
type: ["attributeReport", "readResponse"],
|
|
896
|
-
convert: (model, msg, publish, options, meta) => {
|
|
897
|
-
const result = {};
|
|
898
|
-
if (msg.data.multiplier !== undefined) {
|
|
899
|
-
const energyMultiplier = msg.data.multiplier;
|
|
900
|
-
globalStore.putValue(meta.device, "energyMultiplier", energyMultiplier);
|
|
901
|
-
result.e_multiplier = energyMultiplier;
|
|
902
|
-
}
|
|
903
|
-
return result;
|
|
904
|
-
},
|
|
905
|
-
},
|
|
906
|
-
{
|
|
907
|
-
cluster: "seMetering",
|
|
908
|
-
type: ["attributeReport", "readResponse"],
|
|
909
|
-
convert: (model, msg, publish, options, meta) => {
|
|
910
|
-
const result = {};
|
|
911
|
-
if (msg.data.currentTier1SummDelivered !== undefined) {
|
|
912
|
-
let energyDivisor = globalStore.getValue(meta.device, "energyDivisor");
|
|
913
|
-
let energyMultiplier = globalStore.getValue(meta.device, "energyMultiplier");
|
|
914
|
-
if (energyDivisor === undefined) {
|
|
915
|
-
energyDivisor = 1;
|
|
916
|
-
}
|
|
917
|
-
if (energyMultiplier === undefined) {
|
|
918
|
-
energyMultiplier = 1;
|
|
919
|
-
}
|
|
920
|
-
const data = msg.data.currentTier1SummDelivered;
|
|
921
|
-
result.energy_tier_1 = (data / energyDivisor) * energyMultiplier;
|
|
922
|
-
}
|
|
923
|
-
return result;
|
|
924
|
-
},
|
|
925
|
-
},
|
|
926
|
-
{
|
|
927
|
-
cluster: "seMetering",
|
|
928
|
-
type: ["attributeReport", "readResponse"],
|
|
929
|
-
convert: (model, msg, publish, options, meta) => {
|
|
930
|
-
const result = {};
|
|
931
|
-
if (msg.data.currentTier2SummDelivered !== undefined) {
|
|
932
|
-
let energyDivisor = globalStore.getValue(meta.device, "energyDivisor");
|
|
933
|
-
let energyMultiplier = globalStore.getValue(meta.device, "energyMultiplier");
|
|
934
|
-
if (energyDivisor === undefined) {
|
|
935
|
-
energyDivisor = 1;
|
|
936
|
-
}
|
|
937
|
-
if (energyMultiplier === undefined) {
|
|
938
|
-
energyMultiplier = 1;
|
|
939
|
-
}
|
|
940
|
-
const data = msg.data.currentTier2SummDelivered;
|
|
941
|
-
result.energy_tier_2 = (data / energyDivisor) * energyMultiplier;
|
|
942
|
-
}
|
|
943
|
-
return result;
|
|
944
|
-
},
|
|
945
|
-
},
|
|
946
|
-
{
|
|
947
|
-
cluster: "seMetering",
|
|
948
|
-
type: ["attributeReport", "readResponse"],
|
|
949
|
-
convert: (model, msg, publish, options, meta) => {
|
|
950
|
-
const result = {};
|
|
951
|
-
if (msg.data.currentTier3SummDelivered !== undefined) {
|
|
952
|
-
let energyDivisor = globalStore.getValue(meta.device, "energyDivisor");
|
|
953
|
-
let energyMultiplier = globalStore.getValue(meta.device, "energyMultiplier");
|
|
954
|
-
if (energyDivisor === undefined) {
|
|
955
|
-
energyDivisor = 1;
|
|
956
|
-
}
|
|
957
|
-
if (energyMultiplier === undefined) {
|
|
958
|
-
energyMultiplier = 1;
|
|
959
|
-
}
|
|
960
|
-
const data = msg.data.currentTier3SummDelivered;
|
|
961
|
-
result.energy_tier_3 = (data / energyDivisor) * energyMultiplier;
|
|
962
|
-
}
|
|
963
|
-
return result;
|
|
964
|
-
},
|
|
965
|
-
},
|
|
966
|
-
{
|
|
967
|
-
cluster: "seMetering",
|
|
968
|
-
type: ["attributeReport", "readResponse"],
|
|
969
|
-
convert: (model, msg, publish, options, meta) => {
|
|
970
|
-
const result = {};
|
|
971
|
-
if (msg.data.currentTier4SummDelivered !== undefined) {
|
|
972
|
-
let energyDivisor = globalStore.getValue(meta.device, "energyDivisor");
|
|
973
|
-
let energyMultiplier = globalStore.getValue(meta.device, "energyMultiplier");
|
|
974
|
-
if (energyDivisor === undefined) {
|
|
975
|
-
energyDivisor = 1;
|
|
976
|
-
}
|
|
977
|
-
if (energyMultiplier === undefined) {
|
|
978
|
-
energyMultiplier = 1;
|
|
979
|
-
}
|
|
980
|
-
const data = msg.data.currentTier4SummDelivered;
|
|
981
|
-
result.energy_tier_4 = (data / energyDivisor) * energyMultiplier;
|
|
982
|
-
}
|
|
983
|
-
return result;
|
|
984
|
-
},
|
|
985
|
-
},
|
|
986
|
-
{
|
|
987
|
-
cluster: "seMetering",
|
|
988
|
-
type: ["attributeReport", "readResponse"],
|
|
989
|
-
convert: (model, msg, publish, options, meta) => {
|
|
990
|
-
const result = {};
|
|
991
|
-
if (msg.data[attrElCityMeterModelName] !== undefined) {
|
|
992
|
-
const data = msg.data[attrElCityMeterModelName];
|
|
909
|
+
if (msg.data.deviceName !== undefined) {
|
|
910
|
+
const data = msg.data.deviceName;
|
|
993
911
|
result.model_name = data.toString();
|
|
994
912
|
}
|
|
995
913
|
return result;
|
|
@@ -1012,8 +930,8 @@ const electricityMeterExtend = {
|
|
|
1012
930
|
type: ["attributeReport", "readResponse"],
|
|
1013
931
|
convert: (model, msg, publish, options, meta) => {
|
|
1014
932
|
const result = {};
|
|
1015
|
-
if (msg.data
|
|
1016
|
-
const data = msg.data
|
|
933
|
+
if (msg.data.dateRelease !== undefined) {
|
|
934
|
+
const data = msg.data.dateRelease;
|
|
1017
935
|
result.date_release = data.toString();
|
|
1018
936
|
}
|
|
1019
937
|
return result;
|
|
@@ -1051,18 +969,114 @@ const electricityMeterExtend = {
|
|
|
1051
969
|
type: ["readResponse"],
|
|
1052
970
|
convert: (model, msg, publish, options, meta) => {
|
|
1053
971
|
const result = {};
|
|
1054
|
-
if (msg.data
|
|
1055
|
-
|
|
1056
|
-
result.device_measurement_preset = data;
|
|
972
|
+
if (msg.data.readPeriod !== undefined) {
|
|
973
|
+
result.device_measurement_preset = msg.data.readPeriod; //data;
|
|
1057
974
|
}
|
|
1058
975
|
return result;
|
|
1059
976
|
},
|
|
1060
977
|
},
|
|
1061
978
|
];
|
|
979
|
+
const configure = [
|
|
980
|
+
async (device, coordinatorEndpoint, definition) => {
|
|
981
|
+
const endpoint1 = device.getEndpoint(1);
|
|
982
|
+
await endpoint1.read("seMetering", ["currentTier1SummDelivered"]);
|
|
983
|
+
await endpoint1.read("seMetering", ["currentTier2SummDelivered"]);
|
|
984
|
+
await endpoint1.read("seMetering", ["currentTier3SummDelivered"]);
|
|
985
|
+
await endpoint1.read("seMetering", ["currentTier4SummDelivered"]);
|
|
986
|
+
await endpoint1.read("seMetering", ["meterSerialNumber"]);
|
|
987
|
+
await endpoint1.read("seMetering", ["deviceName"]);
|
|
988
|
+
await endpoint1.read("seMetering", ["readPeriod"]);
|
|
989
|
+
await endpoint1.read("seMetering", ["deviceModel"]);
|
|
990
|
+
await endpoint1.read("seMetering", ["dateRelease"]);
|
|
991
|
+
await endpoint1.read("seMetering", ["remainingBattLife", "status"]);
|
|
992
|
+
await reporting.bind(endpoint1, coordinatorEndpoint, ["seMetering"]);
|
|
993
|
+
await endpoint1.configureReporting("seMetering", [
|
|
994
|
+
{
|
|
995
|
+
attribute: "currentTier1SummDelivered",
|
|
996
|
+
minimumReportInterval: 0,
|
|
997
|
+
maximumReportInterval: 3600,
|
|
998
|
+
reportableChange: 0,
|
|
999
|
+
},
|
|
1000
|
+
]);
|
|
1001
|
+
await endpoint1.configureReporting("seMetering", [
|
|
1002
|
+
{
|
|
1003
|
+
attribute: "currentTier2SummDelivered",
|
|
1004
|
+
minimumReportInterval: 0,
|
|
1005
|
+
maximumReportInterval: 3600,
|
|
1006
|
+
reportableChange: 0,
|
|
1007
|
+
},
|
|
1008
|
+
]);
|
|
1009
|
+
await endpoint1.configureReporting("seMetering", [
|
|
1010
|
+
{
|
|
1011
|
+
attribute: "currentTier3SummDelivered",
|
|
1012
|
+
minimumReportInterval: 0,
|
|
1013
|
+
maximumReportInterval: 3600,
|
|
1014
|
+
reportableChange: 0,
|
|
1015
|
+
},
|
|
1016
|
+
]);
|
|
1017
|
+
await endpoint1.configureReporting("seMetering", [
|
|
1018
|
+
{
|
|
1019
|
+
attribute: "currentTier4SummDelivered",
|
|
1020
|
+
minimumReportInterval: 0,
|
|
1021
|
+
maximumReportInterval: 3600,
|
|
1022
|
+
reportableChange: 0,
|
|
1023
|
+
},
|
|
1024
|
+
]);
|
|
1025
|
+
await endpoint1.configureReporting("seMetering", [
|
|
1026
|
+
{
|
|
1027
|
+
attribute: "currentSummDelivered",
|
|
1028
|
+
minimumReportInterval: 0,
|
|
1029
|
+
maximumReportInterval: 3600,
|
|
1030
|
+
reportableChange: 0,
|
|
1031
|
+
},
|
|
1032
|
+
]);
|
|
1033
|
+
await endpoint1.configureReporting("seMetering", [
|
|
1034
|
+
{
|
|
1035
|
+
attribute: "status",
|
|
1036
|
+
minimumReportInterval: 0,
|
|
1037
|
+
maximumReportInterval: 3600,
|
|
1038
|
+
reportableChange: 0,
|
|
1039
|
+
},
|
|
1040
|
+
]);
|
|
1041
|
+
await endpoint1.configureReporting("seMetering", [
|
|
1042
|
+
{
|
|
1043
|
+
attribute: "remainingBattLife",
|
|
1044
|
+
minimumReportInterval: 0,
|
|
1045
|
+
maximumReportInterval: 3600,
|
|
1046
|
+
reportableChange: 0,
|
|
1047
|
+
},
|
|
1048
|
+
]);
|
|
1049
|
+
await endpoint1.configureReporting("seMetering", [
|
|
1050
|
+
{
|
|
1051
|
+
attribute: "meterSerialNumber",
|
|
1052
|
+
minimumReportInterval: 0,
|
|
1053
|
+
maximumReportInterval: 3600,
|
|
1054
|
+
reportableChange: 0,
|
|
1055
|
+
},
|
|
1056
|
+
]);
|
|
1057
|
+
await endpoint1.configureReporting("seMetering", [
|
|
1058
|
+
{
|
|
1059
|
+
attribute: "dateRelease",
|
|
1060
|
+
minimumReportInterval: 0,
|
|
1061
|
+
maximumReportInterval: 3600,
|
|
1062
|
+
reportableChange: 0,
|
|
1063
|
+
},
|
|
1064
|
+
]);
|
|
1065
|
+
await endpoint1.configureReporting("seMetering", [
|
|
1066
|
+
{
|
|
1067
|
+
attribute: "deviceName",
|
|
1068
|
+
minimumReportInterval: 0,
|
|
1069
|
+
maximumReportInterval: 3600,
|
|
1070
|
+
reportableChange: 0,
|
|
1071
|
+
},
|
|
1072
|
+
]);
|
|
1073
|
+
},
|
|
1074
|
+
];
|
|
1062
1075
|
return {
|
|
1063
1076
|
exposes,
|
|
1064
1077
|
fromZigbee,
|
|
1065
1078
|
toZigbee,
|
|
1079
|
+
configure,
|
|
1066
1080
|
isModernExtend: true,
|
|
1067
1081
|
};
|
|
1068
1082
|
},
|
|
@@ -1347,73 +1361,51 @@ exports.definitions = [
|
|
|
1347
1361
|
model: "Electricity Meter TLSR8258",
|
|
1348
1362
|
vendor: "Slacky-DIY",
|
|
1349
1363
|
description: "Electricity Meter via optical port",
|
|
1350
|
-
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1351
|
-
const endpoint1 = device.getEndpoint(1);
|
|
1352
|
-
await endpoint1.read("seMetering", ["remainingBattLife", "status", attrElCityMeterMeasurementPreset]);
|
|
1353
|
-
await endpoint1.read("seMetering", ["divisor"]);
|
|
1354
|
-
await endpoint1.read("seMetering", ["multiplier"]);
|
|
1355
|
-
await endpoint1.read("seMetering", ["currentTier1SummDelivered"]);
|
|
1356
|
-
await endpoint1.read("seMetering", ["currentTier2SummDelivered"]);
|
|
1357
|
-
await endpoint1.read("seMetering", ["currentTier3SummDelivered"]);
|
|
1358
|
-
await endpoint1.read("seMetering", ["currentTier4SummDelivered"]);
|
|
1359
|
-
await endpoint1.read("seMetering", ["currentSummDelivered"]);
|
|
1360
|
-
await endpoint1.read("seMetering", ["meterSerialNumber"]);
|
|
1361
|
-
await endpoint1.read("seMetering", [attrElCityMeterMeasurementPreset]);
|
|
1362
|
-
await endpoint1.read("seMetering", [attrElCityMeterModelName]);
|
|
1363
|
-
// await endpoint1.read("haElectricalMeasurement", ["acVoltageDivisor"]);
|
|
1364
|
-
// await endpoint1.read("haElectricalMeasurement", ["acVoltageMultiplier"]);
|
|
1365
|
-
// await endpoint1.read("haElectricalMeasurement", ["rmsVoltage"]);
|
|
1366
|
-
// await endpoint1.read("haElectricalMeasurement", ["acCurrentDivisor"]);
|
|
1367
|
-
// await endpoint1.read("haElectricalMeasurement", ["acCurrentMultiplier"]);
|
|
1368
|
-
// await endpoint1.read("haElectricalMeasurement", ["instantaneousLineCurrent"]);
|
|
1369
|
-
// await endpoint1.read("haElectricalMeasurement", ["acPowerDivisor"]);
|
|
1370
|
-
// await endpoint1.read("haElectricalMeasurement", ["acPowerMultiplier"]);
|
|
1371
|
-
// await endpoint1.read("haElectricalMeasurement", ["apparentPower"]);
|
|
1372
|
-
await reporting.bind(endpoint1, coordinatorEndpoint, ["seMetering", "haElectricalMeasurement", "genDeviceTempCfg"]);
|
|
1373
|
-
const payload_tier1 = [{ attribute: { ID: 0x0100, type: 0x25 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1374
|
-
await endpoint1.configureReporting("seMetering", payload_tier1);
|
|
1375
|
-
const payload_tier2 = [{ attribute: { ID: 0x0102, type: 0x25 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1376
|
-
await endpoint1.configureReporting("seMetering", payload_tier2);
|
|
1377
|
-
const payload_tier3 = [{ attribute: { ID: 0x0104, type: 0x25 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1378
|
-
await endpoint1.configureReporting("seMetering", payload_tier3);
|
|
1379
|
-
const payload_tier4 = [{ attribute: { ID: 0x0106, type: 0x25 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1380
|
-
await endpoint1.configureReporting("seMetering", payload_tier4);
|
|
1381
|
-
await reporting.currentSummDelivered(endpoint1, { min: 0, max: 300, change: 0 });
|
|
1382
|
-
const payload_status = [{ attribute: { ID: 0x0200, type: 0x18 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1383
|
-
await endpoint1.configureReporting("seMetering", payload_status);
|
|
1384
|
-
const payload_battery_life = [
|
|
1385
|
-
{ attribute: { ID: 0x0201, type: 0x20 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1386
|
-
];
|
|
1387
|
-
await endpoint1.configureReporting("seMetering", payload_battery_life);
|
|
1388
|
-
const payload_serial_number = [
|
|
1389
|
-
{ attribute: { ID: 0x0308, type: 0x41 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1390
|
-
];
|
|
1391
|
-
await endpoint1.configureReporting("seMetering", payload_serial_number);
|
|
1392
|
-
const payload_date_release = [
|
|
1393
|
-
{ attribute: { ID: attrElCityMeterDateRelease, type: 0x41 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1394
|
-
];
|
|
1395
|
-
await endpoint1.configureReporting("seMetering", payload_date_release);
|
|
1396
|
-
const payload_model_name = [
|
|
1397
|
-
{ attribute: { ID: attrElCityMeterModelName, type: 0x41 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1398
|
-
];
|
|
1399
|
-
await endpoint1.configureReporting("seMetering", payload_model_name);
|
|
1400
|
-
// await reporting.rmsVoltage(endpoint1, {min: 0, max: 300, change: 0});
|
|
1401
|
-
// const payload_current = [
|
|
1402
|
-
// {attribute: {ID: 0x0501, type: 0x21}, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0},
|
|
1403
|
-
// ];
|
|
1404
|
-
// await endpoint1.configureReporting("haElectricalMeasurement", payload_current);
|
|
1405
|
-
// await reporting.apparentPower(endpoint1, {min: 0, max: 300, change: 0});
|
|
1406
|
-
const payload_temperature = [
|
|
1407
|
-
{ attribute: { ID: 0x0000, type: 0x29 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1408
|
-
];
|
|
1409
|
-
await endpoint1.configureReporting("genDeviceTempCfg", payload_temperature);
|
|
1410
|
-
},
|
|
1411
1364
|
extend: [
|
|
1365
|
+
m.deviceAddCustomCluster("seMetering", {
|
|
1366
|
+
ID: 0x0702,
|
|
1367
|
+
attributes: {
|
|
1368
|
+
deviceModel: {
|
|
1369
|
+
ID: attrElCityMeterModelPreset,
|
|
1370
|
+
type: 0x30,
|
|
1371
|
+
write: true,
|
|
1372
|
+
max: 0xff,
|
|
1373
|
+
},
|
|
1374
|
+
deviceAddress: {
|
|
1375
|
+
ID: attrElCityMeterAddressPreset,
|
|
1376
|
+
type: 0x23,
|
|
1377
|
+
write: true,
|
|
1378
|
+
max: 0xffffffff,
|
|
1379
|
+
},
|
|
1380
|
+
readPeriod: {
|
|
1381
|
+
ID: attrElCityMeterMeasurementPreset,
|
|
1382
|
+
type: 0x20,
|
|
1383
|
+
write: true,
|
|
1384
|
+
max: 0xff,
|
|
1385
|
+
},
|
|
1386
|
+
dateRelease: {
|
|
1387
|
+
ID: attrElCityMeterDateRelease,
|
|
1388
|
+
type: 0x41,
|
|
1389
|
+
},
|
|
1390
|
+
deviceName: {
|
|
1391
|
+
ID: attrElCityMeterModelName,
|
|
1392
|
+
type: 0x41,
|
|
1393
|
+
},
|
|
1394
|
+
devicePassword: {
|
|
1395
|
+
ID: attrElCityMeterPasswordPreset,
|
|
1396
|
+
write: true,
|
|
1397
|
+
type: 0x41,
|
|
1398
|
+
},
|
|
1399
|
+
},
|
|
1400
|
+
commands: {},
|
|
1401
|
+
commandsResponse: {},
|
|
1402
|
+
}),
|
|
1412
1403
|
m.deviceTemperature(),
|
|
1413
1404
|
m.electricityMeter(),
|
|
1414
1405
|
electricityMeterExtend.elMeter(),
|
|
1415
|
-
|
|
1406
|
+
electricityDeviceModel({
|
|
1416
1407
|
name: "device_model_preset",
|
|
1408
|
+
access: "STATE_SET",
|
|
1417
1409
|
lookup: {
|
|
1418
1410
|
no_device: 0,
|
|
1419
1411
|
"KASKAD-1-MT (MIRTEK)": 1,
|
|
@@ -1426,7 +1418,7 @@ exports.definitions = [
|
|
|
1426
1418
|
"NARTIS-I100": 8,
|
|
1427
1419
|
},
|
|
1428
1420
|
cluster: "seMetering",
|
|
1429
|
-
attribute:
|
|
1421
|
+
attribute: "deviceModel",
|
|
1430
1422
|
description: "Device Model",
|
|
1431
1423
|
}),
|
|
1432
1424
|
],
|
|
@@ -1437,79 +1429,57 @@ exports.definitions = [
|
|
|
1437
1429
|
model: "ElectricityMeter-ABC-DIY",
|
|
1438
1430
|
vendor: "Slacky-DIY",
|
|
1439
1431
|
description: "Three phase Electricity Meter via optical port",
|
|
1440
|
-
configure: async (device, coordinatorEndpoint, logger) => {
|
|
1441
|
-
const endpoint1 = device.getEndpoint(1);
|
|
1442
|
-
await endpoint1.read("seMetering", ["remainingBattLife", "status", attrElCityMeterMeasurementPreset]);
|
|
1443
|
-
await endpoint1.read("seMetering", ["divisor"]);
|
|
1444
|
-
await endpoint1.read("seMetering", ["multiplier"]);
|
|
1445
|
-
await endpoint1.read("seMetering", ["currentTier1SummDelivered"]);
|
|
1446
|
-
await endpoint1.read("seMetering", ["currentTier2SummDelivered"]);
|
|
1447
|
-
await endpoint1.read("seMetering", ["currentTier3SummDelivered"]);
|
|
1448
|
-
await endpoint1.read("seMetering", ["currentTier4SummDelivered"]);
|
|
1449
|
-
await endpoint1.read("seMetering", ["currentSummDelivered"]);
|
|
1450
|
-
await endpoint1.read("seMetering", ["meterSerialNumber"]);
|
|
1451
|
-
await endpoint1.read("seMetering", [attrElCityMeterMeasurementPreset]);
|
|
1452
|
-
await endpoint1.read("seMetering", [attrElCityMeterModelName]);
|
|
1453
|
-
// await endpoint1.read("haElectricalMeasurement", ["acVoltageDivisor"]);
|
|
1454
|
-
// await endpoint1.read("haElectricalMeasurement", ["acVoltageMultiplier"]);
|
|
1455
|
-
// await endpoint1.read("haElectricalMeasurement", ["rmsVoltage"]);
|
|
1456
|
-
// await endpoint1.read("haElectricalMeasurement", ["acCurrentDivisor"]);
|
|
1457
|
-
// await endpoint1.read("haElectricalMeasurement", ["acCurrentMultiplier"]);
|
|
1458
|
-
// await endpoint1.read("haElectricalMeasurement", ["instantaneousLineCurrent"]);
|
|
1459
|
-
// await endpoint1.read("haElectricalMeasurement", ["acPowerDivisor"]);
|
|
1460
|
-
// await endpoint1.read("haElectricalMeasurement", ["acPowerMultiplier"]);
|
|
1461
|
-
// await endpoint1.read("haElectricalMeasurement", ["apparentPower"]);
|
|
1462
|
-
await reporting.bind(endpoint1, coordinatorEndpoint, ["seMetering", "haElectricalMeasurement", "genDeviceTempCfg"]);
|
|
1463
|
-
const payload_tier1 = [{ attribute: { ID: 0x0100, type: 0x25 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1464
|
-
await endpoint1.configureReporting("seMetering", payload_tier1);
|
|
1465
|
-
const payload_tier2 = [{ attribute: { ID: 0x0102, type: 0x25 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1466
|
-
await endpoint1.configureReporting("seMetering", payload_tier2);
|
|
1467
|
-
const payload_tier3 = [{ attribute: { ID: 0x0104, type: 0x25 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1468
|
-
await endpoint1.configureReporting("seMetering", payload_tier3);
|
|
1469
|
-
const payload_tier4 = [{ attribute: { ID: 0x0106, type: 0x25 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1470
|
-
await endpoint1.configureReporting("seMetering", payload_tier4);
|
|
1471
|
-
await reporting.currentSummDelivered(endpoint1, { min: 0, max: 300, change: 0 });
|
|
1472
|
-
const payload_status = [{ attribute: { ID: 0x0200, type: 0x18 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 }];
|
|
1473
|
-
await endpoint1.configureReporting("seMetering", payload_status);
|
|
1474
|
-
const payload_battery_life = [
|
|
1475
|
-
{ attribute: { ID: 0x0201, type: 0x20 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1476
|
-
];
|
|
1477
|
-
await endpoint1.configureReporting("seMetering", payload_battery_life);
|
|
1478
|
-
const payload_serial_number = [
|
|
1479
|
-
{ attribute: { ID: 0x0308, type: 0x41 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1480
|
-
];
|
|
1481
|
-
await endpoint1.configureReporting("seMetering", payload_serial_number);
|
|
1482
|
-
const payload_date_release = [
|
|
1483
|
-
{ attribute: { ID: attrElCityMeterDateRelease, type: 0x41 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1484
|
-
];
|
|
1485
|
-
await endpoint1.configureReporting("seMetering", payload_date_release);
|
|
1486
|
-
const payload_model_name = [
|
|
1487
|
-
{ attribute: { ID: attrElCityMeterModelName, type: 0x41 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1488
|
-
];
|
|
1489
|
-
await endpoint1.configureReporting("seMetering", payload_model_name);
|
|
1490
|
-
// await reporting.rmsVoltage(endpoint1, {min: 0, max: 300, change: 0});
|
|
1491
|
-
// const payload_current = [
|
|
1492
|
-
// {attribute: {ID: 0x0501, type: 0x21}, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0},
|
|
1493
|
-
// ];
|
|
1494
|
-
// await endpoint1.configureReporting("haElectricalMeasurement", payload_current);
|
|
1495
|
-
// await reporting.apparentPower(endpoint1, {min: 0, max: 300, change: 0});
|
|
1496
|
-
const payload_temperature = [
|
|
1497
|
-
{ attribute: { ID: 0x0000, type: 0x29 }, minimumReportInterval: 0, maximumReportInterval: 300, reportableChange: 0 },
|
|
1498
|
-
];
|
|
1499
|
-
await endpoint1.configureReporting("genDeviceTempCfg", payload_temperature);
|
|
1500
|
-
},
|
|
1501
1432
|
extend: [
|
|
1433
|
+
m.deviceAddCustomCluster("seMetering", {
|
|
1434
|
+
ID: 0x0702,
|
|
1435
|
+
attributes: {
|
|
1436
|
+
deviceModel: {
|
|
1437
|
+
ID: attrElCityMeterModelPreset,
|
|
1438
|
+
type: 0x30,
|
|
1439
|
+
write: true,
|
|
1440
|
+
max: 0xff,
|
|
1441
|
+
},
|
|
1442
|
+
deviceAddress: {
|
|
1443
|
+
ID: attrElCityMeterAddressPreset,
|
|
1444
|
+
type: 0x23,
|
|
1445
|
+
write: true,
|
|
1446
|
+
max: 0xffffffff,
|
|
1447
|
+
},
|
|
1448
|
+
readPeriod: {
|
|
1449
|
+
ID: attrElCityMeterMeasurementPreset,
|
|
1450
|
+
type: 0x20,
|
|
1451
|
+
write: true,
|
|
1452
|
+
max: 0xff,
|
|
1453
|
+
},
|
|
1454
|
+
dateRelease: {
|
|
1455
|
+
ID: attrElCityMeterDateRelease,
|
|
1456
|
+
type: 0x41,
|
|
1457
|
+
},
|
|
1458
|
+
deviceName: {
|
|
1459
|
+
ID: attrElCityMeterModelName,
|
|
1460
|
+
type: 0x41,
|
|
1461
|
+
},
|
|
1462
|
+
devicePassword: {
|
|
1463
|
+
ID: attrElCityMeterPasswordPreset,
|
|
1464
|
+
write: true,
|
|
1465
|
+
type: 0x41,
|
|
1466
|
+
},
|
|
1467
|
+
},
|
|
1468
|
+
commands: {},
|
|
1469
|
+
commandsResponse: {},
|
|
1470
|
+
}),
|
|
1502
1471
|
m.deviceTemperature(),
|
|
1503
1472
|
m.electricityMeter({ threePhase: true }),
|
|
1504
1473
|
electricityMeterExtend.elMeter(),
|
|
1505
|
-
|
|
1474
|
+
electricityDeviceModel({
|
|
1506
1475
|
name: "device_model_preset",
|
|
1476
|
+
access: "STATE_SET",
|
|
1507
1477
|
lookup: {
|
|
1508
1478
|
no_device: 0,
|
|
1509
1479
|
"NARTIS-I300": 1,
|
|
1510
1480
|
},
|
|
1511
1481
|
cluster: "seMetering",
|
|
1512
|
-
attribute:
|
|
1482
|
+
attribute: "deviceModel",
|
|
1513
1483
|
description: "Device Model",
|
|
1514
1484
|
}),
|
|
1515
1485
|
],
|