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.
@@ -4,7 +4,7 @@
4
4
  * @file matterbridgeDevice.ts
5
5
  * @author Luca Liguori
6
6
  * @date 2023-12-29
7
- * @version 1.1.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, EveHistoryCluster, MatterHistory } from 'matter-history';
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.getDefaultColorControlClusterServer());
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
- return ClusterServer(EveHistoryCluster.with(EveHistory.Feature.EveEnergy), {
696
- // Dynamic attributes
697
- ConfigDataGet: Uint8Array.fromHex(''),
698
- ConfigDataSet: Uint8Array.fromHex(''),
699
- HistoryStatus: Uint8Array.fromHex(''),
700
- HistoryEntries: Uint8Array.fromHex(''),
701
- HistoryRequest: Uint8Array.fromHex(''),
702
- HistorySetTime: Uint8Array.fromHex(''),
703
- LastEvent: 0,
704
- ResetTotal: 0,
705
- // Normal static attributes
706
- Voltage: voltage,
707
- Current: current,
708
- Consumption: power,
709
- TotalConsumption: consumption,
710
- EnergyUnknown: 1,
711
- ChildLock: false,
712
- RLoc: 46080,
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
- this.addClusterServer(this.getDefaultStaticEveHistoryClusterServer(voltage, current, power, consumption));
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
- createRoomEveHistoryClusterServer(history, log) {
736
- history.setMatterHystoryType('room', this.serialNumber);
737
- this.addClusterServer(ClusterServer(EveHistoryCluster.with(EveHistory.Feature.EveRoom), {
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: 0 /* TemperatureDisplayUnits.CELSIUS */,
760
+ TemperatureDisplayUnits: TemperatureDisplayUnits.CELSIUS,
747
761
  RLoc: 46080,
748
- }, {
762
+ },
763
+ {
749
764
  ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
750
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
751
- return history.OnGetConfigData(isFabricFiltered);
765
+ log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
766
+ return history.OnGetConfigData(isFabricFiltered);
752
767
  },
768
+
753
769
  ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
754
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
755
- return Uint8Array.fromHex('');
770
+ log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
771
+ return Uint8Array.fromHex('');
756
772
  },
757
- ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
758
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
759
- return history.OnSetConfigData(value);
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
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
763
- return history.OnGetHistoryStatus(isFabricFiltered);
779
+ log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
780
+ return history.OnGetHistoryStatus(isFabricFiltered);
764
781
  },
782
+
765
783
  HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
766
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
767
- return history.OnGetHistoryEntries();
784
+ log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
785
+ return history.OnGetHistoryEntries();
768
786
  },
787
+
769
788
  HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
770
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
771
- return Uint8Array.fromHex('');
789
+ log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
790
+ return Uint8Array.fromHex('');
772
791
  },
773
- HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
774
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
775
- return history.OnSetHistorySetTime(value);
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
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
779
- return Uint8Array.fromHex('');
798
+ log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
799
+ return Uint8Array.fromHex('');
780
800
  },
781
- HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
782
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
783
- return history.OnSetHistoryRequest(value);
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
- createWeatherEveHistoryClusterServer(history, log) {
795
- history.setMatterHystoryType('weather', this.serialNumber);
796
- this.addClusterServer(ClusterServer(EveHistoryCluster.with(EveHistory.Feature.EveWeather), {
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: 1 /* WeatherTrend.SUN */,
808
- TemperatureDisplayUnits: 0 /* TemperatureDisplayUnits.CELSIUS */,
835
+ WeatherTrend: WeatherTrend.SUN,
836
+ TemperatureDisplayUnits: TemperatureDisplayUnits.CELSIUS,
809
837
  RLoc: 46080,
810
- }, {
838
+ },
839
+ {
811
840
  ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
812
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
813
- return history.OnGetConfigData(isFabricFiltered);
841
+ log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
842
+ return history.OnGetConfigData(isFabricFiltered);
814
843
  },
844
+
815
845
  ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
816
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
817
- return Uint8Array.fromHex('');
846
+ log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
847
+ return Uint8Array.fromHex('');
818
848
  },
819
- ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
820
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
821
- return history.OnSetConfigData(value);
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
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
825
- return history.OnGetHistoryStatus(isFabricFiltered);
855
+ log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
856
+ return history.OnGetHistoryStatus(isFabricFiltered);
826
857
  },
858
+
827
859
  HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
828
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
829
- return history.OnGetHistoryEntries();
860
+ log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
861
+ return history.OnGetHistoryEntries();
830
862
  },
