This cluster provides an interface to the functionality of a thermostat.

Per the Matter specification you cannot use ThermostatCluster without enabling certain feature combinations. You must use the with factory method to obtain a working cluster.

MatterSpecification.v13.Cluster § 4.3

interface Cluster {
    id: ClusterId;
    name: string;
    with: (<const SelectionT>(...selection: SelectionT) => Of<Of<{
        attributes: {
            acCapacity: OptionalWritableAttribute<number, any>;
            acCapacityFormat: OptionalWritableAttribute<BtUh, any>;
            acCoilTemperature: OptionalAttribute<null | number, any>;
            acCompressorType: OptionalWritableAttribute<Thermostat.AcCompressorType, any>;
            acErrorCode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                coilSensorFail: BitFlag;
                compressorFail: BitFlag;
                fanFail: BitFlag;
                outdoorSensorFail: BitFlag;
                roomSensorFail: BitFlag;
            }>, any>;
            acLouverPosition: OptionalWritableAttribute<Thermostat.AcLouverPosition, any>;
            acRefrigerantType: OptionalWritableAttribute<Thermostat.AcRefrigerantType, any>;
            acType: OptionalWritableAttribute<Thermostat.AcType, any>;
            controlSequenceOfOperation: WritableAttribute<Thermostat.ControlSequenceOfOperation, any>;
            emergencyHeatDelta: OptionalWritableAttribute<number, any>;
            localTemperature: Attribute<null | number, any>;
            outdoorTemperature: OptionalAttribute<null | number, any>;
            remoteSensing: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                localTemperature: BitFlag;
                occupancy: BitFlag;
                outdoorTemperature: BitFlag;
            }>, any>;
            setpointChangeAmount: OptionalAttribute<null | number, any>;
            setpointChangeSource: OptionalAttribute<Thermostat.SetpointChangeSource, any>;
            setpointChangeSourceTimestamp: OptionalAttribute<number, any>;
            systemMode: WritableAttribute<Thermostat.SystemMode, any>;
            temperatureSetpointHold: OptionalWritableAttribute<Thermostat.TemperatureSetpointHold, any>;
            temperatureSetpointHoldDuration: OptionalWritableAttribute<null | number, any>;
            thermostatProgrammingOperationMode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                autoRecovery: BitFlag;
                economy: BitFlag;
                scheduleActive: BitFlag;
            }>, any>;
            thermostatRunningState: OptionalAttribute<TypeFromPartialBitSchema<{
                cool: BitFlag;
                coolStage2: BitFlag;
                fan: BitFlag;
                fanStage2: BitFlag;
                fanStage3: BitFlag;
                heat: BitFlag;
                heatStage2: BitFlag;
            }>, any>;
        };
        commands: {
            setpointRaiseLower: Command<TypeFromFields<{
                amount: FieldType<number>;
                mode: FieldType<Thermostat.SetpointRaiseLowerMode>;
            }>, void, any>;
        };
        extensions: readonly [{
            component: {
                attributes: {
                    occupancy: Attribute<TypeFromPartialBitSchema<{
                        occupied: ...;
                    }>, any>;
                };
            };
            flags: {
                occupancy: true;
            };
        }, {
            component: {
                attributes: {
                    absMaxHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                    absMinHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                    maxHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                    minHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                    occupiedHeatingSetpoint: WritableAttribute<number, any>;
                    piHeatingDemand: OptionalAttribute<number, any>;
                };
            };
            flags: {
                heating: true;
            };
        }, {
            component: {
                attributes: {
                    absMaxCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                    absMinCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                    maxCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                    minCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                    occupiedCoolingSetpoint: WritableAttribute<number, any>;
                    piCoolingDemand: OptionalAttribute<number, any>;
                };
            };
            flags: {
                cooling: true;
            };
        }, {
            component: {
                attributes: {
                    localTemperatureCalibration: OptionalWritableAttribute<number, any>;
                };
            };
            flags: {
                localTemperatureNotExposed: false;
            };
        }, {
            component: {
                attributes: {
                    unoccupiedCoolingSetpoint: WritableAttribute<number, any>;
                };
            };
            flags: {
                cooling: true;
                occupancy: true;
            };
        }, {
            component: {
                attributes: {
                    unoccupiedHeatingSetpoint: WritableAttribute<number, any>;
                };
            };
            flags: {
                heating: true;
                occupancy: true;
            };
        }, {
            component: {
                attributes: {
                    minSetpointDeadBand: WritableAttribute<number, any>;
                    thermostatRunningMode: OptionalAttribute<Thermostat.ThermostatRunningMode, any>;
                };
            };
            flags: {
                autoMode: true;
            };
        }, {
            component: {
                attributes: {
                    numberOfDailyTransitions: FixedAttribute<number, any>;
                    numberOfWeeklyTransitions: FixedAttribute<number, any>;
                    startOfWeek: FixedAttribute<Thermostat.StartOfWeek, any>;
                };
                commands: {
                    clearWeeklySchedule: Command<void, void, any>;
                    getWeeklySchedule: Command<TypeFromFields<{
                        daysToReturn: ...;
                        modeToReturn: ...;
                    }>, TypeFromFields<{
                        dayOfWeekForSequence: ...;
                        modeForSequence: ...;
                        numberOfTransitionsForSequence: ...;
                        transitions: ...;
                    }>, any>;
                    setWeeklySchedule: Command<TypeFromFields<{
                        dayOfWeekForSequence: ...;
                        modeForSequence: ...;
                        numberOfTransitionsForSequence: ...;
                        transitions: ...;
                    }>, void, any>;
                };
            };
            flags: {
                scheduleConfiguration: true;
            };
        }, {
            component: {
                attributes: {
                    occupiedSetback: WritableAttribute<null | number, any>;
                    occupiedSetbackMax: FixedAttribute<null | number, any>;
                    occupiedSetbackMin: FixedAttribute<null | number, any>;
                };
            };
            flags: {
                setback: true;
            };
        }, {
            component: {
                attributes: {
                    unoccupiedSetback: WritableAttribute<null | number, any>;
                    unoccupiedSetbackMax: FixedAttribute<null | number, any>;
                    unoccupiedSetbackMin: FixedAttribute<null | number, any>;
                };
            };
            flags: {
                occupancy: true;
                setback: true;
            };
        }, {
            component: false;
            flags: {
                autoMode: true;
                heating: false;
            };
        }, {
            component: false;
            flags: {
                autoMode: true;
                cooling: false;
            };
        }, {
            component: false;
            flags: {
                cooling: false;
                heating: false;
            };
        }];
        features: {
            autoMode: BitFlag;
            cooling: BitFlag;
            heating: BitFlag;
            localTemperatureNotExposed: BitFlag;
            occupancy: BitFlag;
            scheduleConfiguration: BitFlag;
            setback: BitFlag;
        };
        id: 513;
        name: "Thermostat";
        revision: 6;
    }>, SelectionT>);
}

