From 0bfb2a2f8bd900166c7c59dc0c61074095b39ec4 Mon Sep 17 00:00:00 2001
From: David Rempel <drempel@google.com>
Date: Mon, 29 Jan 2024 16:01:53 -0800
Subject: [PATCH] Changes coming from the revised spec

---
 .../all-clusters-app.matter                   |  7 ++---
 .../all-clusters-minimal-app.matter           |  7 ++---
 ...umiditysensor_thermostat_56de3d5f45.matter |  7 ++---
 ...tnode_heatingcoolingunit_ncdGai1E5a.matter |  7 ++---
 ...tnode_roomairconditioner_9cf3607804.matter |  7 ++---
 .../rootnode_thermostat_bm3fb8dhYi.matter     |  7 ++---
 .../placeholder/linux/apps/app1/config.matter | 14 ++++------
 .../placeholder/linux/apps/app2/config.matter | 14 ++++------
 .../nxp/zap/thermostat_matter_thread.matter   |  7 ++---
 .../nxp/zap/thermostat_matter_wifi.matter     |  7 ++---
 .../qpg/zap/thermostaticRadiatorValve.matter  |  7 ++---
 .../thermostat-common/thermostat.matter       |  7 ++---
 .../data-model/chip/thermostat-cluster.xml    |  7 ++---
 .../data_model/controller-clusters.matter     |  7 ++---
 .../chip/devicecontroller/ChipStructs.java    | 10 +++----
 .../ThermostatClusterScheduleStruct.kt        | 13 ++-------
 .../ThermostatClusterScheduleStruct.kt        | 13 ++-------
 .../CHIPAttributeTLVValueDecoder.cpp          | 28 ++++++-------------
 .../python/chip/clusters/Objects.py           |  7 ++---
 .../MTRAttributeTLVValueDecoder.mm            | 10 ++-----
 .../CHIP/zap-generated/MTRBaseClusters.h      |  3 +-
 .../CHIP/zap-generated/MTRBaseClusters.mm     | 13 ++++-----
 .../app-common/zap-generated/cluster-enums.h  |  3 +-
 .../zap-generated/cluster-objects.h           |  4 +--
 .../cluster/ComplexArgumentParser.cpp         |  8 ++----
 .../zap-generated/cluster/Commands.h          | 10 ++-----
 26 files changed, 89 insertions(+), 145 deletions(-)

