ThermostatBehavior: Type<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: BitFlag;
                }>, 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: FieldType<(...)>;
                    modeToReturn: FieldType<(...)>;
                }>, TypeFromFields<{
                    dayOfWeekForSequence: FieldType<(...)>;
                    modeForSequence: FieldType<(...)>;
                    numberOfTransitionsForSequence: FieldType<(...)>;
                    transitions: FieldType<(...)>;
                }>, any>;
                setWeeklySchedule: Command<TypeFromFields<{
                    dayOfWeekForSequence: FieldType<(...)>;
                    modeForSequence: FieldType<(...)>;
                    numberOfTransitionsForSequence: FieldType<(...)>;
                    transitions: FieldType<(...)>;
                }>, 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;
}>, Type<Of<{
    attributes: {};
    commands: {};
    events: {};
    id: 0;
    name: "Unknown";
    revision: 0;
}>, typeof ClusterBehavior, ThermostatInterface>, ThermostatInterface> = ...

ThermostatBehavior is the base class for objects that support interaction with Thermostat.Cluster.

Thermostat.Cluster requires you to enable one or more optional features. You can do so using ThermostatBehavior.with.