The data management service captures data from one or more resources locally, and syncs it to cloud storage when a connection to the cloud is available.
You can configure which data you want to capture, as well as the capture rate and the sync frequency.
The data is captured locally on the machine’s storage and, by default, stored in the ~/.viam/capture directory.
If a machine restarts for any reason, capture automatically resumes and any data from already stored but not yet synced is synced.
The service can capture data from multiple resources at the same or different frequencies.
The service does not impose a lower or upper limit on the frequency of data collection.
However, in practice, your hardware may impose limits on the frequency of data collection.
Avoid configuring data capture to higher rates than your hardware can handle, as this could lead to performance degradation.
Data capture is frequently used with cloud sync.
However, if you want to manage your machine’s captured data yourself, you can enable only data capture without cloud sync.
The data is captured in the ESP32’s flash memory until it is uploaded to the Viam cloud.
If the machine restarts before all data is synced, all unsynced data captured since the last sync point is lost.
The service can capture data from multiple resources at the same or different frequencies.
The service does not impose a lower or upper limit on the frequency of data collection.
However, in practice, high frequency data collection (> 100Hz) requires special considerations on the ESP32.
Click for an example.
Consider a tomato picking robot with a 3D camera and an arm.
When you configure the robot, you might set the camera to capture point cloud data at a frequency of 30Hz.
For the arm, you might capture joint positions at 1Hz.
If your requirements change and you want to capture data from both components at 10Hz, you can change the capture rate at any time in each component’s data capture configuration.
Supported components and services
The following components and services support data capture, for the following methods:
The data management service uses gRPC calls to send and receive data, so your data is encrypted while in flight.
When data is stored in the cloud, it is encrypted at rest by the cloud storage provider.
Data Integrity
Viam’s data management service is designed to safeguard against data loss, data duplication and otherwise compromised data.
If the internet becomes unavailable or the machine needs to restart during the sync process, the sync is interrupted.
If the sync process is interrupted, the service will retry uploading the data at exponentially increasing intervals until the interval in between tries is at one hour, at which point the service retries the sync every hour.
When the connection is restored and sync resumes, the service continues sync where it left off without duplicating data.
If the interruption happens mid-file, sync resumes from the beginning of that file.
To avoid syncing files that are still being written to, the data management service only syncs files that haven’t been modified in the previous 10 seconds.
Storage
Data that is successfully synced to the cloud is automatically deleted from local storage.
When a machine loses its internet connection, it cannot resume cloud sync until it can reach the Viam cloud again.
To ensure that the machine can store all data captured while it has no connection, you need to provide enough local data storage.
Warning
If your machine’s disk fills up beyond a certain threshold, the data management service will delete captured data to free up additional space and maintain a working machine.
Automatic data deletion details
If cloud sync is enabled, the data management service deletes captured data once it has successfully synced to the cloud.
With viam-server, the data management service will also automatically delete local data in the event your machine’s local storage fills up.
Local data is automatically deleted when all of the following conditions are met:
Data capture is enabled on the data manager service
Local disk usage percentage is greater than or equal to 90%
The Viam capture directory is at least 50% of the current local disk usage
If local disk usage is greater than or equal to 90%, but the Viam capture directory is not at least 50% of that usage, a warning log message will be emitted instead and no action will be taken.
Automatic file deletion only applies to files in the specified Viam capture directory, which is set to ~/.viam/capture by default.
Data outside of this directory is not touched by automatic data deletion.
If your machine captures a large amount of data, or frequently goes offline for long periods of time while capturing data, consider moving the Viam capture directory to a larger, dedicated storage device on your machine if available.
You can change the capture directory using the capture_dir attribute.
You can also control how local data is deleted if your machine’s local storage becomes full, using the delete_every_nth_when_disk_full attribute.
Configure data capture and sync
Step 1: Configure the data management service
To capture data from one or more machines, you must first add the data management service:
Toggle data capture on or off for the entire machine part. Note that even if capture is on for the whole part, but is not on for any individual components (see Step 2), data is not being captured. Default: false
capture_dir
string
Optional
Path to the directory on your machine where you want to store captured data. If you change the directory for data capture, only new data is stored in the new directory. Existing data remains in the directory where it was stored. Default: ~/.viam/capture
tags
array of strings
Optional
Tags to apply to all images captured by this machine part. May include alphanumeric characters, underscores, and dashes.
sync_disabled
bool
Optional
Toggle cloud sync on or off for the entire machine part. Default: false
additional_sync_paths
string array
Optional
Paths to any other directories on your machine from which you want to sync data to the cloud. Once data is synced from a directory, it is automatically deleted from your machine.
sync_interval_mins
float
Optional
Time interval in minutes between syncing to the cloud. Viam does not impose a minimum or maximum on the frequency of data syncing. However, in practice, your hardware or network speed may impose limits on the frequency of data syncing. Default: 0.1, meaning once every 6 seconds.
delete_every_nth_when_disk_full
int
Optional
How many files to delete when local storage meets the fullness criteria. The data management service will delete every Nth file that has been captured upon reaching this threshold. Use JSON mode to configure this attribute. Default: 5, meaning that every fifth captured file will be deleted.
maximum_num_sync_threads
int
Optional
Max number of CPU threads to use for syncing data to the Viam cloud. Default: runtime.NumCPU/2 so half the number of logical CPUs available to viam-server
Info
With viam-micro-server, the capture_dir, tags, and additional_sync_paths, and delete_every_nth_when_disk_full attributes are ignored and should not be configured.
Name
Type
Required?
Description
capture_disabled
bool
Optional
Toggle data capture on or off for the entire machine part. Note that even if capture is on for the whole part, but is not on for any individual components (see Step 2), data is not being captured. Default: false
sync_disabled
bool
Optional
Toggle cloud sync on or off for the entire machine part. Default: false
sync_interval_minutes
float
Optional
Time interval in minutes between syncing to the cloud. Viam does not impose a minimum or maximum on the frequency of data syncing. However, in practice, your hardware or network speed may impose limits on the frequency of data syncing. Default: 0.1, meaning once every 6 seconds.
cache_size_kb
float
Optional
The maximum amount of storage bytes (in kilobytes) allocated to a data collector. Default: 1 KB.
Now the data management service is enabled.
However, no data is being captured until you configure capture on one or more resources.
Step 2: Configure data capture for your resources
You can capture data for any resource that supports it, including resources on remote parts.
For each resource you can capture data for, there is a Data capture section in its panel.
Select a Method and specify a capture Frequency in hertz.
You can add multiple methods with different capture frequencies.
Some methods will prompt you to add additional parameters.
The available methods, and corresponding additional parameters, will depend on the component or service type.
For example, a camera has the options ReadImage and NextPointCloud.
Keep in mind that some models do not support all options, for example webcams do not capture point clouds, and choose the method accordingly.
Caution
Avoid configuring data capture to higher rates than your hardware can handle, as this leads to performance degradation.
The following attributes are available for data capture configuration:
Name
Type
Required?
Description
capture_frequency_hz
float
Required
Frequency in hertz at which to capture data. For example, to capture a reading every 2 seconds, enter 0.5.
Viam supports data capture from resources on remote parts.
For example, if you use a part that does not have a Linux operating system or that does not have enough storage or processing power, you can still process and capture the data from that part’s resources by adding it as a remote part.
Currently, you can only configure data capture from remote resources in your JSON configuration.
To add them to your JSON configuration you must explicitly add the remote resource’s type, model, name, and additional_params to the data_manager service configuration in the remotes configuration:
Key
Description
type
The type tells your machine what the resource is. For example, a board.
model
The model is a colon-delimited-triplet that specifies the namespace, the type of the part, and the part itself.
name
The name specifies the fully qualified name of the part.
additional_params
The additional parameters specify the data sources when you are using a board.
Click to view example JSON configuration for an ESP32 board
The following example shows the configuration of the remote part, in this case an ESP32 board.
This config is just like that of a non-remote part; the remote connection is established by the main part (in the next expandable example).
To view captured data for a component or service, click on the menu in the top right of its card and select View captured data.
To view captured data for a machine part, click on the menu in the top right of its card or the menu in the machine resources list in the Builder menu and select View captured data.
To view captured data for a machine (including data from all parts of a multi-part machine), click on the data icon next to the Save button on the top right of the app.
Step 5: (Optional) Pause sync
You can pause cloud sync at any time by navigating to your machine’s CONFIGURE tab and disabling Syncing for your data management service.
If you have captured data that you do not want to sync, delete the data on the machine before resuming cloud sync.
To delete the data locally, ssh into your machine and delete the data in the directory where you capture data.
Sync data conditionally
You can use a module to sync data only when a certain logic condition is met, instead of at a regular time interval.
For example, if you rely on mobile data but have intermittent WiFi connection in certain locations or at certain times of the day, you may want to trigger sync to only occur when these conditions are met.
To set up triggers for syncing see:
Safely shut down the resource and prevent further use.
The data client API supports a separate set of methods that allow you to upload and export data to and from the Viam app.
For information about that API, see Data Client API.
Troubleshooting
Images are dim on start up
If you are capturing camera data, it can happen that the camera captures and syncs miscolored or dark images upon start up.
Wait for a few seconds and you should see correctly colored images.