diff --git a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
index 4d1ac5923ff553..3cadaf6b420a30 100644
--- a/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
+++ b/examples/all-clusters-app/all-clusters-common/all-clusters-app.matter
@@ -4748,7 +4748,7 @@ cluster PumpConfigurationAndControl = 512 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -4866,8 +4866,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -4947,7 +4946,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter
index 7794726e68dcd7..a1ee5eafaccdfc 100644
--- a/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter
+++ b/examples/all-clusters-minimal-app/all-clusters-common/all-clusters-minimal-app.matter
@@ -3475,7 +3475,7 @@ cluster PumpConfigurationAndControl = 512 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -3593,8 +3593,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -3674,7 +3673,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter
index a06d523bd40cf3..adbf1c4953eb88 100644
--- a/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter
+++ b/examples/chef/devices/rootnode_airpurifier_airqualitysensor_temperaturesensor_humiditysensor_thermostat_56de3d5f45.matter
@@ -1132,7 +1132,7 @@ cluster ActivatedCarbonFilterMonitoring = 114 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -1250,8 +1250,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -1331,7 +1330,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
index bf73232fd78f06..54796434c34fea 100644
--- a/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
+++ b/examples/chef/devices/rootnode_heatingcoolingunit_ncdGai1E5a.matter
@@ -1489,7 +1489,7 @@ cluster FixedLabel = 64 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -1607,8 +1607,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -1688,7 +1687,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter
index c41e4fcc03b29b..e3d09de3c30aa6 100644
--- a/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter
+++ b/examples/chef/devices/rootnode_roomairconditioner_9cf3607804.matter
@@ -1072,7 +1072,7 @@ cluster GroupKeyManagement = 63 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -1190,8 +1190,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -1271,7 +1270,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
index 4ab01b329d34aa..b16d034dc47601 100644
--- a/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
+++ b/examples/chef/devices/rootnode_thermostat_bm3fb8dhYi.matter
@@ -1292,7 +1292,7 @@ cluster FixedLabel = 64 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -1410,8 +1410,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -1491,7 +1490,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/placeholder/linux/apps/app1/config.matter b/examples/placeholder/linux/apps/app1/config.matter
index 935a665fcde9f5..075a7fd9b6ec54 100644
--- a/examples/placeholder/linux/apps/app1/config.matter
+++ b/examples/placeholder/linux/apps/app1/config.matter
@@ -4720,7 +4720,7 @@ cluster PumpConfigurationAndControl = 512 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -4838,8 +4838,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -4919,7 +4918,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
@@ -5091,7 +5090,7 @@ cluster Thermostat = 513 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -5209,8 +5208,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -5290,7 +5288,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/placeholder/linux/apps/app2/config.matter b/examples/placeholder/linux/apps/app2/config.matter
index 83657fd83849d5..087e1e1d6bd1e1 100644
--- a/examples/placeholder/linux/apps/app2/config.matter
+++ b/examples/placeholder/linux/apps/app2/config.matter
@@ -4677,7 +4677,7 @@ cluster PumpConfigurationAndControl = 512 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -4795,8 +4795,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -4876,7 +4875,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
@@ -5048,7 +5047,7 @@ cluster Thermostat = 513 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -5166,8 +5165,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -5247,7 +5245,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/thermostat/nxp/zap/thermostat_matter_thread.matter b/examples/thermostat/nxp/zap/thermostat_matter_thread.matter
index e554c32be1cfd3..b8ddc4c5d196f7 100644
--- a/examples/thermostat/nxp/zap/thermostat_matter_thread.matter
+++ b/examples/thermostat/nxp/zap/thermostat_matter_thread.matter
@@ -1876,7 +1876,7 @@ provisional cluster ScenesManagement = 98 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -1994,8 +1994,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -2075,7 +2074,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/thermostat/nxp/zap/thermostat_matter_wifi.matter b/examples/thermostat/nxp/zap/thermostat_matter_wifi.matter
index 43b09015e9a461..b3d74895647030 100644
--- a/examples/thermostat/nxp/zap/thermostat_matter_wifi.matter
+++ b/examples/thermostat/nxp/zap/thermostat_matter_wifi.matter
@@ -1787,7 +1787,7 @@ provisional cluster ScenesManagement = 98 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -1905,8 +1905,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -1986,7 +1985,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/thermostat/qpg/zap/thermostaticRadiatorValve.matter b/examples/thermostat/qpg/zap/thermostaticRadiatorValve.matter
index 713923440baa3a..34d2efa683837b 100644
--- a/examples/thermostat/qpg/zap/thermostaticRadiatorValve.matter
+++ b/examples/thermostat/qpg/zap/thermostaticRadiatorValve.matter
@@ -1491,7 +1491,7 @@ cluster UserLabel = 65 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -1609,8 +1609,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -1690,7 +1689,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/examples/thermostat/thermostat-common/thermostat.matter b/examples/thermostat/thermostat-common/thermostat.matter
index 309c686e0756cb..b4de1a1e2e914d 100644
--- a/examples/thermostat/thermostat-common/thermostat.matter
+++ b/examples/thermostat/thermostat-common/thermostat.matter
@@ -1671,7 +1671,7 @@ cluster UserLabel = 65 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -1789,8 +1789,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -1870,7 +1869,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/src/app/zap-templates/zcl/data-model/chip/thermostat-cluster.xml b/src/app/zap-templates/zcl/data-model/chip/thermostat-cluster.xml
index 948c0937a3fd10..6e036671f4fa45 100644
--- a/src/app/zap-templates/zcl/data-model/chip/thermostat-cluster.xml
+++ b/src/app/zap-templates/zcl/data-model/chip/thermostat-cluster.xml
@@ -27,8 +27,7 @@ limitations under the License.
     <field name="LocalTemperatureNotExposed" mask="0x40"/>
     <field name="MatterScheduleConfiguration" mask="0x80"/>
     <field name="Presets" mask="0x100"/>