Hierarchy (view full)

Properties

Properties

name: string
with: (<const SelectionT>(...selection: SelectionT) => Of<Of<{
    attributes: {
        acCapacity: OptionalWritableAttribute<number, any>;
        acCapacityFormat: OptionalWritableAttribute<BtUh, any>;
        acCoilTemperature: OptionalAttribute<null | number, any>;
        acCompressorType: OptionalWritableAttribute<Thermostat.AcCompressorType, any>;
        acErrorCode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
            coilSensorFail: BitFlag;
            compressorFail: BitFlag;
            fanFail: BitFlag;
            outdoorSensorFail: BitFlag;
            roomSensorFail: BitFlag;
        }>, any>;
        acLouverPosition: OptionalWritableAttribute<Thermostat.AcLouverPosition, any>;
        acRefrigerantType: OptionalWritableAttribute<Thermostat.AcRefrigerantType, any>;
        acType: OptionalWritableAttribute<Thermostat.AcType, any>;
        controlSequenceOfOperation: WritableAttribute<Thermostat.ControlSequenceOfOperation, any>;
        emergencyHeatDelta: OptionalWritableAttribute<number, any>;
        localTemperature: Attribute<null | number, any>;
        outdoorTemperature: OptionalAttribute<null | number, any>;
        remoteSensing: OptionalWritableAttribute<TypeFromPartialBitSchema<{
            localTemperature: BitFlag;
            occupancy: BitFlag;
            outdoorTemperature: BitFlag;
        }>, any>;
        setpointChangeAmount: OptionalAttribute<null | number, any>;
        setpointChangeSource: OptionalAttribute<Thermostat.SetpointChangeSource, any>;
        setpointChangeSourceTimestamp: OptionalAttribute<number, any>;
        systemMode: WritableAttribute<Thermostat.SystemMode, any>;
        temperatureSetpointHold: OptionalWritableAttribute<Thermostat.TemperatureSetpointHold, any>;
        temperatureSetpointHoldDuration: OptionalWritableAttribute<null | number, any>;
        thermostatProgrammingOperationMode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
            autoRecovery: BitFlag;
            economy: BitFlag;
            scheduleActive: BitFlag;
        }>, any>;
        thermostatRunningState: OptionalAttribute<TypeFromPartialBitSchema<{
            cool: BitFlag;
            coolStage2: BitFlag;
            fan: BitFlag;
            fanStage2: BitFlag;
            fanStage3: BitFlag;
            heat: BitFlag;
            heatStage2: BitFlag;
        }>, any>;
    };
    commands: {
        setpointRaiseLower: Command<TypeFromFields<{
            amount: FieldType<number>;
            mode: FieldType<Thermostat.SetpointRaiseLowerMode>;
        }>, void, any>;
    };
    extensions: readonly [{
        component: {
            attributes: {
                occupancy: Attribute<TypeFromPartialBitSchema<{
                    occupied: ...;
                }>, any>;
            };
        };
        flags: {
            occupancy: true;
        };
    }, {
        component: {
            attributes: {
                absMaxHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                absMinHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                maxHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                minHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                occupiedHeatingSetpoint: WritableAttribute<number, any>;
                piHeatingDemand: OptionalAttribute<number, any>;
            };
        };
        flags: {
            heating: true;
        };
    }, {
        component: {
            attributes: {
                absMaxCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                absMinCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                maxCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                minCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                occupiedCoolingSetpoint: WritableAttribute<number, any>;
                piCoolingDemand: OptionalAttribute<number, any>;
            };
        };
        flags: {
            cooling: true;
        };
    }, {
        component: {
            attributes: {
                localTemperatureCalibration: OptionalWritableAttribute<number, any>;
            };
        };
        flags: {
            localTemperatureNotExposed: false;
        };
    }, {
        component: {
            attributes: {
                unoccupiedCoolingSetpoint: WritableAttribute<number, any>;
            };
        };
        flags: {
            cooling: true;
            occupancy: true;
        };
    }, {
        component: {
            attributes: {
                unoccupiedHeatingSetpoint: WritableAttribute<number, any>;
            };
        };
        flags: {
            heating: true;
            occupancy: true;
        };
    }, {
        component: {
            attributes: {
                minSetpointDeadBand: WritableAttribute<number, any>;
                thermostatRunningMode: OptionalAttribute<Thermostat.ThermostatRunningMode, any>;
            };
        };
        flags: {
            autoMode: true;
        };
    }, {
        component: {
            attributes: {
                numberOfDailyTransitions: FixedAttribute<number, any>;
                numberOfWeeklyTransitions: FixedAttribute<number, any>;
                startOfWeek: FixedAttribute<Thermostat.StartOfWeek, any>;
            };
            commands: {
                clearWeeklySchedule: Command<void, void, any>;
                getWeeklySchedule: Command<TypeFromFields<{
                    daysToReturn: ...;
                    modeToReturn: ...;
                }>, TypeFromFields<{
                    dayOfWeekForSequence: ...;
                    modeForSequence: ...;
                    numberOfTransitionsForSequence: ...;
                    transitions: ...;
                }>, any>;
                setWeeklySchedule: Command<TypeFromFields<{
                    dayOfWeekForSequence: ...;
                    modeForSequence: ...;
                    numberOfTransitionsForSequence: ...;
                    transitions: ...;
                }>, void, any>;
            };
        };
        flags: {
            scheduleConfiguration: true;
        };
    }, {
        component: {
            attributes: {
                occupiedSetback: WritableAttribute<null | number, any>;
                occupiedSetbackMax: FixedAttribute<null | number, any>;
                occupiedSetbackMin: FixedAttribute<null | number, any>;
            };
        };
        flags: {
            setback: true;
        };
    }, {
        component: {
            attributes: {
                unoccupiedSetback: WritableAttribute<null | number, any>;
                unoccupiedSetbackMax: FixedAttribute<null | number, any>;
                unoccupiedSetbackMin: FixedAttribute<null | number, any>;
            };
        };
        flags: {
            occupancy: true;
            setback: true;
        };
    }, {
        component: false;
        flags: {
            autoMode: true;
            heating: false;
        };
    }, {
        component: false;
        flags: {
            autoMode: true;
            cooling: false;
        };
    }, {
        component: false;
        flags: {
            cooling: false;
            heating: false;
        };
    }];
    features: {
        autoMode: BitFlag;
        cooling: BitFlag;
        heating: BitFlag;
        localTemperatureNotExposed: BitFlag;
        occupancy: BitFlag;
        scheduleConfiguration: BitFlag;
        setback: BitFlag;
    };
    id: 513;
    name: "Thermostat";
    revision: 6;
}>, SelectionT>)