863
+
831
864
  HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
832
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
833
- return Uint8Array.fromHex('');
865
+ log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
866
+ return Uint8Array.fromHex('');
834
867
  },
835
- HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
836
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
837
- return history.OnSetHistorySetTime(value);
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
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
841
- return Uint8Array.fromHex('');
874
+ log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
875
+ return Uint8Array.fromHex('');
842
876
  },
843
- HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
844
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
845
- return history.OnSetHistoryRequest(value);
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
- createEnergyEveHistoryClusterServer(history, log) {
857
- history.setMatterHystoryType('energy');
858
- this.addClusterServer(ClusterServer(EveHistoryCluster.with(EveHistory.Feature.EveEnergy), {
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
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
879
- return history.OnGetConfigData(isFabricFiltered);
921
+ log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
922
+ return history.OnGetConfigData(isFabricFiltered);
880
923
  },
924
+
881
925
  ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
882
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
883
- return Uint8Array.fromHex('');
926
+ log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
927
+ return Uint8Array.fromHex('');
884
928
  },
885
- ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
886
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
887
- return history.OnSetConfigData(value);
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
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
891
- return history.OnGetHistoryStatus(isFabricFiltered);
935
+ log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
936
+ return history.OnGetHistoryStatus(isFabricFiltered);
892
937
  },
938
+
893
939
  HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
894
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
895
- return history.OnGetHistoryEntries();
940
+ log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
941
+ return history.OnGetHistoryEntries();
896
942
  },
943
+
897
944
  HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
898
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
899
- return Uint8Array.fromHex('');
945
+ log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
946
+ return Uint8Array.fromHex('');
900
947
  },
901
- HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
902
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
903
- return history.OnSetHistorySetTime(value);
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
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
907
- return Uint8Array.fromHex('');
954
+ log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
955
+ return Uint8Array.fromHex('');
908
956
  },
909
- HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
910
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
911
- return history.OnSetHistoryRequest(value);
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
- log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
915
- return history.OnGetLastEvent();
963
+ log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
964
+ return history.OnGetLastEvent();
916
965
  },
966
+
917
967
  ResetTotalAttributeGetter: ({ session, isFabricFiltered }) => {
918
- log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
919
- return history.OnGetLastReset();
968
+ log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
969
+ return history.OnGetLastReset();
920
970
  },
921
- ResetTotalAttributeSetter: (value, { attributes, endpoint, session }) => {
922
- log.debug(`LastResetTotalAttributeSetter ${value} ${attributes.ResetTotal} endpoint: ${endpoint?.name} session: ${session?.name}`);
923
- return history.OnSetLastReset(value);
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
- createMotionEveHistoryClusterServer(history, log) {
935
- history.setMatterHystoryType('motion');
936
- this.addClusterServer(ClusterServer(EveHistoryCluster.with(EveHistory.Feature.EveMotion), {
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: 0 /* Sensitivity.HIGH */,
1004
+ MotionSensitivity: Sensitivity.HIGH,
947
1005
  RLoc: 46080,
948
- }, {
1006
+ },
1007
+ {
949
1008
  ConfigDataGetAttributeGetter: ({ session, isFabricFiltered }) => {
950
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
951
- return history.OnGetConfigData(isFabricFiltered);
1009
+ log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1010
+ return history.OnGetConfigData(isFabricFiltered);
952
1011
  },
1012
+
953
1013
  ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
954
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
955
- return Uint8Array.fromHex('');
1014
+ log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1015
+ return Uint8Array.fromHex('');
956
1016
  },
957
- ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
958
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
959
- return history.OnSetConfigData(value);
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
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
963
- return history.OnGetHistoryStatus(isFabricFiltered);
1023
+ log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1024
+ return history.OnGetHistoryStatus(isFabricFiltered);
964
1025
  },
1026
+
965
1027
  HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
966
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
967
- return history.OnGetHistoryEntries();
1028
+ log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1029
+ return history.OnGetHistoryEntries();
968
1030
  },
1031
+
969
1032
  HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
970
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
971
- return Uint8Array.fromHex('');
1033
+ log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1034
+ return Uint8Array.fromHex('');
972
1035
  },
973
- HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
974
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
975
- return history.OnSetHistorySetTime(value);
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
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
979
- return Uint8Array.fromHex('');
1042
+ log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1043
+ return Uint8Array.fromHex('');
980
1044
  },