-    <field name="Setpoints" mask="0x200"/>
-    <field name="QueuedPresetsSupported" mask="0x400"/>
+    <field name="QueuedPresetsSupported" mask="0x200"/>
   </bitmap>
 
   <bitmap name="ACErrorCodeBitmap" type="bitmap32">
@@ -267,7 +266,7 @@ limitations under the License.
     <item fieldId="2" name="Name" type="char_string" length="64" optional="true"/>
     <item fieldId="3" name="PresetHandle" type="octet_string" length="16" optional="true"/>
     <item fieldId="4" name="Transitions" array="true" type="ScheduleTransitionStruct" minLength="1"/>
-    <item fieldId="5" name="BuiltIn" type="boolean" isNullable="true" optional="true"/>
+    <item fieldId="5" name="BuiltIn" type="boolean" isNullable="true"/>
   </struct>
 
   <struct name="ScheduleTransitionStruct" apiMaturity="provisional">
@@ -288,7 +287,7 @@ limitations under the License.
     <define>THERMOSTAT_CLUSTER</define>
     <client tick="false" init="false">true</client>
     <server tick="false" init="false">true</server>
-    <globalAttribute side="either" code="0xFFFD" value="6"/>
+    <globalAttribute side="either" code="0xFFFD" value="7"/>
 
     <!-- Attributes -->
 