Type declaration

    • <const SelectionT>(...selection): Of<Of<{
          attributes: {
              acCapacity: OptionalWritableAttribute<number, any>;
              acCapacityFormat: OptionalWritableAttribute<BtUh, any>;
              acCoilTemperature: OptionalAttribute<null | number, any>;
              acCompressorType: OptionalWritableAttribute<Thermostat.AcCompressorType, any>;
              acErrorCode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                  coilSensorFail: BitFlag;
                  compressorFail: BitFlag;
                  fanFail: BitFlag;
                  outdoorSensorFail: BitFlag;
                  roomSensorFail: BitFlag;
              }>, any>;
              acLouverPosition: OptionalWritableAttribute<Thermostat.AcLouverPosition, any>;
              acRefrigerantType: OptionalWritableAttribute<Thermostat.AcRefrigerantType, any>;
              acType: OptionalWritableAttribute<Thermostat.AcType, any>;
              controlSequenceOfOperation: WritableAttribute<Thermostat.ControlSequenceOfOperation, any>;
              emergencyHeatDelta: OptionalWritableAttribute<number, any>;
              localTemperature: Attribute<null | number, any>;
              outdoorTemperature: OptionalAttribute<null | number, any>;
              remoteSensing: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                  localTemperature: BitFlag;
                  occupancy: BitFlag;
                  outdoorTemperature: BitFlag;
              }>, any>;
              setpointChangeAmount: OptionalAttribute<null | number, any>;
              setpointChangeSource: OptionalAttribute<Thermostat.SetpointChangeSource, any>;
              setpointChangeSourceTimestamp: OptionalAttribute<number, any>;
              systemMode: WritableAttribute<Thermostat.SystemMode, any>;
              temperatureSetpointHold: OptionalWritableAttribute<Thermostat.TemperatureSetpointHold, any>;
              temperatureSetpointHoldDuration: OptionalWritableAttribute<null | number, any>;
              thermostatProgrammingOperationMode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                  autoRecovery: BitFlag;
                  economy: BitFlag;
                  scheduleActive: BitFlag;
              }>, any>;
              thermostatRunningState: OptionalAttribute<TypeFromPartialBitSchema<{
                  cool: BitFlag;
                  coolStage2: BitFlag;
                  fan: BitFlag;
                  fanStage2: BitFlag;
                  fanStage3: BitFlag;
                  heat: BitFlag;
                  heatStage2: BitFlag;
              }>, any>;
          };
          commands: {
              setpointRaiseLower: Command<TypeFromFields<{
                  amount: FieldType<number>;
                  mode: FieldType<Thermostat.SetpointRaiseLowerMode>;
              }>, void, any>;
          };
          extensions: readonly [{
              component: {
                  attributes: {
                      occupancy: Attribute<TypeFromPartialBitSchema<{
                          occupied: ...;
                      }>, any>;
                  };
              };
              flags: {
                  occupancy: true;
              };
          }, {
              component: {
                  attributes: {
                      absMaxHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                      absMinHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                      maxHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                      minHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                      occupiedHeatingSetpoint: WritableAttribute<number, any>;
                      piHeatingDemand: OptionalAttribute<number, any>;
                  };
              };
              flags: {
                  heating: true;
              };
          }, {
              component: {
                  attributes: {
                      absMaxCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                      absMinCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                      maxCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                      minCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                      occupiedCoolingSetpoint: WritableAttribute<number, any>;
                      piCoolingDemand: OptionalAttribute<number, any>;
                  };
              };
              flags: {
                  cooling: true;
              };
          }, {
              component: {
                  attributes: {
                      localTemperatureCalibration: OptionalWritableAttribute<number, any>;
                  };
              };
              flags: {
                  localTemperatureNotExposed: false;
              };
          }, {
              component: {
                  attributes: {
                      unoccupiedCoolingSetpoint: WritableAttribute<number, any>;
                  };
              };
              flags: {
                  cooling: true;
                  occupancy: true;
              };
          }, {
              component: {
                  attributes: {
                      unoccupiedHeatingSetpoint: WritableAttribute<number, any>;
                  };
              };
              flags: {
                  heating: true;
                  occupancy: true;
              };
          }, {
              component: {
                  attributes: {
                      minSetpointDeadBand: WritableAttribute<number, any>;
                      thermostatRunningMode: OptionalAttribute<Thermostat.ThermostatRunningMode, any>;
                  };
              };
              flags: {
                  autoMode: true;
              };
          }, {
              component: {
                  attributes: {
                      numberOfDailyTransitions: FixedAttribute<number, any>;
                      numberOfWeeklyTransitions: FixedAttribute<number, any>;
                      startOfWeek: FixedAttribute<Thermostat.StartOfWeek, any>;
                  };
                  commands: {
                      clearWeeklySchedule: Command<void, void, any>;
                      getWeeklySchedule: Command<TypeFromFields<{
                          daysToReturn: ...;
                          modeToReturn: ...;
                      }>, TypeFromFields<{
                          dayOfWeekForSequence: ...;
                          modeForSequence: ...;
                          numberOfTransitionsForSequence: ...;
                          transitions: ...;
                      }>, any>;
                      setWeeklySchedule: Command<TypeFromFields<{
                          dayOfWeekForSequence: ...;
                          modeForSequence: ...;
                          numberOfTransitionsForSequence: ...;
                          transitions: ...;
                      }>, void, any>;
                  };
              };
              flags: {
                  scheduleConfiguration: true;
              };
          }, {
              component: {
                  attributes: {
                      occupiedSetback: WritableAttribute<null | number, any>;
                      occupiedSetbackMax: FixedAttribute<null | number, any>;
                      occupiedSetbackMin: FixedAttribute<null | number, any>;
                  };
              };
              flags: {
                  setback: true;
              };
          }, {
              component: {
                  attributes: {
                      unoccupiedSetback: WritableAttribute<null | number, any>;
                      unoccupiedSetbackMax: FixedAttribute<null | number, any>;
                      unoccupiedSetbackMin: FixedAttribute<null | number, any>;
                  };
              };
              flags: {
                  occupancy: true;
                  setback: true;
              };
          }, {
              component: false;
              flags: {
                  autoMode: true;
                  heating: false;
              };
          }, {
              component: false;
              flags: {
                  autoMode: true;
                  cooling: false;
              };
          }, {
              component: false;
              flags: {
                  cooling: false;
                  heating: false;
              };
          }];
          features: {
              autoMode: BitFlag;
              cooling: BitFlag;
              heating: BitFlag;
              localTemperatureNotExposed: BitFlag;
              occupancy: BitFlag;
              scheduleConfiguration: BitFlag;
              setback: BitFlag;
          };
          id: 513;
          name: "Thermostat";
          revision: 6;
      }>, SelectionT>
    • Select features using ClusterComposer.compose.

      Type Parameters

      • const SelectionT extends FeatureSelection<Of<{
            attributes: {
                acCapacity: OptionalWritableAttribute<number, any>;
                acCapacityFormat: OptionalWritableAttribute<BtUh, any>;
                acCoilTemperature: OptionalAttribute<null | number, any>;
                acCompressorType: OptionalWritableAttribute<Thermostat.AcCompressorType, any>;
                acErrorCode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                    coilSensorFail: BitFlag;
                    compressorFail: BitFlag;
                    fanFail: BitFlag;
                    outdoorSensorFail: BitFlag;
                    roomSensorFail: BitFlag;
                }>, any>;
                acLouverPosition: OptionalWritableAttribute<Thermostat.AcLouverPosition, any>;
                acRefrigerantType: OptionalWritableAttribute<Thermostat.AcRefrigerantType, any>;
                acType: OptionalWritableAttribute<Thermostat.AcType, any>;
                controlSequenceOfOperation: WritableAttribute<Thermostat.ControlSequenceOfOperation, any>;
                emergencyHeatDelta: OptionalWritableAttribute<number, any>;
                localTemperature: Attribute<null | number, any>;
                outdoorTemperature: OptionalAttribute<null | number, any>;
                remoteSensing: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                    localTemperature: BitFlag;
                    occupancy: BitFlag;
                    outdoorTemperature: BitFlag;
                }>, any>;
                setpointChangeAmount: OptionalAttribute<null | number, any>;
                setpointChangeSource: OptionalAttribute<Thermostat.SetpointChangeSource, any>;
                setpointChangeSourceTimestamp: OptionalAttribute<number, any>;
                systemMode: WritableAttribute<Thermostat.SystemMode, any>;
                temperatureSetpointHold: OptionalWritableAttribute<Thermostat.TemperatureSetpointHold, any>;
                temperatureSetpointHoldDuration: OptionalWritableAttribute<null | number, any>;
                thermostatProgrammingOperationMode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                    autoRecovery: BitFlag;
                    economy: BitFlag;
                    scheduleActive: BitFlag;
                }>, any>;
                thermostatRunningState: OptionalAttribute<TypeFromPartialBitSchema<{
                    cool: BitFlag;
                    coolStage2: BitFlag;
                    fan: BitFlag;
                    fanStage2: BitFlag;
                    fanStage3: BitFlag;
                    heat: BitFlag;
                    heatStage2: BitFlag;
                }>, any>;
            };
            commands: {
                setpointRaiseLower: Command<TypeFromFields<{
                    amount: FieldType<number>;
                    mode: FieldType<Thermostat.SetpointRaiseLowerMode>;
                }>, void, any>;
            };
            extensions: readonly [{
                component: {
                    attributes: {
                        occupancy: Attribute<TypeFromPartialBitSchema<{
                            occupied: ...;
                        }>, any>;
                    };
                };
                flags: {
                    occupancy: true;
                };
            }, {
                component: {
                    attributes: {
                        absMaxHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                        absMinHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                        maxHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                        minHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                        occupiedHeatingSetpoint: WritableAttribute<number, any>;
                        piHeatingDemand: OptionalAttribute<number, any>;
                    };
                };
                flags: {
                    heating: true;
                };
            }, {
                component: {
                    attributes: {
                        absMaxCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                        absMinCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                        maxCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                        minCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                        occupiedCoolingSetpoint: WritableAttribute<number, any>;
                        piCoolingDemand: OptionalAttribute<number, any>;
                    };
                };
                flags: {
                    cooling: true;
                };
            }, {
                component: {
                    attributes: {
                        localTemperatureCalibration: OptionalWritableAttribute<number, any>;
                    };
                };
                flags: {
                    localTemperatureNotExposed: false;
                };
            }, {
                component: {
                    attributes: {
                        unoccupiedCoolingSetpoint: WritableAttribute<number, any>;
                    };
                };
                flags: {
                    cooling: true;
                    occupancy: true;
                };
            }, {
                component: {
                    attributes: {
                        unoccupiedHeatingSetpoint: WritableAttribute<number, any>;
                    };
                };
                flags: {
                    heating: true;
                    occupancy: true;
                };
            }, {
                component: {
                    attributes: {
                        minSetpointDeadBand: WritableAttribute<number, any>;
                        thermostatRunningMode: OptionalAttribute<Thermostat.ThermostatRunningMode, any>;
                    };
                };
                flags: {
                    autoMode: true;
                };
            }, {
                component: {
                    attributes: {
                        numberOfDailyTransitions: FixedAttribute<number, any>;
                        numberOfWeeklyTransitions: FixedAttribute<number, any>;
                        startOfWeek: FixedAttribute<Thermostat.StartOfWeek, any>;
                    };
                    commands: {
                        clearWeeklySchedule: Command<void, void, any>;
                        getWeeklySchedule: Command<TypeFromFields<{
                            daysToReturn: ...;
                            modeToReturn: ...;
                        }>, TypeFromFields<{
                            dayOfWeekForSequence: ...;
                            modeForSequence: ...;
                            numberOfTransitionsForSequence: ...;
                            transitions: ...;
                        }>, any>;
                        setWeeklySchedule: Command<TypeFromFields<{
                            dayOfWeekForSequence: ...;
                            modeForSequence: ...;
                            numberOfTransitionsForSequence: ...;
                            transitions: ...;
                        }>, void, any>;
                    };
                };
                flags: {
                    scheduleConfiguration: true;
                };
            }, {
                component: {
                    attributes: {
                        occupiedSetback: WritableAttribute<null | number, any>;
                        occupiedSetbackMax: FixedAttribute<null | number, any>;
                        occupiedSetbackMin: FixedAttribute<null | number, any>;
                    };
                };
                flags: {
                    setback: true;
                };
            }, {
                component: {
                    attributes: {
                        unoccupiedSetback: WritableAttribute<null | number, any>;
                        unoccupiedSetbackMax: FixedAttribute<null | number, any>;
                        unoccupiedSetbackMin: FixedAttribute<null | number, any>;
                    };
                };
                flags: {
                    occupancy: true;
                    setback: true;
                };
            }, {
                component: false;
                flags: {
                    autoMode: true;
                    heating: false;
                };
            }, {
                component: false;
                flags: {
                    autoMode: true;
                    cooling: false;
                };
            }, {
                component: false;
                flags: {
                    cooling: false;
                    heating: false;
                };
            }];
            features: {
                autoMode: BitFlag;
                cooling: BitFlag;
                heating: BitFlag;
                localTemperatureNotExposed: BitFlag;
                occupancy: BitFlag;
                scheduleConfiguration: BitFlag;
                setback: BitFlag;
            };
            id: 513;
            name: "Thermostat";
            revision: 6;
        }>>

      Parameters

      Returns Of<Of<{
          attributes: {
              acCapacity: OptionalWritableAttribute<number, any>;
              acCapacityFormat: OptionalWritableAttribute<BtUh, any>;
              acCoilTemperature: OptionalAttribute<null | number, any>;
              acCompressorType: OptionalWritableAttribute<Thermostat.AcCompressorType, any>;
              acErrorCode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                  coilSensorFail: BitFlag;
                  compressorFail: BitFlag;
                  fanFail: BitFlag;
                  outdoorSensorFail: BitFlag;
                  roomSensorFail: BitFlag;
              }>, any>;
              acLouverPosition: OptionalWritableAttribute<Thermostat.AcLouverPosition, any>;
              acRefrigerantType: OptionalWritableAttribute<Thermostat.AcRefrigerantType, any>;
              acType: OptionalWritableAttribute<Thermostat.AcType, any>;
              controlSequenceOfOperation: WritableAttribute<Thermostat.ControlSequenceOfOperation, any>;
              emergencyHeatDelta: OptionalWritableAttribute<number, any>;
              localTemperature: Attribute<null | number, any>;
              outdoorTemperature: OptionalAttribute<null | number, any>;
              remoteSensing: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                  localTemperature: BitFlag;
                  occupancy: BitFlag;
                  outdoorTemperature: BitFlag;
              }>, any>;
              setpointChangeAmount: OptionalAttribute<null | number, any>;
              setpointChangeSource: OptionalAttribute<Thermostat.SetpointChangeSource, any>;
              setpointChangeSourceTimestamp: OptionalAttribute<number, any>;
              systemMode: WritableAttribute<Thermostat.SystemMode, any>;
              temperatureSetpointHold: OptionalWritableAttribute<Thermostat.TemperatureSetpointHold, any>;
              temperatureSetpointHoldDuration: OptionalWritableAttribute<null | number, any>;
              thermostatProgrammingOperationMode: OptionalWritableAttribute<TypeFromPartialBitSchema<{
                  autoRecovery: BitFlag;
                  economy: BitFlag;
                  scheduleActive: BitFlag;
              }>, any>;
              thermostatRunningState: OptionalAttribute<TypeFromPartialBitSchema<{
                  cool: BitFlag;
                  coolStage2: BitFlag;
                  fan: BitFlag;
                  fanStage2: BitFlag;
                  fanStage3: BitFlag;
                  heat: BitFlag;
                  heatStage2: BitFlag;
              }>, any>;
          };
          commands: {
              setpointRaiseLower: Command<TypeFromFields<{
                  amount: FieldType<number>;
                  mode: FieldType<Thermostat.SetpointRaiseLowerMode>;
              }>, void, any>;
          };
          extensions: readonly [{
              component: {
                  attributes: {
                      occupancy: Attribute<TypeFromPartialBitSchema<{
                          occupied: ...;
                      }>, any>;
                  };
              };
              flags: {
                  occupancy: true;
              };
          }, {
              component: {
                  attributes: {
                      absMaxHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                      absMinHeatSetpointLimit: OptionalFixedAttribute<number, any>;
                      maxHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                      minHeatSetpointLimit: OptionalWritableAttribute<number, any>;
                      occupiedHeatingSetpoint: WritableAttribute<number, any>;
                      piHeatingDemand: OptionalAttribute<number, any>;
                  };
              };
              flags: {
                  heating: true;
              };
          }, {
              component: {
                  attributes: {
                      absMaxCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                      absMinCoolSetpointLimit: OptionalFixedAttribute<number, any>;
                      maxCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                      minCoolSetpointLimit: OptionalWritableAttribute<number, any>;
                      occupiedCoolingSetpoint: WritableAttribute<number, any>;
                      piCoolingDemand: OptionalAttribute<number, any>;
                  };
              };
              flags: {
                  cooling: true;
              };
          }, {
              component: {
                  attributes: {
                      localTemperatureCalibration: OptionalWritableAttribute<number, any>;
                  };
              };
              flags: {
                  localTemperatureNotExposed: false;
              };
          }, {
              component: {
                  attributes: {
                      unoccupiedCoolingSetpoint: WritableAttribute<number, any>;
                  };
              };
              flags: {
                  cooling: true;
                  occupancy: true;
              };
          }, {
              component: {
                  attributes: {
                      unoccupiedHeatingSetpoint: WritableAttribute<number, any>;
                  };
              };
              flags: {
                  heating: true;
                  occupancy: true;
              };
          }, {
              component: {
                  attributes: {
                      minSetpointDeadBand: WritableAttribute<number, any>;
                      thermostatRunningMode: OptionalAttribute<Thermostat.ThermostatRunningMode, any>;
                  };
              };
              flags: {
                  autoMode: true;
              };
          }, {
              component: {
                  attributes: {
                      numberOfDailyTransitions: FixedAttribute<number, any>;
                      numberOfWeeklyTransitions: FixedAttribute<number, any>;
                      startOfWeek: FixedAttribute<Thermostat.StartOfWeek, any>;
                  };
                  commands: {
                      clearWeeklySchedule: Command<void, void, any>;
                      getWeeklySchedule: Command<TypeFromFields<{
                          daysToReturn: ...;
                          modeToReturn: ...;
                      }>, TypeFromFields<{
                          dayOfWeekForSequence: ...;
                          modeForSequence: ...;
                          numberOfTransitionsForSequence: ...;
                          transitions: ...;
                      }>, any>;
                      setWeeklySchedule: Command<TypeFromFields<{
                          dayOfWeekForSequence: ...;
                          modeForSequence: ...;
                          numberOfTransitionsForSequence: ...;
                          transitions: ...;
                      }>, void, any>;
                  };
              };
              flags: {
                  scheduleConfiguration: true;
              };
          }, {
              component: {
                  attributes: {
                      occupiedSetback: WritableAttribute<null | number, any>;
                      occupiedSetbackMax: FixedAttribute<null | number, any>;
                      occupiedSetbackMin: FixedAttribute<null | number, any>;
                  };
              };
              flags: {
                  setback: true;
              };
          }, {
              component: {
                  attributes: {
                      unoccupiedSetback: WritableAttribute<null | number, any>;
                      unoccupiedSetbackMax: FixedAttribute<null | number, any>;
                      unoccupiedSetbackMin: FixedAttribute<null | number, any>;
                  };
              };
              flags: {
                  occupancy: true;
                  setback: true;
              };
          }, {
              component: false;
              flags: {
                  autoMode: true;
                  heating: false;
              };
          }, {
              component: false;
              flags: {
                  autoMode: true;
                  cooling: false;
              };
          }, {
              component: false;
              flags: {
                  cooling: false;
                  heating: false;
              };
          }];
          features: {
              autoMode: BitFlag;
              cooling: BitFlag;
              heating: BitFlag;
              localTemperatureNotExposed: BitFlag;
              occupancy: BitFlag;
              scheduleConfiguration: BitFlag;
              setback: BitFlag;
          };
          id: 513;
          name: "Thermostat";
          revision: 6;
      }>, SelectionT>