binaryDataCaptureUpload method

Future<String> binaryDataCaptureUpload(
  1. List<int> binaryData,
  2. String partId,
  3. String fileExtension, {
  4. String? componentType,
  5. String? componentName,
  6. String? methodName,
  7. Map<String, Any>? methodParameters,
  8. (DateTime, DateTime)? dataRequestTimes,
  9. Iterable<String> tags = const [],
})

Upload binary sensor data to Viam's Data Manager

Returns the data's file ID.

_viam = await Viam.withApiKey(
     dotenv.env['API_KEY_ID'] ?? '',
     dotenv.env['API_KEY'] ?? ''
 );
 final dataClient = _viam.dataClient;

 try {
   final imageBytes = getPNGasBytes(); // Replace with your image bytes getter

   (DateTime, DateTime) dataRequestTimes = (
     DateTime(2025, 1, 15, 10, 30), // Start time
     DateTime(2025, 1, 15, 14, 45)  // End time
   );

   final fileId = await dataClient.binaryDataCaptureUpload(
     imageBytes,
     "<YOUR-PART-ID>",
     ".png",
     componentType: "rdk:component:camera",
     componentName: "camera-1",
     methodName: "ReadImage",
     dataRequestTimes: dataRequestTimes);

   print('Successfully uploaded binary data with fileId: $fileId');
 } catch (e) {
   print('Error uploading binary data: $e');
 }

For more information, see Data Client API.

Implementation

Future<String> binaryDataCaptureUpload(List<int> binaryData, String partId, String fileExtension,
    {String? componentType,
    String? componentName,
    String? methodName,
    Map<String, Any>? methodParameters,
    (DateTime, DateTime)? dataRequestTimes,
    Iterable<String> tags = const []}) async {
  final sensorMetadata = SensorMetadata();
  if (dataRequestTimes != null) {
    sensorMetadata.timeRequested = Timestamp.fromDateTime(dataRequestTimes.$1);
    sensorMetadata.timeReceived = Timestamp.fromDateTime(dataRequestTimes.$2);
  }

  final metadata = UploadMetadata()
    ..partId = partId
    ..componentType = componentType ?? ''
    ..componentName = componentName ?? ''
    ..methodName = methodName ?? ''
    ..type = DataType.DATA_TYPE_BINARY_SENSOR
    ..tags.addAll(tags);
  if (methodParameters != null) metadata.methodParameters.addAll(methodParameters);
  if (fileExtension.isEmpty) {
    metadata.fileExtension = '';
  } else if (fileExtension[0] == '.') {
    metadata.fileExtension = fileExtension;
  } else {
    metadata.fileExtension = '.$fileExtension';
  }

  final sensorContents = SensorData()
    ..binary = binaryData
    ..metadata = sensorMetadata;
  final request = DataCaptureUploadRequest()
    ..metadata = metadata
    ..sensorContents.add(sensorContents);
  final response = await _dataSyncClient.dataCaptureUpload(request);
  return response.fileId;
}