diff --git a/src/controller/data_model/controller-clusters.matter b/src/controller/data_model/controller-clusters.matter
index dacc1008177ad9..9afc65b5253dbd 100644
--- a/src/controller/data_model/controller-clusters.matter
+++ b/src/controller/data_model/controller-clusters.matter
@@ -5948,7 +5948,7 @@ cluster PumpConfigurationAndControl = 512 {
 
 /** An interface for configuring and controlling the functionality of a thermostat. */
 cluster Thermostat = 513 {
-  revision 6;
+  revision 7;
 
   enum ACCapacityFormatEnum : enum8 {
     kBTUh = 0;
@@ -6066,8 +6066,7 @@ cluster Thermostat = 513 {
     kLocalTemperatureNotExposed = 0x40;
     kMatterScheduleConfiguration = 0x80;
     kPresets = 0x100;
-    kSetpoints = 0x200;
-    kQueuedPresetsSupported = 0x400;
+    kQueuedPresetsSupported = 0x200;
   }
 
   bitmap HVACSystemTypeBitmap : bitmap8 {
@@ -6147,7 +6146,7 @@ cluster Thermostat = 513 {
     optional char_string<64> name = 2;
     optional octet_string<16> presetHandle = 3;
     ScheduleTransitionStruct transitions[] = 4;
-    optional nullable boolean builtIn = 5;
+    nullable boolean builtIn = 5;
   }
 
   struct PresetStruct {
diff --git a/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java b/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java
index cfc67037e90260..ac3e3022d3d4b5 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java
+++ b/src/controller/java/generated/java/chip/devicecontroller/ChipStructs.java
@@ -8147,7 +8147,7 @@ public static class ThermostatClusterScheduleStruct {
   public Optional<String> name;
   public Optional<byte[]> presetHandle;
   public ArrayList<ChipStructs.ThermostatClusterScheduleTransitionStruct> transitions;
-  public @Nullable Optional<Boolean> builtIn;
+  public @Nullable Boolean builtIn;
   private static final long SCHEDULE_HANDLE_ID = 0L;
   private static final long SYSTEM_MODE_ID = 1L;
   private static final long NAME_ID = 2L;
@@ -8161,7 +8161,7 @@ public ThermostatClusterScheduleStruct(
     Optional<String> name,
     Optional<byte[]> presetHandle,
     ArrayList<ChipStructs.ThermostatClusterScheduleTransitionStruct> transitions,
-    @Nullable Optional<Boolean> builtIn
+    @Nullable Boolean builtIn
   ) {
     this.scheduleHandle = scheduleHandle;
     this.systemMode = systemMode;
@@ -8178,7 +8178,7 @@ public StructType encodeTlv() {
     values.add(new StructElement(NAME_ID, name.<BaseTLVType>map((nonOptionalname) -> new StringType(nonOptionalname)).orElse(new EmptyType())));
     values.add(new StructElement(PRESET_HANDLE_ID, presetHandle.<BaseTLVType>map((nonOptionalpresetHandle) -> new ByteArrayType(nonOptionalpresetHandle)).orElse(new EmptyType())));
     values.add(new StructElement(TRANSITIONS_ID, ArrayType.generateArrayType(transitions, (elementtransitions) -> elementtransitions.encodeTlv())));
-    values.add(new StructElement(BUILT_IN_ID, builtIn != null ? builtIn.<BaseTLVType>map((nonOptionalbuiltIn) -> new BooleanType(nonOptionalbuiltIn)).orElse(new EmptyType()) : new NullType()));
+    values.add(new StructElement(BUILT_IN_ID, builtIn != null ? new BooleanType(builtIn) : new NullType()));
 
     return new StructType(values);
   }
@@ -8192,7 +8192,7 @@ public static ThermostatClusterScheduleStruct decodeTlv(BaseTLVType tlvValue) {
     Optional<String> name = Optional.empty();
     Optional<byte[]> presetHandle = Optional.empty();
     ArrayList<ChipStructs.ThermostatClusterScheduleTransitionStruct> transitions = null;
-    @Nullable Optional<Boolean> builtIn = null;
+    @Nullable Boolean builtIn = null;
     for (StructElement element: ((StructType)tlvValue).value()) {
       if (element.contextTagNum() == SCHEDULE_HANDLE_ID) {
         if (element.value(BaseTLVType.class).type() == TLVType.ByteArray) {
@@ -8222,7 +8222,7 @@ public static ThermostatClusterScheduleStruct decodeTlv(BaseTLVType tlvValue) {
       } else if (element.contextTagNum() == BUILT_IN_ID) {
         if (element.value(BaseTLVType.class).type() == TLVType.Boolean) {
           BooleanType castingValue = element.value(BooleanType.class);
-          builtIn = Optional.of(castingValue.value(Boolean.class));
+          builtIn = castingValue.value(Boolean.class);
         }
       }
     }
diff --git a/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/ThermostatClusterScheduleStruct.kt b/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/ThermostatClusterScheduleStruct.kt
index ac1ffbde1caca9..e1cf0432c60c51 100644
--- a/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/ThermostatClusterScheduleStruct.kt
+++ b/src/controller/java/generated/java/chip/devicecontroller/cluster/structs/ThermostatClusterScheduleStruct.kt
@@ -30,7 +30,7 @@ class ThermostatClusterScheduleStruct(
   val name: Optional<String>,
   val presetHandle: Optional<ByteArray>,
   val transitions: List<ThermostatClusterScheduleTransitionStruct>,
-  val builtIn: Optional<Boolean>?
+  val builtIn: Boolean?
 ) {
   override fun toString(): String = buildString {
     append("ThermostatClusterScheduleStruct {\n")
@@ -66,10 +66,7 @@ class ThermostatClusterScheduleStruct(
       }
       endArray()
       if (builtIn != null) {
-        if (builtIn.isPresent) {
-          val optbuiltIn = builtIn.get()
-          put(ContextSpecificTag(TAG_BUILT_IN), optbuiltIn)
-        }
+        put(ContextSpecificTag(TAG_BUILT_IN), builtIn)
       } else {
         putNull(ContextSpecificTag(TAG_BUILT_IN))
       }
@@ -117,11 +114,7 @@ class ThermostatClusterScheduleStruct(
         }
       val builtIn =
         if (!tlvReader.isNull()) {
-          if (tlvReader.isNextTag(ContextSpecificTag(TAG_BUILT_IN))) {
-            Optional.of(tlvReader.getBoolean(ContextSpecificTag(TAG_BUILT_IN)))
-          } else {
-            Optional.empty()
-          }
+          tlvReader.getBoolean(ContextSpecificTag(TAG_BUILT_IN))
         } else {
           tlvReader.getNull(ContextSpecificTag(TAG_BUILT_IN))
           null
diff --git a/src/controller/java/generated/java/matter/controller/cluster/structs/ThermostatClusterScheduleStruct.kt b/src/controller/java/generated/java/matter/controller/cluster/structs/ThermostatClusterScheduleStruct.kt
index 25b8ff012cf7bc..7306ad147277da 100644
--- a/src/controller/java/generated/java/matter/controller/cluster/structs/ThermostatClusterScheduleStruct.kt
+++ b/src/controller/java/generated/java/matter/controller/cluster/structs/ThermostatClusterScheduleStruct.kt
@@ -30,7 +30,7 @@ class ThermostatClusterScheduleStruct(
   val name: Optional<String>,
   val presetHandle: Optional<ByteArray>,
   val transitions: List<ThermostatClusterScheduleTransitionStruct>,
-  val builtIn: Optional<Boolean>?
+  val builtIn: Boolean?
 ) {
   override fun toString(): String = buildString {
     append("ThermostatClusterScheduleStruct {\n")
@@ -66,10 +66,7 @@ class ThermostatClusterScheduleStruct(
       }
       endArray()
       if (builtIn != null) {
-        if (builtIn.isPresent) {
-          val optbuiltIn = builtIn.get()
-          put(ContextSpecificTag(TAG_BUILT_IN), optbuiltIn)
-        }
+        put(ContextSpecificTag(TAG_BUILT_IN), builtIn)
       } else {
         putNull(ContextSpecificTag(TAG_BUILT_IN))
       }
@@ -117,11 +114,7 @@ class ThermostatClusterScheduleStruct(
         }
       val builtIn =
         if (!tlvReader.isNull()) {
-          if (tlvReader.isNextTag(ContextSpecificTag(TAG_BUILT_IN))) {
-            Optional.of(tlvReader.getBoolean(ContextSpecificTag(TAG_BUILT_IN)))
-          } else {
-            Optional.empty()
-          }
+          tlvReader.getBoolean(ContextSpecificTag(TAG_BUILT_IN))
         } else {
           tlvReader.getNull(ContextSpecificTag(TAG_BUILT_IN))
           null
diff --git a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
index e1f30685eeecb8..d9b52b80ee5511 100644
--- a/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
+++ b/src/controller/java/zap-generated/CHIPAttributeTLVValueDecoder.cpp
@@ -28329,28 +28329,18 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
                     chip::JniReferences::GetInstance().AddToList(newElement_0_transitions, newElement_2);
                 }
                 jobject newElement_0_builtIn;
-                if (!entry_0.builtIn.HasValue())
+                if (entry_0.builtIn.IsNull())
                 {
-                    chip::JniReferences::GetInstance().CreateOptional(nullptr, newElement_0_builtIn);
+                    newElement_0_builtIn = nullptr;
                 }
                 else
                 {
-                    jobject newElement_0_builtInInsideOptional;
-                    if (entry_0.builtIn.Value().IsNull())
-                    {
-                        newElement_0_builtInInsideOptional = nullptr;
-                    }
-                    else
-                    {
-                        std::string newElement_0_builtInInsideOptionalClassName     = "java/lang/Boolean";
-                        std::string newElement_0_builtInInsideOptionalCtorSignature = "(Z)V";
-                        jboolean jninewElement_0_builtInInsideOptional = static_cast<jboolean>(entry_0.builtIn.Value().Value());
-                        chip::JniReferences::GetInstance().CreateBoxedObject<jboolean>(
-                            newElement_0_builtInInsideOptionalClassName.c_str(),
-                            newElement_0_builtInInsideOptionalCtorSignature.c_str(), jninewElement_0_builtInInsideOptional,
-                            newElement_0_builtInInsideOptional);
-                    }
-                    chip::JniReferences::GetInstance().CreateOptional(newElement_0_builtInInsideOptional, newElement_0_builtIn);
+                    std::string newElement_0_builtInClassName     = "java/lang/Boolean";
+                    std::string newElement_0_builtInCtorSignature = "(Z)V";
+                    jboolean jninewElement_0_builtIn              = static_cast<jboolean>(entry_0.builtIn.Value());
+                    chip::JniReferences::GetInstance().CreateBoxedObject<jboolean>(newElement_0_builtInClassName.c_str(),
+                                                                                   newElement_0_builtInCtorSignature.c_str(),
+                                                                                   jninewElement_0_builtIn, newElement_0_builtIn);
                 }
 
                 jclass scheduleStructStructClass_1;
@@ -28365,7 +28355,7 @@ jobject DecodeAttributeValue(const app::ConcreteAttributePath & aPath, TLV::TLVR
                 jmethodID scheduleStructStructCtor_1;
                 err = chip::JniReferences::GetInstance().FindMethod(
                     env, scheduleStructStructClass_1, "<init>",
-                    "([BLjava/lang/Integer;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/ArrayList;Ljava/util/Optional;)V",
+                    "([BLjava/lang/Integer;Ljava/util/Optional;Ljava/util/Optional;Ljava/util/ArrayList;Ljava/lang/Boolean;)V",
                     &scheduleStructStructCtor_1);
                 if (err != CHIP_NO_ERROR || scheduleStructStructCtor_1 == nullptr)
                 {
diff --git a/src/controller/python/chip/clusters/Objects.py b/src/controller/python/chip/clusters/Objects.py
index da92192016b089..d79059f4b56b5f 100644
--- a/src/controller/python/chip/clusters/Objects.py
+++ b/src/controller/python/chip/clusters/Objects.py
@@ -30159,8 +30159,7 @@ class Feature(IntFlag):
             kLocalTemperatureNotExposed = 0x40
             kMatterScheduleConfiguration = 0x80
             kPresets = 0x100
-            kSetpoints = 0x200
-            kQueuedPresetsSupported = 0x400
+            kQueuedPresetsSupported = 0x200
 
         class HVACSystemTypeBitmap(IntFlag):
             kCoolingStage = 0x3
@@ -30248,7 +30247,7 @@ def descriptor(cls) -> ClusterObjectDescriptor:
                         ClusterObjectFieldDescriptor(Label="name", Tag=2, Type=typing.Optional[str]),
                         ClusterObjectFieldDescriptor(Label="presetHandle", Tag=3, Type=typing.Optional[bytes]),
                         ClusterObjectFieldDescriptor(Label="transitions", Tag=4, Type=typing.List[Thermostat.Structs.ScheduleTransitionStruct]),
-                        ClusterObjectFieldDescriptor(Label="builtIn", Tag=5, Type=typing.Union[None, Nullable, bool]),
+                        ClusterObjectFieldDescriptor(Label="builtIn", Tag=5, Type=typing.Union[Nullable, bool]),
                     ])
 
             scheduleHandle: 'typing.Union[Nullable, bytes]' = NullValue
@@ -30256,7 +30255,7 @@ def descriptor(cls) -> ClusterObjectDescriptor:
             name: 'typing.Optional[str]' = None
             presetHandle: 'typing.Optional[bytes]' = None
             transitions: 'typing.List[Thermostat.Structs.ScheduleTransitionStruct]' = field(default_factory=lambda: [])
-            builtIn: 'typing.Union[None, Nullable, bool]' = None
+            builtIn: 'typing.Union[Nullable, bool]' = NullValue
 
         @dataclass
         class PresetStruct(ClusterObject):
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
index f11d395889afaa..a7ba7acc9de8c0 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRAttributeTLVValueDecoder.mm
@@ -11444,14 +11444,10 @@ static id _Nullable DecodeAttributeValueForThermostatCluster(AttributeId aAttrib
                     }
                     newElement_0.transitions = array_2;
                 }
-                if (entry_0.builtIn.HasValue()) {
-                    if (entry_0.builtIn.Value().IsNull()) {
-                        newElement_0.builtIn = nil;
-                    } else {
-                        newElement_0.builtIn = [NSNumber numberWithBool:entry_0.builtIn.Value().Value()];
-                    }
-                } else {
+                if (entry_0.builtIn.IsNull()) {
                     newElement_0.builtIn = nil;
+                } else {
+                    newElement_0.builtIn = [NSNumber numberWithBool:entry_0.builtIn.Value()];
                 }
                 [array_0 addObject:newElement_0];
             }
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
index 61b8a750b3540a..f927b2d8d67d3b 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.h
@@ -18548,8 +18548,7 @@ typedef NS_OPTIONS(uint32_t, MTRThermostatFeature) {
     MTRThermostatFeatureLocalTemperatureNotExposed MTR_AVAILABLE(ios(17.0), macos(14.0), watchos(10.0), tvos(17.0)) = 0x40,
     MTRThermostatFeatureMatterScheduleConfiguration MTR_PROVISIONALLY_AVAILABLE = 0x80,
     MTRThermostatFeaturePresets MTR_PROVISIONALLY_AVAILABLE = 0x100,
-    MTRThermostatFeatureSetpoints MTR_PROVISIONALLY_AVAILABLE = 0x200,
-    MTRThermostatFeatureQueuedPresetsSupported MTR_PROVISIONALLY_AVAILABLE = 0x400,
+    MTRThermostatFeatureQueuedPresetsSupported MTR_PROVISIONALLY_AVAILABLE = 0x200,
 } MTR_AVAILABLE(ios(16.1), macos(13.0), watchos(9.1), tvos(16.1));
 
 typedef NS_OPTIONS(uint8_t, MTRThermostatHVACSystemTypeBitmap) {
diff --git a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
index 50e411dad70331..c352cf0f9ce760 100644
--- a/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
+++ b/src/darwin/Framework/CHIP/zap-generated/MTRBaseClusters.mm
@@ -68318,15 +68318,12 @@ - (void)writeAttributeSchedulesWithValue:(NSArray * _Nonnull)value params:(MTRWr
            listHolder_0->mList[i_0].transitions = ListType_2();
          }
        }
-       if (element_0.builtIn != nil) {
-         auto & definedValue_2 = listHolder_0->mList[i_0].builtIn.Emplace();
-           if (element_0.builtIn == nil) {
-             definedValue_2.SetNull();
-           } else {
-             auto & nonNullValue_3 = definedValue_2.SetNonNull();
-                     nonNullValue_3 = element_0.builtIn.boolValue;
+       if (element_0.builtIn == nil) {
+         listHolder_0->mList[i_0].builtIn.SetNull();
+       } else {
+         auto & nonNullValue_2 = listHolder_0->mList[i_0].builtIn.SetNonNull();
+                 nonNullValue_2 = element_0.builtIn.boolValue;
   }
-       }
       }
               cppValue = ListType_0(listHolder_0->mList, value.count);
             } else {
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h b/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h
index 585d9fe8b8f1e6..e16bc7339c027f 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-enums.h
@@ -3631,8 +3631,7 @@ enum class Feature : uint32_t
     kLocalTemperatureNotExposed  = 0x40,
     kMatterScheduleConfiguration = 0x80,
     kPresets                     = 0x100,
-    kSetpoints                   = 0x200,
-    kQueuedPresetsSupported      = 0x400,
+    kQueuedPresetsSupported      = 0x200,
 };
 
 // Bitmap for HVACSystemTypeBitmap
diff --git a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
index 934de47159426b..a34050d30bcfe7 100644
--- a/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
+++ b/zzz_generated/app-common/app-common/zap-generated/cluster-objects.h
@@ -27478,7 +27478,7 @@ struct Type
     Optional<chip::CharSpan> name;
     Optional<chip::ByteSpan> presetHandle;
     DataModel::List<const Structs::ScheduleTransitionStruct::Type> transitions;
-    Optional<DataModel::Nullable<bool>> builtIn;
+    DataModel::Nullable<bool> builtIn;
 
     static constexpr bool kIsFabricScoped = false;
 
@@ -27493,7 +27493,7 @@ struct DecodableType
     Optional<chip::CharSpan> name;
     Optional<chip::ByteSpan> presetHandle;
     DataModel::DecodableList<Structs::ScheduleTransitionStruct::DecodableType> transitions;
-    Optional<DataModel::Nullable<bool>> builtIn;
+    DataModel::Nullable<bool> builtIn;
 
     CHIP_ERROR Decode(TLV::TLVReader & reader);
 
diff --git a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp
index 5813b0e5b12105..c87c934d8268fa 100644
--- a/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp
+++ b/zzz_generated/chip-tool/zap-generated/cluster/ComplexArgumentParser.cpp
@@ -3538,6 +3538,7 @@ CHIP_ERROR ComplexArgumentParser::Setup(const char * label,
         ComplexArgumentParser::EnsureMemberExist("ScheduleStruct.systemMode", "systemMode", value.isMember("systemMode")));
     ReturnErrorOnFailure(
         ComplexArgumentParser::EnsureMemberExist("ScheduleStruct.transitions", "transitions", value.isMember("transitions")));
+    ReturnErrorOnFailure(ComplexArgumentParser::EnsureMemberExist("ScheduleStruct.builtIn", "builtIn", value.isMember("builtIn")));
 
     char labelWithMember[kMaxLabelLength];
     snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "scheduleHandle");
@@ -3566,11 +3567,8 @@ CHIP_ERROR ComplexArgumentParser::Setup(const char * label,
     ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.transitions, value["transitions"]));
     valueCopy.removeMember("transitions");
 
-    if (value.isMember("builtIn"))
-    {
-        snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "builtIn");
-        ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.builtIn, value["builtIn"]));
-    }
+    snprintf(labelWithMember, sizeof(labelWithMember), "%s.%s", label, "builtIn");
+    ReturnErrorOnFailure(ComplexArgumentParser::Setup(labelWithMember, request.builtIn, value["builtIn"]));
     valueCopy.removeMember("builtIn");
 
     return ComplexArgumentParser::EnsureNoMembersRemaining(label, valueCopy);
diff --git a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
index 8266f153ec5a30..5d3d48fc79dad9 100644
--- a/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
+++ b/zzz_generated/darwin-framework-tool/zap-generated/cluster/Commands.h
@@ -107373,14 +107373,10 @@ class WriteThermostatSchedules : public WriteAttribute {
                     }
                     newElement_0.transitions = array_2;
                 }
-                if (entry_0.builtIn.HasValue()) {
-                    if (entry_0.builtIn.Value().IsNull()) {
-                        newElement_0.builtIn = nil;
-                    } else {
-                        newElement_0.builtIn = [NSNumber numberWithBool:entry_0.builtIn.Value().Value()];
-                    }
-                } else {
+                if (entry_0.builtIn.IsNull()) {
                     newElement_0.builtIn = nil;
+                } else {
+                    newElement_0.builtIn = [NSNumber numberWithBool:entry_0.builtIn.Value()];
                 }
                 [array_0 addObject:newElement_0];
             }