981
- HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
982
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
983
- return history.OnSetHistoryRequest(value);
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
- log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
987
- return history.OnGetLastEvent();
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
- createDoorEveHistoryClusterServer(history, log) {
999
- history.setMatterHystoryType('door');
1000
- this.addClusterServer(ClusterServer(EveHistoryCluster.with(EveHistory.Feature.EveDoor), {
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
- log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1016
- return history.OnGetConfigData(isFabricFiltered);
1089
+ log.debug(`ConfigDataGetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1090
+ return history.OnGetConfigData(isFabricFiltered);
1017
1091
  },
1092
+
1018
1093
  ConfigDataSetAttributeGetter: ({ session, isFabricFiltered }) => {
1019
- log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1020
- return Uint8Array.fromHex('');
1094
+ log.debug(`ConfigDataSetAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1095
+ return Uint8Array.fromHex('');
1021
1096
  },
1022
- ConfigDataSetAttributeSetter: (value, { attributes, endpoint, session }) => {
1023
- log.debug(`ConfigDataSetAttributeSetter [${value.toHex()}] ${attributes.ConfigDataSet} endpoint: ${endpoint?.name} session: ${session?.name}`);
1024
- return history.OnSetConfigData(value);
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
- log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1028
- return history.OnGetHistoryStatus(isFabricFiltered);
1103
+ log.debug(`HistoryStatusAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1104
+ return history.OnGetHistoryStatus(isFabricFiltered);
1029
1105
  },
1106
+
1030
1107
  HistoryEntriesAttributeGetter: ({ session, isFabricFiltered }) => {
1031
- log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1032
- return history.OnGetHistoryEntries();
1108
+ log.debug(`HistoryEntriesAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1109
+ return history.OnGetHistoryEntries();
1033
1110
  },
1111
+
1034
1112
  HistorySetTimeAttributeGetter: ({ session, isFabricFiltered }) => {
1035
- log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1036
- return Uint8Array.fromHex('');
1113
+ log.debug(`HistorySetTimeAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1114
+ return Uint8Array.fromHex('');
1037
1115
  },
1038
- HistorySetTimeAttributeSetter: (value, { attributes, endpoint, session }) => {
1039
- log.debug(`HistorySetTimeAttributeSetter ${value.toHex()} ${attributes.HistorySetTime} endpoint: ${endpoint?.name} session: ${session?.name}`);
1040
- return history.OnSetHistorySetTime(value);
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
- log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1044
- return Uint8Array.fromHex('');
1122
+ log.debug(`HistoryRequestAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1123
+ return Uint8Array.fromHex('');
1045
1124
  },
1046
- HistoryRequestAttributeSetter: (value, { attributes, endpoint, session }) => {
1047
- log.debug(`HistoryRequestAttributeSetter ${value.toHex()} ${attributes.HistoryRequest} endpoint: ${endpoint?.name} session: ${session?.name}`);
1048
- return history.OnSetHistoryRequest(value);
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
- log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1052
- return history.OnGetLastEvent();
1131
+ log.debug(`LastEventAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1132
+ return history.OnGetLastEvent();
1053
1133
  },
1134
+
1054
1135
  TimesOpenedAttributeGetter: ({ session, isFabricFiltered }) => {
1055
- log.debug(`TimesOpenedAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1056
- return history.OnGetimesOpened();
1136
+ log.debug(`TimesOpenedAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1137
+ return history.OnGetimesOpened();
1057
1138
  },
1139
+
1058
1140
  ResetTotalAttributeGetter: ({ session, isFabricFiltered }) => {
1059
- log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1060
- return history.OnGetLastReset();
1141
+ log.debug(`LastResetTotalAttributeGetter session: ${session?.name} ${isFabricFiltered?.valueOf()}`);
1142
+ return history.OnGetLastReset();
1061
1143
  },
1062
- ResetTotalAttributeSetter: (value, { attributes, endpoint, session }) => {
1063
- log.debug(`LastResetTotalAttributeSetter ${value} ${attributes.ResetTotal} endpoint: ${endpoint?.name} session: ${session?.name}`);
1064
- return history.OnSetLastReset(value);
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, WindowCovering.Feature.AbsolutePosition));
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, WindowCovering.Feature.AbsolutePosition));
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, WindowCovering.Feature.AbsolutePosition));
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, WindowCovering.Feature.AbsolutePosition));
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, endpoint, log) {
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.