Creating and Managing Climate Presets
Learn how to create, list, update, and delete climate presets for thermostats.
You create a set of climate presets for each thermostat, customized for your—and your users'—needs. Each climate preset is a predefined configuration for a thermostat that specifies settings, such as HVAC mode, fan mode, and temperature set points. These presets make it quick and efficient for users to apply consistent climate settings tailored to different scenarios, enhancing both comfort and energy efficiency.
Once you create climate presets, you can activate them, add them to thermostat schedules and programs, and set them as the fallback climate preset.
Climate Preset Properties
Each climate preset can contain the following properties, depending on the capabilities of the thermostat:
climate_preset_key
(Required) Key to identify the climate preset.
name
(Optional) User-friendly name to identify the climate preset.
fan_mode_setting
Desired fan mode setting, such as on, auto, or circulate.
hvac_mode_setting
Desired HVAC mode setting, such as heat, cool, heat_cool, or off.
cooling_set_point_celsius
Temperature to which the thermostat should cool (in °C). See also Set Points.
cooling_set_point_fahrenheit
Temperature to which the thermostat should cool (in °F).
heating_set_point_celsius
Temperature to which the thermostat should heat (in °C).
heating_set_point_fahrenheit
Temperature to which the thermostat should heat (in °F).
manual_override_allowed
(Optional) Indicates whether a person at the thermostat or using the API can change the thermostat's settings.
Deprecated. Use thermostat_schedule.is_override_allowed instead.
can_edit
Indicates whether the climate preset can be edited. There are some cases in which Seam syncs in climate presets (from the device) that cannot be modified.
can_delete
Indicates whether the climate preset can be deleted. There are some cases in which Seam syncs in climate presets (from the device) that cannot be deleted.
Create a Climate Preset
To create a climate preset, issue a /thermostats/create_climate_preset request, providing the device_id of the desired thermostat. Also, include the desired settings for the climate preset and, optionally, a name.
The following example creates two climate presets with the keys occupied and unoccupied:
Request:
# Get the thermostat.
thermostat = seam.devices.get(
device_id = "2d488679-6f07-4810-aed2-e726872c1dd5"
)
# Confirm that the thermostat supports heat_cool mode
# so that the climate presets can use this mode.
if thermostat.can_hvac_heat_cool:
# Create the climate presets.
seam.thermostats.create_climate_preset(
device_id = thermostat.device_id,
climate_preset_key = "occupied",
name = "Occupied",
fan_mode_setting = "auto",
hvac_mode_setting = "heat_cool",
cooling_set_point_celsius = 25,
heating_set_point_celsius = 20
)
seam.thermostats.create_climate_preset(
device_id: thermostat.device_id,
climate_preset_key = "unoccupied",
name = "Unoccupied",
fan_mode_setting = "auto",
hvac_mode_setting = "heat_cool",
cooling_set_point_celsius = 30,
heating_set_point_celsius = 15
) Response:
NoneRequest:
# Get the thermostat.
thermostat=$(
# Use GET or POST.
curl -X 'GET' \
'https://connect.getseam.com/devices/get' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"device_id": "2d488679-6f07-4810-aed2-e726872c1dd5"
}')
# Confirm that the thermostat supports heat_cool mode
# so that the climate presets can use this mode.
if $(jq -r '.device.can_hvac_heat_cool' <<< ${thermostat}); then \
# Create the climate presets.
curl -X 'POST' \
'https://connect.getseam.com/thermostats/create_climate_preset' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d "{
\"device_id\": \"$(jq -r '.device.device_id' <<< ${thermostat})\",
\"climate_preset_key\": \"occupied\",
\"name\": \"Occupied\",
\"fan_mode_setting\": \"auto\",
\"hvac_mode_setting\": \"heat_cool\",
\"cooling_set_point_celsius\": 25,
\"heating_set_point_celsius\": 20
}";
curl -X 'POST' \
'https://connect.getseam.com/thermostats/create_climate_preset' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d "{
\"device_id\": \"$(jq -r '.device.device_id' <<< ${thermostat})\",
\"climate_preset_key\": \"unoccupied\",
\"name\": \"Unoccupied\",
\"fan_mode_setting\": \"auto\",
\"hvac_mode_setting\": \"heat_cool\",
\"cooling_set_point_celsius\": 30,
\"heating_set_point_celsius\": 15
}";
fiResponse:
{
"ok": true
}Request:
// Get the thermostat.
const thermostat = await seam.devices.get({
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5"
});
// Confirm that the thermostat supports heat_cool mode
// so that the climate presets can use this mode.
if (thermostat.can_hvac_heat_cool) {
// Create the climate presets.
await seam.thermostats.createClimatePreset({
device_id: thermostat.device_id,
climate_preset_key: "occupied",
name: "Occupied",
fan_mode_setting: "auto",
hvac_mode_setting: "heat_cool",
cooling_set_point_celsius: 25,
heating_set_point_celsius: 20
});
await seam.thermostats.createClimatePreset({
device_id: thermostat.device_id,
climate_preset_key: "unoccupied",
name: "Unoccupied",
fan_mode_setting: "auto",
hvac_mode_setting: "heat_cool",
cooling_set_point_celsius: 30,
heating_set_point_celsius: 15
});
};Response:
voidRequest:
# Get the thermostat.
thermostat = seam.devices.get(
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5"
)
# Confirm that the thermostat supports heat_cool mode
# so that the climate presets can use this mode.
if (thermostat.can_hvac_heat_cool)
# Create the climate presets.
seam.thermostats.create_climate_preset(
device_id: thermostat.device_id,
climate_preset_key: "occupied",
name: "Occupied",
fan_mode_setting: "auto",
hvac_mode_setting: "heat_cool",
cooling_set_point_celsius: 25,
heating_set_point_celsius: 20
)
seam.thermostats.create_climate_preset(
device_id: thermostat.device_id,
climate_preset_key: "unoccupied",
name: "Unoccupied",
fan_mode_setting: "auto",
hvac_mode_setting: "heat_cool",
cooling_set_point_celsius: 30,
heating_set_point_celsius: 15
)
endResponse:
nilRequest:
// Get the thermostat.
$thermostat = $seam->devices->get(
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5"
);
// Confirm that the thermostat supports heat_cool mode
// so that the climate presets can use this mode.
if ($thermostat->can_hvac_heat_cool) {
// Create the climate presets.
$seam->thermostats->create_climate_preset(
device_id: $thermostat->device_id,
climate_preset_key: "occupied",
name: "Occupied",
fan_mode_setting: "auto",
hvac_mode_setting: "heat_cool",
cooling_set_point_celsius: 25,
heating_set_point_celsius: 20
);
$seam->thermostats->create_climate_preset(
device_id: $thermostat->device_id,
climate_preset_key: "unoccupied",
name: "Unoccupied",
fan_mode_setting: "auto",
hvac_mode_setting: "heat_cool",
cooling_set_point_celsius: 30,
heating_set_point_celsius: 15
);
}Response:
voidRequest:
// Coming soon!Response:
// Coming soon!List All Climate Presets for a Thermostat
To list climate presets for a thermostat, issue a /devices/get request, providing the device_id of the desired thermostat. Then, inspect the available_climate_presets property.
Request:
seam.devices.get(
device_id = "2d488679-6f07-4810-aed2-e726872c1dd5"
)Response:
Device(
device_id='2d488679-6f07-4810-aed2-e726872c1dd5',
properties={
'available_climate_presets': [
{
'climate_preset_key': 'occupied',
'cooling_set_point_celsius': 25,
'cooling_set_point_fahrenheit': 77,
'display_name': 'Occupied',
'fan_mode_setting': 'auto',
'heating_set_point_celsius': 20,
'heating_set_point_fahrenheit': 68,
'hvac_mode_setting': 'heat_cool',
'name': 'Occupied',
...
},
{
'climate_preset_key': 'unoccupied',
'cooling_set_point_celsius': 30,
'cooling_set_point_fahrenheit': 86,
'display_name': 'Unoccupied',
'fan_mode_setting': 'auto',
'heating_set_point_celsius': 15,
'heating_set_point_fahrenheit': 59,
'hvac_mode_setting': 'heat_cool',
'name': 'Unoccupied',
...
}
],
...
},
...
)Request:
# Use GET or POST.
curl -X 'GET' \
'https://connect.getseam.com/devices/get' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"device_id": "2d488679-6f07-4810-aed2-e726872c1dd5"
}'Response:
{
"device": {
"device_id": "2d488679-6f07-4810-aed2-e726872c1dd5",
"properties": {
"available_climate_presets": [
{
"climate_preset_key": "occupied",
"name": "Occupied",
"display_name": "Occupied",
"fan_mode_setting": "auto",
"hvac_mode_setting": "heat_cool",
"cooling_set_point_celsius": 25,
"heating_set_point_celsius": 20,
"cooling_set_point_fahrenheit": 77,
"heating_set_point_fahrenheit": 68,
...
},
{
"climate_preset_key": "unoccupied",
"name": "Unoccupied",
"display_name": "Unoccupied",
"fan_mode_setting": "auto",
"hvac_mode_setting": "heat_cool",
"cooling_set_point_celsius": 30,
"heating_set_point_celsius": 15,
"cooling_set_point_fahrenheit": 86,
"heating_set_point_fahrenheit": 59,
...
}
],
...
},
...
},
"ok": true
}Request:
await seam.devices.get({
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5"
});Response:
{
device_id: '2d488679-6f07-4810-aed2-e726872c1dd5',
properties: {
available_climate_presets: [
{
climate_preset_key: 'occupied',
name: 'Occupied',
display_name: 'Occupied',
fan_mode_setting: 'auto',
hvac_mode_setting: 'heat_cool',
cooling_set_point_celsius: 25,
heating_set_point_celsius: 20,
cooling_set_point_fahrenheit: 77,
heating_set_point_fahrenheit: 68,
...
},
{
climate_preset_key: 'unoccupied',
name: 'Unoccupied',
display_name: 'Unoccupied',
fan_mode_setting: 'auto',
hvac_mode_setting: 'heat_cool',
cooling_set_point_celsius: 30,
heating_set_point_celsius: 15,
cooling_set_point_fahrenheit: 86,
heating_set_point_fahrenheit: 59,
...
}
],
...
},
...
}Request:
seam.devices.get(
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5"
)Response:
<Seam::Resources::Device:0x005f0
device_id="2d488679-6f07-4810-aed2-e726872c1dd5"
properties=#<Seam::DeepHashAccessor:0x000001bf948fdbd0 @data={
"available_climate_presets"=>[
{
"climate_preset_key"=>"occupied",
"name"=>"Occupied",
"display_name"=>"Occupied",
"fan_mode_setting"=>"auto",
"hvac_mode_setting"=>"heat_cool",
"cooling_set_point_celsius"=>25,
"heating_set_point_celsius"=>20,
"cooling_set_point_fahrenheit"=>77,
"heating_set_point_fahrenheit"=>68,
...
},
{
"climate_preset_key"=>"unoccupied",
"name"=>"Unoccupied",
"display_name"=>"Unoccupied",
"fan_mode_setting"=>"auto",
"hvac_mode_setting"=>"heat_cool",
"manual_override_allowed"=>true,
"cooling_set_point_celsius"=>30,
"heating_set_point_celsius"=>15,
"cooling_set_point_fahrenheit"=>86,
"heating_set_point_fahrenheit"=>59,
...
}
]
...
}
...
>Request:
$seam->devices->get(
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5"
);Response:
{
"device_id": "2d488679-6f07-4810-aed2-e726872c1dd5",
"properties": {
"available_climate_presets": [
{
"climate_preset_key": "occupied",
"cooling_set_point_celsius": 25,
"cooling_set_point_fahrenheit": 77,
"display_name": "Occupied",
"fan_mode_setting": "auto",
"heating_set_point_celsius": 20,
"heating_set_point_fahrenheit": 68,
"hvac_mode_setting": "heat_cool",
"name": "Occupied",
...
},
{
"climate_preset_key": "unoccupied",
"cooling_set_point_celsius": 30,
"cooling_set_point_fahrenheit": 86,
"display_name": "Unoccupied",
"fan_mode_setting": "auto",
"heating_set_point_celsius": 15,
"heating_set_point_fahrenheit": 59,
"hvac_mode_setting": "heat_cool",
"name": "Unoccupied",
...
}
],
...
},
...
}Request:
// Coming soon!Response:
// Coming soon!Update a Climate Preset
To update a climate preset, issue a /thermostats/update_climate_preset request, providing the device_id of the thermostat and the climate_preset_key of the desired climate preset. Also, include the desired updated settings for the climate preset.
Request:
seam.thermostats.update_climate_preset(
device_id = "2d488679-6f07-4810-aed2-e726872c1dd5",
climate_preset_key = "occupied",
cooling_set_point_celsius = 24
)Response:
NoneRequest:
curl -X 'POST' \
'https://connect.getseam.com/thermostats/update_climate_preset' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"device_id": "2d488679-6f07-4810-aed2-e726872c1dd5",
"climate_preset_key": "occupied",
"cooling_set_point_celsius": 24
}'Response:
{
"ok": true
}Request:
await seam.thermostats.updateClimatePreset({
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5",
climate_preset_key: "occupied",
cooling_set_point_celsius: 24
});Response:
voidRequest:
seam.thermostats.update_climate_preset(
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5",
climate_preset_key: "occupied",
cooling_set_point_celsius: 24
)Response:
nilRequest:
$seam->thermostats->update_climate_preset(
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5",
climate_preset_key: "occupied",
cooling_set_point_celsius: 24
);Response:
voidRequest:
// Coming soon!Response:
// Coming soon!Delete a Climate Preset
To delete a climate preset, issue a /thermostats/delete_climate_preset request, providing the device_id of the thermostat and the climate_preset_key of the desired climate preset.
Request:
seam.thermostats.delete_climate_preset(
device_id = "2d488679-6f07-4810-aed2-e726872c1dd5",
climate_preset_key = "occupied"
)Response:
NoneRequest:
curl -X 'POST' \
'https://connect.getseam.com/thermostats/delete_climate_preset' \
-H 'accept: application/json' \
-H "Authorization: Bearer ${SEAM_API_KEY}" \
-H 'Content-Type: application/json' \
-d '{
"device_id": "2d488679-6f07-4810-aed2-e726872c1dd5",
"climate_preset_key": "occupied"
}'Response:
{
"ok": true
}Request:
await seam.thermostats.deleteClimatePreset({
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5",
climate_preset_key: "occupied"
});Response:
voidRequest:
seam.thermostats.delete_climate_preset(
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5",
climate_preset_key: "occupied"
)Response:
nilRequest:
$seam->thermostats->delete_climate_preset(
device_id: "2d488679-6f07-4810-aed2-e726872c1dd5",
climate_preset_key: "occupied"
);Response:
voidRequest:
// Coming soon!Response:
// Coming soon!Last updated
Was this helpful?

