matterbridge 1.5.0 → 1.5.1
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 +16 -2
- package/README-DEV.md +2 -2
- package/README.md +2 -2
- package/dist/cluster/export.d.ts +23 -0
- package/dist/cluster/export.d.ts.map +1 -0
- package/dist/cluster/export.js +23 -0
- package/dist/cluster/export.js.map +1 -0
- package/dist/index.d.ts +0 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/matterbridgeDevice.d.ts +190 -114
- package/dist/matterbridgeDevice.d.ts.map +1 -1
- package/dist/matterbridgeDevice.js +379 -189
- package/dist/matterbridgeDevice.js.map +1 -1
- package/dist/utils/utils.d.ts +1 -1
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +19 -19
- package/dist/utils/utils.js.map +1 -1
- package/package.json +10 -10
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
* @file matterbridgeDevice.ts
|
|
5
5
|
* @author Luca Liguori
|
|
6
6
|
* @date 2023-12-29
|
|
7
|
-
* @version 1.
|
|
7
|
+
* @version 1.2.0
|
|
8
8
|
*
|
|
9
9
|
* Copyright 2023, 2024 Luca Liguori.
|
|
10
10
|
*
|
|
@@ -24,7 +24,7 @@ import { BasicInformationCluster, BooleanState, BooleanStateCluster, ClusterServ
|
|
|
24
24
|
import { EndpointNumber, GroupId, VendorId } from '@project-chip/matter-node.js/datatype';
|
|
25
25
|
import { Device, DeviceClasses, DeviceTypeDefinition, Endpoint } from '@project-chip/matter-node.js/device';
|
|
26
26
|
import { extendPublicHandlerMethods } from '@project-chip/matter-node.js/util';
|
|
27
|
-
import { EveHistory,
|
|
27
|
+
import { EveHistory, MatterHistory } from 'matter-history';
|
|
28
28
|
import { AnsiLogger, CYAN, YELLOW, db, debugStringify, hk, or, zb } from 'node-ansi-logger';
|
|
29
29
|
import { AirQuality, AirQualityCluster } from './cluster/AirQualityCluster.js';
|
|
30
30
|
import { createHash } from 'crypto';
|
|
@@ -409,7 +409,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
409
409
|
if (includeServerList.includes(LevelControl.Cluster.id))
|
|
410
410
|
endpoint.addClusterServer(this.getDefaultLevelControlClusterServer());
|
|
411
411
|
if (includeServerList.includes(ColorControl.Cluster.id))
|
|
412
|
-
endpoint.addClusterServer(this.
|
|
412
|
+
endpoint.addClusterServer(this.getDefaultCompleteColorControlClusterServer());
|
|
413
413
|
if (includeServerList.includes(Switch.Cluster.id))
|
|
414
414
|
endpoint.addClusterServer(this.getDefaultSwitchClusterServer());
|
|
415
415
|
if (includeServerList.includes(DoorLock.Cluster.id))
|
|
@@ -600,19 +600,19 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
600
600
|
const clusterServer = endpoint.getClusterServerById(clusterId);
|
|
601
601
|
if (!clusterServer) {
|
|
602
602
|
log?.error(`setAttribute error: Cluster ${clusterId} not found on endpoint ${endpoint.name}:${endpoint.number}`);
|
|
603
|
-
return;
|
|
603
|
+
return false;
|
|
604
604
|
}
|
|
605
605
|
const capitalizedAttributeName = attribute.charAt(0).toUpperCase() + attribute.slice(1);
|
|
606
606
|
if (!clusterServer.isAttributeSupportedByName(attribute) && !clusterServer.isAttributeSupportedByName(capitalizedAttributeName)) {
|
|
607
607
|
if (log)
|
|
608
608
|
log.error(`setAttribute error: Attribute ${attribute} not found on Cluster ${clusterId} on endpoint ${endpoint.name}:${endpoint.number}`);
|
|
609
|
-
return;
|
|
609
|
+
return false;
|
|
610
610
|
}
|
|
611
611
|
// Find the getter method
|
|
612
612
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
613
613
|
if (!clusterServer[`get${capitalizedAttributeName}Attribute`]) {
|
|
614
614
|
log?.error(`setAttribute error: Getter get${capitalizedAttributeName}Attribute not found on Cluster ${clusterServer.name} on endpoint ${endpoint.name}:${endpoint.number}`);
|
|
615
|
-
return;
|
|
615
|
+
return false;
|
|
616
616
|
}
|
|
617
617
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-object-type
|
|
618
618
|
const getter = clusterServer[`get${capitalizedAttributeName}Attribute`];
|
|
@@ -620,7 +620,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
620
620
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
621
621
|
if (!clusterServer[`set${capitalizedAttributeName}Attribute`]) {
|
|
622
622
|
log?.error(`setAttribute error: Setter set${capitalizedAttributeName}Attribute not found on Cluster ${clusterServer.name} on endpoint ${endpoint.name}:${endpoint.number}`);
|
|
623
|
-
return;
|
|
623
|
+
return false;
|
|
624
624
|
}
|
|
625
625
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-empty-object-type
|
|
626
626
|
const setter = clusterServer[`set${capitalizedAttributeName}Attribute`];
|
|
@@ -629,6 +629,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
629
629
|
log?.info(`${db}Set endpoint ${or}${endpoint.name}:${endpoint.number}${db} attribute ${hk}${clusterServer.name}.${capitalizedAttributeName}${db} ` +
|
|
630
630
|
`from ${YELLOW}${typeof oldValue === 'object' ? debugStringify(oldValue) : oldValue}${db} ` +
|
|
631
631
|
`to ${YELLOW}${typeof value === 'object' ? debugStringify(value) : value}${db}`);
|
|
632
|
+
return true;
|
|
632
633
|
}
|
|
633
634
|
/**
|
|
634
635
|
* Serializes the Matterbridge device into a serialized object.
|
|
@@ -691,27 +692,34 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
691
692
|
* @param consumption - The consumption value (default: 0).
|
|
692
693
|
* @returns The default static EveHistoryClusterServer object.
|
|
693
694
|
*/
|
|
695
|
+
/*
|
|
694
696
|
getDefaultStaticEveHistoryClusterServer(voltage = 0, current = 0, power = 0, consumption = 0) {
|
|
695
|
-
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
|
|
701
|
-
|
|
702
|
-
|
|
703
|
-
|
|
704
|
-
|
|
705
|
-
|
|
706
|
-
|
|
707
|
-
|
|
708
|
-
|
|
709
|
-
|
|
710
|
-
|
|
711
|
-
|
|
712
|
-
|
|
713
|
-
|
|
697
|
+
return ClusterServer(
|
|
698
|
+
EveHistoryCluster.with(EveHistory.Feature.EveEnergy),
|
|
699
|
+
{
|
|
700
|
+
// Dynamic attributes
|
|
701
|
+
ConfigDataGet: Uint8Array.fromHex(''),
|
|
702
|
+
ConfigDataSet: Uint8Array.fromHex(''),
|
|
703
|
+
HistoryStatus: Uint8Array.fromHex(''),
|
|
704
|
+
HistoryEntries: Uint8Array.fromHex(''),
|
|
705
|
+
HistoryRequest: Uint8Array.fromHex(''),
|
|
706
|
+
HistorySetTime: Uint8Array.fromHex(''),
|
|
707
|
+
LastEvent: 0,
|
|
708
|
+
ResetTotal: 0,
|
|
709
|
+
// Normal static attributes
|
|
710
|
+
Voltage: voltage,
|
|
711
|
+
Current: current,
|
|
712
|
+
Consumption: power,
|
|
713
|
+
TotalConsumption: consumption,
|
|
714
|
+
EnergyUnknown: 1,
|
|
715
|
+
ChildLock: false,
|
|
716
|
+
RLoc: 46080,
|
|
717
|
+
},
|
|
718
|
+
{},
|
|
719
|
+
{},
|
|
720
|
+
);
|
|
714
721
|
}
|
|
722
|
+
*/
|
|
715
723
|
/**
|
|
716
724
|
* Create a default static EveHistoryClusterServer object with the specified voltage, current, power, and consumption values.
|
|
717
725
|
* This shows up in HA as a static sensor!
|
|
@@ -722,9 +730,11 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
722
730
|
* @param consumption - The consumption value (default: 0).
|
|
723
731
|
* @returns The default static EveHistoryClusterServer object.
|
|
724
732
|
*/
|
|
733
|
+
/*
|
|
725
734
|
createDefaultStaticEveHistoryClusterServer(voltage = 0, current = 0, power = 0, consumption = 0) {
|
|
726
|
-
|
|
735
|
+
this.addClusterServer(this.getDefaultStaticEveHistoryClusterServer(voltage, current, power, consumption));
|
|
727
736
|
}
|
|
737
|
+
*/
|
|
728
738
|
/**
|
|
729
739
|
* Creates a room Eve History Cluster Server.
|
|
730
740
|
* @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
|
|
@@ -732,9 +742,13 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
732
742
|
* @param history - The MatterHistory object.
|
|
733
743
|
* @param log - The AnsiLogger object.
|
|
734
744
|
*/
|
|
735
|
-
|
|
736
|
-
|
|
737
|
-
|
|
745
|
+
/*
|
|
746
|
+
createRoomEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
|
|
747
|
+
history.setMatterHystoryType('room', this.serialNumber);
|
|
748
|
+
this.addClusterServer(
|
|
749
|
+
ClusterServer(
|
|
750
|
+
EveHistoryCluster.with(EveHistory.Feature.EveRoom),
|
|
751
|
+
{
|
|
738
752
|
// Dynamic attributes
|
|
739
753
|
ConfigDataGet: Uint8Array.fromHex(''),
|
|
740
754
|
ConfigDataSet: Uint8Array.fromHex(''),
|
|
@@ -743,47 +757,57 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
743
757
|
HistoryRequest: Uint8Array.fromHex(''),
|
|
744
758
|
HistorySetTime: Uint8Array.fromHex(''),
|
|
745
759
|
// Normal attributes
|
|
746
|
-
TemperatureDisplayUnits:
|
|
760
|
+
TemperatureDisplayUnits: TemperatureDisplayUnits.CELSIUS,
|
|
747
761
|
RLoc: 46080,
|
|
748
|
-
|
|
762
|
+
},
|
|
763
|
+
{
|
|
749
764
|
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
750
|
-
|
|
751
|
-
|
|
765
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
766
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
752
767
|
},
|
|
768
|
+
|
|
753
769
|
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
754
|
-
|
|
755
|
-
|
|
770
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
771
|
+
return Uint8Array.fromHex('');
|
|
756
772
|
},
|
|
757
|
-
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
758
|
-
|
|
759
|
-
|
|
773
|
+
ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
774
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
775
|
+
return history.OnSetConfigData(value);
|
|
760
776
|
},
|
|
777
|
+
|
|
761
778
|
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
762
|
-
|
|
763
|
-
|
|
779
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
780
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
764
781
|
},
|
|
782
|
+
|
|
765
783
|
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
766
|
-
|
|
767
|
-
|
|
784
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
785
|
+
return history.OnGetHistoryEntries();
|
|
768
786
|
},
|
|
787
|
+
|
|
769
788
|
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
770
|
-
|
|
771
|
-
|
|
789
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
790
|
+
return Uint8Array.fromHex('');
|
|
772
791
|
},
|
|
773
|
-
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
774
|
-
|
|
775
|
-
|
|
792
|
+
HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
793
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
794
|
+
return history.OnSetHistorySetTime(value);
|
|
776
795
|
},
|
|
796
|
+
|
|
777
797
|
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
778
|
-
|
|
779
|
-
|
|
798
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
799
|
+
return Uint8Array.fromHex('');
|
|
780
800
|
},
|
|
781
|
-
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
782
|
-
|
|
783
|
-
|
|
801
|
+
HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
802
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
803
|
+
return history.OnSetHistoryRequest(value);
|
|
784
804
|
},
|
|
785
|
-
|
|
805
|
+
},
|
|
806
|
+
{},
|
|
807
|
+
),
|
|
808
|
+
);
|
|
786
809
|
}
|
|
810
|
+
*/
|
|
787
811
|
/**
|
|
788
812
|
* Creates a Weather Eve History Cluster Server.
|
|
789
813
|
* @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
|
|
@@ -791,9 +815,13 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
791
815
|
* @param history - The MatterHistory instance.
|
|
792
816
|
* @param log - The AnsiLogger instance.
|
|
793
817
|
*/
|
|
794
|
-
|
|
795
|
-
|
|
796
|
-
|
|
818
|
+
/*
|
|
819
|
+
createWeatherEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
|
|
820
|
+
history.setMatterHystoryType('weather', this.serialNumber);
|
|
821
|
+
this.addClusterServer(
|
|
822
|
+
ClusterServer(
|
|
823
|
+
EveHistoryCluster.with(EveHistory.Feature.EveWeather),
|
|
824
|
+
{
|
|
797
825
|
// Dynamic attributes
|
|
798
826
|
ConfigDataGet: Uint8Array.fromHex(''),
|
|
799
827
|
ConfigDataSet: Uint8Array.fromHex(''),
|
|
@@ -804,48 +832,58 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
804
832
|
// Normal attributes
|
|
805
833
|
Elevation: 0,
|
|
806
834
|
AirPressure: 1000,
|
|
807
|
-
WeatherTrend:
|
|
808
|
-
TemperatureDisplayUnits:
|
|
835
|
+
WeatherTrend: WeatherTrend.SUN,
|
|
836
|
+
TemperatureDisplayUnits: TemperatureDisplayUnits.CELSIUS,
|
|
809
837
|
RLoc: 46080,
|
|
810
|
-
|
|
838
|
+
},
|
|
839
|
+
{
|
|
811
840
|
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
812
|
-
|
|
813
|
-
|
|
841
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
842
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
814
843
|
},
|
|
844
|
+
|
|
815
845
|
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
816
|
-
|
|
817
|
-
|
|
846
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
847
|
+
return Uint8Array.fromHex('');
|
|
818
848
|
},
|
|
819
|
-
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
820
|
-
|
|
821
|
-
|
|
849
|
+
ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
850
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
851
|
+
return history.OnSetConfigData(value);
|
|
822
852
|
},
|
|
853
|
+
|
|
823
854
|
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
824
|
-
|
|
825
|
-
|
|
855
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
856
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
826
857
|
},
|
|
858
|
+
|
|
827
859
|
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
828
|
-
|
|
829
|
-
|
|
860
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
861
|
+
return history.OnGetHistoryEntries();
|
|
830
862
|
},
|
|
863
|
+
|
|
831
864
|
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
832
|
-
|
|
833
|
-
|
|
865
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
866
|
+
return Uint8Array.fromHex('');
|
|
834
867
|
},
|
|
835
|
-
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
836
|
-
|
|
837
|
-
|
|
868
|
+
HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
869
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
870
|
+
return history.OnSetHistorySetTime(value);
|
|
838
871
|
},
|
|
872
|
+
|
|
839
873
|
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
840
|
-
|
|
841
|
-
|
|
874
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
875
|
+
return Uint8Array.fromHex('');
|
|
842
876
|
},
|
|
843
|
-
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
844
|
-
|
|
845
|
-
|
|
877
|
+
HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
878
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
879
|
+
return history.OnSetHistoryRequest(value);
|
|
846
880
|
},
|
|
847
|
-
|
|
881
|
+
},
|
|
882
|
+
{},
|
|
883
|
+
),
|
|
884
|
+
);
|
|
848
885
|
}
|
|
886
|
+
*/
|
|
849
887
|
/**
|
|
850
888
|
* Creates an Energy Eve History Cluster Server.
|
|
851
889
|
* @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
|
|
@@ -853,9 +891,13 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
853
891
|
* @param history - The MatterHistory object.
|
|
854
892
|
* @param log - The AnsiLogger object.
|
|
855
893
|
*/
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
894
|
+
/*
|
|
895
|
+
createEnergyEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
|
|
896
|
+
history.setMatterHystoryType('energy');
|
|
897
|
+
this.addClusterServer(
|
|
898
|
+
ClusterServer(
|
|
899
|
+
EveHistoryCluster.with(EveHistory.Feature.EveEnergy),
|
|
900
|
+
{
|
|
859
901
|
// Dynamic attributes
|
|
860
902
|
ConfigDataGet: Uint8Array.fromHex(''),
|
|
861
903
|
ConfigDataSet: Uint8Array.fromHex(''),
|
|
@@ -873,57 +915,69 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
873
915
|
EnergyUnknown: 1,
|
|
874
916
|
ChildLock: false,
|
|
875
917
|
RLoc: 46080,
|
|
876
|
-
|
|
918
|
+
},
|
|
919
|
+
{
|
|
877
920
|
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
878
|
-
|
|
879
|
-
|
|
921
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
922
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
880
923
|
},
|
|
924
|
+
|
|
881
925
|
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
882
|
-
|
|
883
|
-
|
|
926
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
927
|
+
return Uint8Array.fromHex('');
|
|
884
928
|
},
|
|
885
|
-
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
886
|
-
|
|
887
|
-
|
|
929
|
+
ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
930
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
931
|
+
return history.OnSetConfigData(value);
|
|
888
932
|
},
|
|
933
|
+
|
|
889
934
|
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
890
|
-
|
|
891
|
-
|
|
935
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
936
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
892
937
|
},
|
|
938
|
+
|
|
893
939
|
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
894
|
-
|
|
895
|
-
|
|
940
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
941
|
+
return history.OnGetHistoryEntries();
|
|
896
942
|
},
|
|
943
|
+
|
|
897
944
|
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
898
|
-
|
|
899
|
-
|
|
945
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
946
|
+
return Uint8Array.fromHex('');
|
|
900
947
|
},
|
|
901
|
-
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
902
|
-
|
|
903
|
-
|
|
948
|
+
HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
949
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
950
|
+
return history.OnSetHistorySetTime(value);
|
|
904
951
|
},
|
|
952
|
+
|
|
905
953
|
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
906
|
-
|
|
907
|
-
|
|
954
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
955
|
+
return Uint8Array.fromHex('');
|
|
908
956
|
},
|
|
909
|
-
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
910
|
-
|
|
911
|
-
|
|
957
|
+
HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
958
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
959
|
+
return history.OnSetHistoryRequest(value);
|
|
912
960
|
},
|
|
961
|
+
|
|
913
962
|
LastEventAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
914
|
-
|
|
915
|
-
|
|
963
|
+
log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
964
|
+
return history.OnGetLastEvent();
|
|
916
965
|
},
|
|
966
|
+
|
|
917
967
|
ResetTotalAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
918
|
-
|
|
919
|
-
|
|
968
|
+
log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
969
|
+
return history.OnGetLastReset();
|
|
920
970
|
},
|
|
921
|
-
ResetTotalAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
922
|
-
|
|
923
|
-
|
|
971
|
+
ResetTotalAttributeSetter: (value: number, { attributes, endpoint, session }) => {
|
|
972
|
+
log.debug(`LastResetTotalAttributeSetter ${value} ${attributes.ResetTotal} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
973
|
+
return history.OnSetLastReset(value);
|
|
924
974
|
},
|
|
925
|
-
|
|
975
|
+
},
|
|
976
|
+
{},
|
|
977
|
+
),
|
|
978
|
+
);
|
|
926
979
|
}
|
|
980
|
+
*/
|
|
927
981
|
/**
|
|
928
982
|
* Creates a Motion Eve History Cluster Server.
|
|
929
983
|
* @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
|
|
@@ -931,9 +985,13 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
931
985
|
* @param history - The MatterHistory object.
|
|
932
986
|
* @param log - The AnsiLogger object.
|
|
933
987
|
*/
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
988
|
+
/*
|
|
989
|
+
createMotionEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
|
|
990
|
+
history.setMatterHystoryType('motion');
|
|
991
|
+
this.addClusterServer(
|
|
992
|
+
ClusterServer(
|
|
993
|
+
EveHistoryCluster.with(EveHistory.Feature.EveMotion),
|
|
994
|
+
{
|
|
937
995
|
// Dynamic attributes
|
|
938
996
|
ConfigDataGet: Uint8Array.fromHex(''),
|
|
939
997
|
ConfigDataSet: Uint8Array.fromHex(''),
|
|
@@ -943,51 +1001,62 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
943
1001
|
HistorySetTime: Uint8Array.fromHex(''),
|
|
944
1002
|
LastEvent: 0,
|
|
945
1003
|
// Normal attributes
|
|
946
|
-
MotionSensitivity:
|
|
1004
|
+
MotionSensitivity: Sensitivity.HIGH,
|
|
947
1005
|
RLoc: 46080,
|
|
948
|
-
|
|
1006
|
+
},
|
|
1007
|
+
{
|
|
949
1008
|
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
950
|
-
|
|
951
|
-
|
|
1009
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1010
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
952
1011
|
},
|
|
1012
|
+
|
|
953
1013
|
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
954
|
-
|
|
955
|
-
|
|
1014
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1015
|
+
return Uint8Array.fromHex('');
|
|
956
1016
|
},
|
|
957
|
-
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
958
|
-
|
|
959
|
-
|
|
1017
|
+
ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
1018
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
1019
|
+
return history.OnSetConfigData(value);
|
|
960
1020
|
},
|
|
1021
|
+
|
|
961
1022
|
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
962
|
-
|
|
963
|
-
|
|
1023
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1024
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
964
1025
|
},
|
|
1026
|
+
|
|
965
1027
|
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
966
|
-
|
|
967
|
-
|
|
1028
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1029
|
+
return history.OnGetHistoryEntries();
|
|
968
1030
|
},
|
|
1031
|
+
|
|
969
1032
|
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
970
|
-
|
|
971
|
-
|
|
1033
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1034
|
+
return Uint8Array.fromHex('');
|
|
972
1035
|
},
|
|
973
|
-
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
974
|
-
|
|
975
|
-
|
|
1036
|
+
HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
1037
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
1038
|
+
return history.OnSetHistorySetTime(value);
|
|
976
1039
|
},
|
|
1040
|
+
|
|
977
1041
|
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
978
|
-
|
|
979
|
-
|
|
1042
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1043
|
+
return Uint8Array.fromHex('');
|
|
980
1044
|
},
|
|
981
|
-
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
982
|
-
|
|
983
|
-
|
|
1045
|
+
HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
1046
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
1047
|
+
return history.OnSetHistoryRequest(value);
|
|
984
1048
|
},
|
|
1049
|
+
|
|
985
1050
|
LastEventAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
986
|
-
|
|
987
|
-
|
|
1051
|
+
log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1052
|
+
return history.OnGetLastEvent();
|
|
988
1053
|
},
|
|
989
|
-
|
|
1054
|
+
},
|
|
1055
|
+
{},
|
|
1056
|
+
),
|
|
1057
|
+
);
|
|
990
1058
|
}
|
|
1059
|
+
*/
|
|
991
1060
|
/**
|
|
992
1061
|
* Creates a door EveHistoryCluster server.
|
|
993
1062
|
* @deprecated This method is deprecated and will be removed in a future version. Use MatterHistory.
|
|
@@ -995,9 +1064,13 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
995
1064
|
* @param history - The MatterHistory instance.
|
|
996
1065
|
* @param log - The AnsiLogger instance.
|
|
997
1066
|
*/
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1067
|
+
/*
|
|
1068
|
+
createDoorEveHistoryClusterServer(history: MatterHistory, log: AnsiLogger) {
|
|
1069
|
+
history.setMatterHystoryType('door');
|
|
1070
|
+
this.addClusterServer(
|
|
1071
|
+
ClusterServer(
|
|
1072
|
+
EveHistoryCluster.with(EveHistory.Feature.EveDoor),
|
|
1073
|
+
{
|
|
1001
1074
|
// Dynamic attributes
|
|
1002
1075
|
ConfigDataGet: Uint8Array.fromHex(''),
|
|
1003
1076
|
ConfigDataSet: Uint8Array.fromHex(''),
|
|
@@ -1010,61 +1083,74 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1010
1083
|
ResetTotal: 0,
|
|
1011
1084
|
// Normal attributes
|
|
1012
1085
|
RLoc: 46080,
|
|
1013
|
-
|
|
1086
|
+
},
|
|
1087
|
+
{
|
|
1014
1088
|
ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
1015
|
-
|
|
1016
|
-
|
|
1089
|
+
log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1090
|
+
return history.OnGetConfigData(isFabricFiltered);
|
|
1017
1091
|
},
|
|
1092
|
+
|
|
1018
1093
|
ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
1019
|
-
|
|
1020
|
-
|
|
1094
|
+
log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1095
|
+
return Uint8Array.fromHex('');
|
|
1021
1096
|
},
|
|
1022
|
-
ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
1023
|
-
|
|
1024
|
-
|
|
1097
|
+
ConfigDataSetAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
1098
|
+
log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
1099
|
+
return history.OnSetConfigData(value);
|
|
1025
1100
|
},
|
|
1101
|
+
|
|
1026
1102
|
HistoryStatusAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
1027
|
-
|
|
1028
|
-
|
|
1103
|
+
log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1104
|
+
return history.OnGetHistoryStatus(isFabricFiltered);
|
|
1029
1105
|
},
|
|
1106
|
+
|
|
1030
1107
|
HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
1031
|
-
|
|
1032
|
-
|
|
1108
|
+
log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1109
|
+
return history.OnGetHistoryEntries();
|
|
1033
1110
|
},
|
|
1111
|
+
|
|
1034
1112
|
HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
1035
|
-
|
|
1036
|
-
|
|
1113
|
+
log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1114
|
+
return Uint8Array.fromHex('');
|
|
1037
1115
|
},
|
|
1038
|
-
HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
1039
|
-
|
|
1040
|
-
|
|
1116
|
+
HistorySetTimeAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
1117
|
+
log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
1118
|
+
return history.OnSetHistorySetTime(value);
|
|
1041
1119
|
},
|
|
1120
|
+
|
|
1042
1121
|
HistoryRequestAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
1043
|
-
|
|
1044
|
-
|
|
1122
|
+
log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1123
|
+
return Uint8Array.fromHex('');
|
|
1045
1124
|
},
|
|
1046
|
-
HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
1047
|
-
|
|
1048
|
-
|
|
1125
|
+
HistoryRequestAttributeSetter: (value: Uint8Array, { attributes, endpoint, session }) => {
|
|
1126
|
+
log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
1127
|
+
return history.OnSetHistoryRequest(value);
|
|
1049
1128
|
},
|
|
1129
|
+
|
|
1050
1130
|
LastEventAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
1051
|
-
|
|
1052
|
-
|
|
1131
|
+
log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1132
|
+
return history.OnGetLastEvent();
|
|
1053
1133
|
},
|
|
1134
|
+
|
|
1054
1135
|
TimesOpenedAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
1055
|
-
|
|
1056
|
-
|
|
1136
|
+
log.debug(`TimesOpenedAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1137
|
+
return history.OnGetimesOpened();
|
|
1057
1138
|
},
|
|
1139
|
+
|
|
1058
1140
|
ResetTotalAttributeGetter: ({ session, isFabricFiltered }) => {
|
|
1059
|
-
|
|
1060
|
-
|
|
1141
|
+
log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
|
|
1142
|
+
return history.OnGetLastReset();
|
|
1061
1143
|
},
|
|
1062
|
-
ResetTotalAttributeSetter: (value, { attributes, endpoint, session }) => {
|
|
1063
|
-
|
|
1064
|
-
|
|
1144
|
+
ResetTotalAttributeSetter: (value: number, { attributes, endpoint, session }) => {
|
|
1145
|
+
log.debug(`LastResetTotalAttributeSetter ${value} ${attributes.ResetTotal} endpoint: ${endpoint?.name} session: ${session?.name}`);
|
|
1146
|
+
return history.OnSetLastReset(value);
|
|
1065
1147
|
},
|
|
1066
|
-
|
|
1148
|
+
},
|
|
1149
|
+
{},
|
|
1150
|
+
),
|
|
1151
|
+
);
|
|
1067
1152
|
}
|
|
1153
|
+
*/
|
|
1068
1154
|
/**
|
|
1069
1155
|
* Get a default IdentifyCluster server.
|
|
1070
1156
|
*/
|
|
@@ -1479,6 +1565,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1479
1565
|
}
|
|
1480
1566
|
/**
|
|
1481
1567
|
* Get a default color control cluster server.
|
|
1568
|
+
* @deprecated This method is deprecated and will be removed in a future version. Use getDefaultCompleteColorControlClusterServer.
|
|
1482
1569
|
*
|
|
1483
1570
|
* @param currentHue - The current hue value.
|
|
1484
1571
|
* @param currentSaturation - The current saturation value.
|
|
@@ -1547,6 +1634,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1547
1634
|
}
|
|
1548
1635
|
/**
|
|
1549
1636
|
* Creates a default color control cluster server.
|
|
1637
|
+
* @deprecated This method is deprecated and will be removed in a future version. Use createDefaultCompleteColorControlClusterServer.
|
|
1550
1638
|
*
|
|
1551
1639
|
* @param currentHue - The current hue value.
|
|
1552
1640
|
* @param currentSaturation - The current saturation value.
|
|
@@ -1559,6 +1647,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1559
1647
|
}
|
|
1560
1648
|
/**
|
|
1561
1649
|
* Get a default color control cluster server.
|
|
1650
|
+
* @deprecated This method is deprecated and will be removed in a future version. Use getDefaultCompleteColorControlClusterServer.
|
|
1562
1651
|
*
|
|
1563
1652
|
* @param currentX - The current X value.
|
|
1564
1653
|
* @param currentY - The current Y value.
|
|
@@ -1636,6 +1725,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1636
1725
|
}
|
|
1637
1726
|
/**
|
|
1638
1727
|
* Creates a default color control cluster server.
|
|
1728
|
+
* @deprecated This method is deprecated and will be removed in a future version. Use createDefaultCompleteColorControlClusterServer.
|
|
1639
1729
|
*
|
|
1640
1730
|
* @param currentX - The current X value.
|
|
1641
1731
|
* @param currentY - The current Y value.
|
|
@@ -1648,6 +1738,97 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1648
1738
|
createDefaultXYColorControlClusterServer(currentX = 0, currentY = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
1649
1739
|
this.addClusterServer(this.getDefaultXYColorControlClusterServer(currentX, currentY, colorTemperatureMireds, colorTempPhysicalMinMireds, colorTempPhysicalMaxMireds));
|
|
1650
1740
|
}
|
|
1741
|
+
/**
|
|
1742
|
+
* Get a default color control cluster server.
|
|
1743
|
+
*
|
|
1744
|
+
* @param currentX - The current X value.
|
|
1745
|
+
* @param currentY - The current Y value.
|
|
1746
|
+
* @param currentHue - The current hue value.
|
|
1747
|
+
* @param currentSaturation - The current saturation value.
|
|
1748
|
+
* @param colorTemperatureMireds - The color temperature in mireds.
|
|
1749
|
+
* @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
|
|
1750
|
+
* @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
|
|
1751
|
+
*/
|
|
1752
|
+
getDefaultCompleteColorControlClusterServer(currentX = 0, currentY = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
1753
|
+
return ClusterServer(ColorControlCluster.with(ColorControl.Feature.Xy, ColorControl.Feature.HueSaturation, ColorControl.Feature.ColorTemperature), {
|
|
1754
|
+
colorMode: ColorControl.ColorMode.CurrentHueAndCurrentSaturation,
|
|
1755
|
+
options: {
|
|
1756
|
+
executeIfOff: false,
|
|
1757
|
+
},
|
|
1758
|
+
numberOfPrimaries: null,
|
|
1759
|
+
enhancedColorMode: ColorControl.EnhancedColorMode.CurrentHueAndCurrentSaturation,
|
|
1760
|
+
colorCapabilities: { xy: true, hueSaturation: true, colorLoop: false, enhancedHue: false, colorTemperature: true },
|
|
1761
|
+
currentHue: 0,
|
|
1762
|
+
currentSaturation: 0,
|
|
1763
|
+
currentX,
|
|
1764
|
+
currentY,
|
|
1765
|
+
colorTemperatureMireds,
|
|
1766
|
+
colorTempPhysicalMinMireds,
|
|
1767
|
+
colorTempPhysicalMaxMireds,
|
|
1768
|
+
}, {
|
|
1769
|
+
moveToColor: async (data) => {
|
|
1770
|
+
this.log.debug('Matter command: moveToColor request:', data.request, 'attributes.currentHue:', data.attributes.currentX.getLocal(), data.attributes.currentY.getLocal());
|
|
1771
|
+
this.commandHandler.executeHandler('moveToColor', data);
|
|
1772
|
+
},
|
|
1773
|
+
moveColor: async () => {
|
|
1774
|
+
this.log.error('Matter command: moveColor not implemented');
|
|
1775
|
+
},
|
|
1776
|
+
stepColor: async () => {
|
|
1777
|
+
this.log.error('Matter command: stepColor not implemented');
|
|
1778
|
+
},
|
|
1779
|
+
moveToHue: async ({ request, attributes, endpoint }) => {
|
|
1780
|
+
this.log.debug('Matter command: moveToHue request:', request, 'attributes.currentHue:', attributes.currentHue.getLocal());
|
|
1781
|
+
this.commandHandler.executeHandler('moveToHue', { request, attributes, endpoint });
|
|
1782
|
+
},
|
|
1783
|
+
moveHue: async () => {
|
|
1784
|
+
this.log.error('Matter command: moveHue not implemented');
|
|
1785
|
+
},
|
|
1786
|
+
stepHue: async () => {
|
|
1787
|
+
this.log.error('Matter command: stepHue not implemented');
|
|
1788
|
+
},
|
|
1789
|
+
moveToSaturation: async ({ request, attributes, endpoint }) => {
|
|
1790
|
+
this.log.debug('Matter command: moveToSaturation request:', request, 'attributes.currentSaturation:', attributes.currentSaturation.getLocal());
|
|
1791
|
+
this.commandHandler.executeHandler('moveToSaturation', { request, attributes, endpoint });
|
|
1792
|
+
},
|
|
1793
|
+
moveSaturation: async () => {
|
|
1794
|
+
this.log.error('Matter command: moveSaturation not implemented');
|
|
1795
|
+
},
|
|
1796
|
+
stepSaturation: async () => {
|
|
1797
|
+
this.log.error('Matter command: stepSaturation not implemented');
|
|
1798
|
+
},
|
|
1799
|
+
moveToHueAndSaturation: async ({ request, attributes, endpoint }) => {
|
|
1800
|
+
this.log.debug('Matter command: moveToHueAndSaturation request:', request, 'attributes.currentHue:', attributes.currentHue.getLocal(), 'attributes.currentSaturation:', attributes.currentSaturation.getLocal());
|
|
1801
|
+
this.commandHandler.executeHandler('moveToHueAndSaturation', { request, attributes, endpoint });
|
|
1802
|
+
},
|
|
1803
|
+
stopMoveStep: async () => {
|
|
1804
|
+
this.log.error('Matter command: stopMoveStep not implemented');
|
|
1805
|
+
},
|
|
1806
|
+
moveToColorTemperature: async ({ request, attributes, endpoint }) => {
|
|
1807
|
+
this.log.debug('Matter command: moveToColorTemperature request:', request, 'attributes.colorTemperatureMireds:', attributes.colorTemperatureMireds.getLocal());
|
|
1808
|
+
this.commandHandler.executeHandler('moveToColorTemperature', { request, attributes, endpoint });
|
|
1809
|
+
},
|
|
1810
|
+
moveColorTemperature: async () => {
|
|
1811
|
+
this.log.error('Matter command: moveColorTemperature not implemented');
|
|
1812
|
+
},
|
|
1813
|
+
stepColorTemperature: async () => {
|
|
1814
|
+
this.log.error('Matter command: stepColorTemperature not implemented');
|
|
1815
|
+
},
|
|
1816
|
+
}, {});
|
|
1817
|
+
}
|
|
1818
|
+
/**
|
|
1819
|
+
* Creates a default color control cluster server.
|
|
1820
|
+
*
|
|
1821
|
+
* @param currentX - The current X value.
|
|
1822
|
+
* @param currentY - The current Y value.
|
|
1823
|
+
* @param currentHue - The current hue value.
|
|
1824
|
+
* @param currentSaturation - The current saturation value.
|
|
1825
|
+
* @param colorTemperatureMireds - The color temperature in mireds.
|
|
1826
|
+
* @param colorTempPhysicalMinMireds - The physical minimum color temperature in mireds.
|
|
1827
|
+
* @param colorTempPhysicalMaxMireds - The physical maximum color temperature in mireds.
|
|
1828
|
+
*/
|
|
1829
|
+
createDefaultCompleteColorControlClusterServer(currentX = 0, currentY = 0, colorTemperatureMireds = 500, colorTempPhysicalMinMireds = 147, colorTempPhysicalMaxMireds = 500) {
|
|
1830
|
+
this.addClusterServer(this.getDefaultCompleteColorControlClusterServer(currentX, currentY, colorTemperatureMireds, colorTempPhysicalMinMireds, colorTempPhysicalMaxMireds));
|
|
1831
|
+
}
|
|
1651
1832
|
/**
|
|
1652
1833
|
* Configures the color control cluster for a device.
|
|
1653
1834
|
*
|
|
@@ -1687,7 +1868,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1687
1868
|
* @param positionPercent100ths - The position percentage in 100ths (0-10000). Defaults to 0.
|
|
1688
1869
|
*/
|
|
1689
1870
|
getDefaultWindowCoveringClusterServer(positionPercent100ths) {
|
|
1690
|
-
return ClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift, WindowCovering.Feature.AbsolutePosition), {
|
|
1871
|
+
return ClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift /* , WindowCovering.Feature.AbsolutePosition*/), {
|
|
1691
1872
|
type: WindowCovering.WindowCoveringType.Rollershade,
|
|
1692
1873
|
configStatus: {
|
|
1693
1874
|
operational: true,
|
|
@@ -1703,8 +1884,8 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1703
1884
|
mode: { motorDirectionReversed: false, calibrationMode: false, maintenanceMode: false, ledFeedback: false },
|
|
1704
1885
|
targetPositionLiftPercent100ths: positionPercent100ths ?? 0, // 0 Fully open 10000 fully closed
|
|
1705
1886
|
currentPositionLiftPercent100ths: positionPercent100ths ?? 0, // 0 Fully open 10000 fully closed
|
|
1706
|
-
installedClosedLimitLift: 10000,
|
|
1707
|
-
installedOpenLimitLift: 0,
|
|
1887
|
+
// installedClosedLimitLift: 10000,
|
|
1888
|
+
// installedOpenLimitLift: 0,
|
|
1708
1889
|
}, {
|
|
1709
1890
|
upOrOpen: async (data) => {
|
|
1710
1891
|
this.log.debug('Matter command: upOrOpen');
|
|
@@ -1740,7 +1921,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1740
1921
|
setWindowCoveringTargetAsCurrentAndStopped(endpoint) {
|
|
1741
1922
|
if (!endpoint)
|
|
1742
1923
|
endpoint = this;
|
|
1743
|
-
const windowCoveringCluster = endpoint.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift
|
|
1924
|
+
const windowCoveringCluster = endpoint.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift));
|
|
1744
1925
|
if (windowCoveringCluster) {
|
|
1745
1926
|
const position = windowCoveringCluster.getCurrentPositionLiftPercent100thsAttribute();
|
|
1746
1927
|
if (position !== null) {
|
|
@@ -1764,7 +1945,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1764
1945
|
setWindowCoveringCurrentTargetStatus(current, target, status, endpoint) {
|
|
1765
1946
|
if (!endpoint)
|
|
1766
1947
|
endpoint = this;
|
|
1767
|
-
const windowCoveringCluster = endpoint.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift
|
|
1948
|
+
const windowCoveringCluster = endpoint.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift));
|
|
1768
1949
|
if (windowCoveringCluster) {
|
|
1769
1950
|
windowCoveringCluster.setCurrentPositionLiftPercent100thsAttribute(current);
|
|
1770
1951
|
windowCoveringCluster.setTargetPositionLiftPercent100thsAttribute(target);
|
|
@@ -1784,7 +1965,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1784
1965
|
setWindowCoveringStatus(status, endpoint) {
|
|
1785
1966
|
if (!endpoint)
|
|
1786
1967
|
endpoint = this;
|
|
1787
|
-
const windowCovering = endpoint.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift
|
|
1968
|
+
const windowCovering = endpoint.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift));
|
|
1788
1969
|
if (!windowCovering)
|
|
1789
1970
|
return;
|
|
1790
1971
|
windowCovering.setOperationalStatusAttribute({ global: status, lift: status, tilt: status });
|
|
@@ -1799,7 +1980,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1799
1980
|
getWindowCoveringStatus(endpoint) {
|
|
1800
1981
|
if (!endpoint)
|
|
1801
1982
|
endpoint = this;
|
|
1802
|
-
const windowCovering = endpoint.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift
|
|
1983
|
+
const windowCovering = endpoint.getClusterServer(WindowCoveringCluster.with(WindowCovering.Feature.Lift, WindowCovering.Feature.PositionAwareLift));
|
|
1803
1984
|
if (!windowCovering)
|
|
1804
1985
|
return undefined;
|
|
1805
1986
|
const status = windowCovering.getOperationalStatusAttribute();
|
|
@@ -1924,14 +2105,18 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1924
2105
|
* @param {Endpoint} endpoint - The endpoint on which to trigger the event (default the device endpoint).
|
|
1925
2106
|
* @returns {void}
|
|
1926
2107
|
*/
|
|
1927
|
-
triggerSwitchEvent(event,
|
|
2108
|
+
triggerSwitchEvent(event, log, endpoint) {
|
|
1928
2109
|
if (!endpoint)
|
|
1929
2110
|
endpoint = this;
|
|
1930
2111
|
if (['Single', 'Double', 'Long'].includes(event)) {
|
|
1931
2112
|
const cluster = endpoint.getClusterServer(SwitchCluster.with(Switch.Feature.MomentarySwitch, Switch.Feature.MomentarySwitchRelease, Switch.Feature.MomentarySwitchLongPress, Switch.Feature.MomentarySwitchMultiPress));
|
|
1932
2113
|
if (!cluster || !cluster.getFeatureMapAttribute().momentarySwitch) {
|
|
1933
2114
|
log?.error(`triggerSwitchEvent ${event} error: Switch cluster with MomentarySwitch not found on endpoint ${endpoint.name}:${endpoint.number}`);
|
|
1934
|
-
return;
|
|
2115
|
+
return false;
|
|
2116
|
+
}
|
|
2117
|
+
if (endpoint.number === undefined) {
|
|
2118
|
+
log?.error(`triggerSwitchEvent ${event} error: Endpoint number not assigned on endpoint ${endpoint.name}:${endpoint.number}`);
|
|
2119
|
+
return false;
|
|
1935
2120
|
}
|
|
1936
2121
|
if (event === 'Single') {
|
|
1937
2122
|
cluster.setCurrentPositionAttribute(1);
|
|
@@ -1968,7 +2153,11 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1968
2153
|
const cluster = endpoint.getClusterServer(Switch.Complete);
|
|
1969
2154
|
if (!cluster || !cluster.getFeatureMapAttribute().latchingSwitch) {
|
|
1970
2155
|
log?.error(`triggerSwitchEvent ${event} error: Switch cluster with LatchingSwitch not found on endpoint ${endpoint.name}:${endpoint.number}`);
|
|
1971
|
-
return;
|
|
2156
|
+
return false;
|
|
2157
|
+
}
|
|
2158
|
+
if (endpoint.number === undefined) {
|
|
2159
|
+
log?.error(`triggerSwitchEvent ${event} error: Endpoint number not assigned on endpoint ${endpoint.name}:${endpoint.number}`);
|
|
2160
|
+
return false;
|
|
1972
2161
|
}
|
|
1973
2162
|
if (event === 'Press') {
|
|
1974
2163
|
cluster.setCurrentPositionAttribute(1);
|
|
@@ -1985,6 +2174,7 @@ export class MatterbridgeDevice extends extendPublicHandlerMethods(Device) {
|
|
|
1985
2174
|
log?.info(`${db}Trigger endpoint ${or}${endpoint.name}:${endpoint.number}${db} event ${hk}${cluster.name}.Release${db}`);
|
|
1986
2175
|
}
|
|
1987
2176
|
}
|
|
2177
|
+
return true;
|
|
1988
2178
|
}
|
|
1989
2179
|
/**
|
|
1990
2180
|
* Retrieves the default mode select cluster server.
|