Specimen Data Format

The Specimen Data Format developed for the Bosch Sensortec BME688 is used to store data for a specific specimen. BME AI-Studio can be used to import Raw Data Raw Data Format, which then can be sliced into one or multiple specimens. Specimen Data files can be exchanged between different BME AI-Studio projects. If curated correctly they should only contain gas data that belongs to one specific specimen or situation.

File Name

The filename consists of the following parts (each separated by a _):

  • <specimen_name>
  • <id>
  • .bmespecimen

Example: coffee_2.bmespecimen

partDescription
<specimen_name>individual name that can be defined within the BME AI-Studio (strings are converted to lowercase and spaces are replaced with dashes)
<id>project-specific id per specimen
.bmerawdataBME AI-Studio specific ending with JSON syntax

Structure

The file is structured into a metadata part (meta) and data part (data).

The meta part consists of:

  • appVersion states application version number of BME AI-Studio that created the board configuration
  • exportedAt states export date and time, according to ISO 8601 in Coordinated Universal Time (UTC)

The data part consists of:

  • specimenData
  • measurementSession
  • boardConfig
  • boardType
  • heaterProfiles
  • dutyCycleProfiles
  • sensorConfigs
  • sensors
  • cycles
  • dataColumns
  • specimenDataPoints

The following subsections give a description of each parameter used.

specimenData

ParameterDescription
idProject-specific Specimen id (automatically defined by BME AI-Studio)
uuidUniversally unique identifier (UUID) per Specimen
commentComment that further describes the Specimen
startTimeStart time of time interval that references to real_time_clock within specimenDataPoints
endTimeEnd time of time interval that references to real_time_clock within specimenDataPoints
cloneOfUuidUsed for BME AI-Studio internal data handling
measurementSessionIdReference to id of Measurement Session to which this Specimen belongs to
createdAtCreation date and time of Specimen, according to ISO 8601 in Coordinated Universal Time (UTC)
updatedAtUpdate date and time of Specimen, according to ISO 8601 in Coordinated Universal Time (UTC)
labelSpecimen Label (see Specimen Label)
metaDataList of Meta Data keys and values

measurementSession

ParameterDescription
idProject-specific Measurement Session id (automatically defined by BME AI-Studio)
uuidUniversally unique identifier (UUID) per Measurement Session
nameMeasurement Session label (see Session Name)
startTimeRecording start date and time of Measurement Session, according to ISO 8601 in Coordinated Universal Time (UTC)
endTimeRecording end date and time of Measurement Session, according to ISO 8601 in Coordinated Universal Time (UTC)
boardIdUnique board id for the BME688 Development Kit used for recording
createdAtCreation date and time of Measurement Session, according to ISO 8601 in Coordinated Universal Time (UTC)
updatedAtUpdate date and time of Measurement Session, according to ISO 8601 in Coordinated Universal Time (UTC)

boardConfig

ParameterDescription
idProject-specific Board Configuration id (automatically defined by BME AI-Studio)
boardModeIdentifier for Board Mode. burn_in refers to Sensorboard Default HP/RDC, heater_profile_exploration refers to Heater Profile Exploration, duty_cycle_profile_exploration refers to Duty Cycle Exploration. Other boardMode are also accepted, and can be used when data is recorded with specific settings.
measurementSessionIdReference to id of Measurement Session to which this Board Configuration belongs to
boardTypeIdReference to id of Board Type to which this Board Configuration belongs to
createdAtCreation date and time of Board Configuration, according to ISO 8601 in Coordinated Universal Time (UTC)
updatedAtUpdate date and time of Board Configuration, according to ISO 8601 in Coordinated Universal Time (UTC)

boardType

ParameterDescription
idProject-specific Board Type id (automatically defined by BME AI-Studio)
uidUnique identifier for the type of hardware used. board_8 refers to the BME688 Development Kit. See Board type. Other boardType are also accepted, and can be used when data is recorded with other hardware devices.
nameIndividual name of the hardware used (e.g. "BME688 Development Kit")
numSensorsNumber of (BME688) sensors on the hardware
createdAtCreation date and time of Board Type, according to ISO 8601 in Coordinated Universal Time (UTC)
updatedAtUpdate date and time of Board Type, according to ISO 8601 in Coordinated Universal Time (UTC)

heaterProfiles

Parameter specification per Heater Profile:

ParameterDescription
idProject-specific Heater Profile id (automatically defined by BME AI-Studio)
uidUnique identifier for the Heater Profile
nameIndividual name of the Heater Profile
useCaseAdditional information on specific use cases
timeBaseDefines the base unit of time used for temperatureTimeVectors (stated in milliseconds). In order to work properly it should be set to 140.
stepsTemperature-duration steps, where temperature is stated in degree Celsius and duration is stated as multiples of timeBase.
createdAtCreation date and time of Heater Profile, according to ISO 8601 in Coordinated Universal Time (UTC)
updatedAtUpdate date and time of Heater Profile, according to ISO 8601 in Coordinated Universal Time (UTC)

dutyCycleProfiles

Parameter specification per Duty Cycle Profile:

ParameterDescription
idProject-specific Duty Cycle id (automatically defined by BME AI-Studio)
uidUnique identifier for the Duty Cycle Profile
nameIndividual name of the Duty Cycle Profile
descriptionAdditional information
energyConsumptionStates the energy consumption of the Duty Cycle Profile in mA
scanningCyclesStates the number of Scanning Cycles
sleepingCyclesStates the number of Sleeping Cycles
createdAtCreation date and time of Duty Cycle Profile, according to ISO 8601 in Coordinated Universal Time (UTC)
updatedAtUpdate date and time of Duty Cycle Profile, according to ISO 8601 in Coordinated Universal Time (UTC)

sensorConfigs

The Sensor Configuration attaches a Board Configuration and individual Heater Profiles and Duty Cycle Profiles to a specific sensor.

Parameter specification per Sensor Configuration:

ParameterDescription
idProject-specific Sensor Configuration id (automatically defined by BME AI-Studio)
boardConfigIdReference to id of Board Configuration to which this Sensor Configuration belongs to
sensorIdReference to id of Sensors to which this Sensor Configuration belongs to
heaterProfileIdReference to id of Heater Profile to which this Sensor Configuration belongs to
dutyCycleProfileIdReference to id of Duty Cycle Profile to which this Sensor Configuration belongs to
createdAtCreation date and time of Sensor Configuration, according to ISO 8601 in Coordinated Universal Time (UTC)
updatedAtUpdate date and time of Sensor Configuration, according to ISO 8601 in Coordinated Universal Time (UTC)

sensors

The list of sensors connects their Id (used within BME AI-Studio) to their index (used in raw data logging).

Parameter specification per sensor:

ParameterDescription
idProject-specific sensor id (automatically defined by BME AI-Studio)
indexSensor index which is used within Raw Data Format
createdAtCreation date and time of sensor, according to ISO 8601 in Coordinated Universal Time (UTC)
updatedAtUpdate date and time of sensor, according to ISO 8601 in Coordinated Universal Time (UTC)

cycles

The list of curated Scanning Cycles.

Parameter specification per cycle:

ParameterDescription
idProject-specific cycle id (automatically defined by BME AI-Studio)
uuidUniversally unique identifier (UUID) per cycle that references to cycle_id within specimenDataPoints
startTimeStart time of cycle that references to real_time_clock within specimenDataPoints
endTimeEnd time of cycle that references to real_time_clock within specimenDataPoints
droppedDecision (encoded as boolean), whether cycle was selected as "dropped" within import process (see Cycles Dropped)
measurementSessionIdReference to id of Measurement Session to which this cycle belongs to
sensorIdReference to id of Sensors to which this cycle belongs to
createdAtCreation date and time of cycle, according to ISO 8601 in Coordinated Universal Time (UTC)
updatedAtUpdate date and time of cycle, according to ISO 8601 in Coordinated Universal Time (UTC)

dataColumns

Every block within dataColumns describes one of the 12 data columns within specimenDataPoints.

Here are some additional remarks concerning the column descriptions:

  • data_point_id is a unique id per data point, that can be used to trace back data to an individual sensor element
  • error_code states errors that happened during recording with the follwing encoding:
    1 for invalid Heater Profiles (affects all data points that follow)
    2for time stamp mismatch or data loss (affects only a single data point, dropping the whole cycle is recommended)
    3 for communication errors (affects only a single data point, dropping the whole cycle is recommended).
  • cycle_step_index is a counter for 10 heater steps that will be cycled continously (see Heater Profile ). Counting starts at 0 up to 9.

specimenDataPoints

The part carries the sensor data in a condensed form according to dataColumns.

Example

{
  "meta": {
    "appVersion": "2.2.0",
    "exportedAt": "2023-10-05T13:04:14.888Z"
  },
  "data": {
    "specimenData": {
      "id": 18,
      "uuid": "a4c9403f-7275-43b9-ad2e-59183a01324b",
      "comment": " ",
      "startTime": 220894,
      "endTime": 921935,
      "cloneOfUuid": null,
      "measurementSessionId": 3,
      "createdAt": "2023-09-08T11:46:12.000Z",
      "updatedAt": "2023-10-02T15:44:59.000Z",
      "label": "100g Water + 1g Desinfectant",
      "metaData": [
        {
          "key": "Caffeine [mg]",
          "value": null
        }
      ]
    },
    "measurementSession": {
      "id": 3,
      "uuid": "58660f88-e1ce-4c0d-8ee8-77c151ee37e5",
      "name": null,
      "startTime": "2023-07-28T07:57:36.000Z",
      "endTime": "2023-07-28T08:32:28.000Z",
      "boardId": "E0E2E69BA804",
      "createdAt": "2023-09-08T11:46:12.000Z",
      "updatedAt": "2023-09-08T11:46:12.000Z"
    },
    "boardConfig": {
      "id": 3,
      "boardMode": "heater_profile_exploration",
      "measurementSessionId": 3,
      "boardTypeId": 1,
      "createdAt": "2023-09-08T11:46:12.000Z",
      "updatedAt": "2023-09-08T11:46:12.000Z"
    },
    "boardType": {
      "id": 1,
      "uid": "board_8",
      "name": "BME688 Development Kit",
      "numSensors": 8,
      "createdAt": "2022-12-05T16:33:29.339Z",
      "updatedAt": "2022-12-05T16:33:29.339Z"
    },
    "heaterProfiles": [
      {
        "id": 1,
        "uid": "heater_301",
        "name": "HP-301",
        "useCase": "",
        "timeBase": 140,
        "steps": [
          {
            "temperature": 100,
            "duration": 2
          },
          {
            "temperature": 100,
            "duration": 41
          },
          {
            "temperature": 200,
            "duration": 2
          },
          {
            "temperature": 200,
            "duration": 14
          },
          {
            "temperature": 200,
            "duration": 14
          },
          {
            "temperature": 200,
            "duration": 14
          },
          {
            "temperature": 320,
            "duration": 2
          },
          {
            "temperature": 320,
            "duration": 14
          },
          {
            "temperature": 320,
            "duration": 14
          },
          {
            "temperature": 320,
            "duration": 14
          }
        ],
        "createdAt": "2022-12-05T16:33:29.332Z",
        "updatedAt": "2022-12-05T16:33:29.332Z"
      }
    ],
    "dutyCycleProfiles": [
      {
        "id": 3,
        "uid": "duty_1",
        "name": "RDC-1-0 Continuous",
        "description": "This is a continous duty cycle profile, which is best suited for maximum data acquisition, but with maximum power consumption. Please not that the sensor will significantly warm up in continous duty cycle profile.",
        "energyConsumption": 12,
        "scanningCycles": 1,
        "sleepingCycles": 0,
        "createdAt": "2022-12-05T16:33:29.337Z",
        "updatedAt": "2022-12-05T16:33:29.337Z"
      },
      {
        "id": 12,
        "uid": "duty_5_10",
        "name": "RDC-5-10",
        "description": "",
        "energyConsumption": 4,
        "scanningCycles": 5,
        "sleepingCycles": 10,
        "createdAt": "2021-05-19T12:29:24.267Z",
        "updatedAt": "2021-05-19T12:29:24.267Z"
      }
    ],
    "sensorConfigs": [
      {
        "id": 17,
        "boardConfigId": 3,
        "sensorId": 17,
        "heaterProfileId": 1,
        "dutyCycleProfileId": 3,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 18,
        "boardConfigId": 3,
        "sensorId": 18,
        "heaterProfileId": 1,
        "dutyCycleProfileId": 3,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 19,
        "boardConfigId": 3,
        "sensorId": 19,
        "heaterProfileId": 7,
        "dutyCycleProfileId": 3,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 20,
        "boardConfigId": 3,
        "sensorId": 20,
        "heaterProfileId": 7,
        "dutyCycleProfileId": 3,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 21,
        "boardConfigId": 3,
        "sensorId": 21,
        "heaterProfileId": 9,
        "dutyCycleProfileId": 3,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 22,
        "boardConfigId": 3,
        "sensorId": 22,
        "heaterProfileId": 9,
        "dutyCycleProfileId": 3,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 23,
        "boardConfigId": 3,
        "sensorId": 23,
        "heaterProfileId": 12,
        "dutyCycleProfileId": 3,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 24,
        "boardConfigId": 3,
        "sensorId": 24,
        "heaterProfileId": 12,
        "dutyCycleProfileId": 3,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      }
    ],
    "sensors": [
      {
        "id": 17,
        "index": 0,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 18,
        "index": 1,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 19,
        "index": 2,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 20,
        "index": 3,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 21,
        "index": 4,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 22,
        "index": 5,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 23,
        "index": 6,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 24,
        "index": 7,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      }
    ],
    "cycles": [
      {
        "id": 4352,
        "uuid": "a6153bb3-2217-4494-9dfd-2c4635c6ce43",
        "startTime": 221518,
        "endTime": 239542,
        "dropped": false,
        "measurementSessionId": 3,
        "sensorId": 17,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 4360,
        "uuid": "f9eeb8fc-f089-4a5b-80f4-7b9ac6591220",
        "startTime": 239998,
        "endTime": 258049,
        "dropped": false,
        "measurementSessionId": 3,
        "sensorId": 17,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 4370,
        "uuid": "4ddb91d7-67cc-43f6-9bcd-55f2733e9f9a",
        "startTime": 258482,
        "endTime": 276541,
        "dropped": false,
        "measurementSessionId": 3,
        "sensorId": 17,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      },
      {
        "id": 4377,
        "uuid": "d1122e71-97c1-4e52-ab49-a7a3e4bdb4db",
        "startTime": 276968,
        "endTime": 294970,
        "dropped": false,
        "measurementSessionId": 3,
        "sensorId": 17,
        "createdAt": "2023-09-08T11:46:12.000Z",
        "updatedAt": "2023-09-08T11:46:12.000Z"
      }
    ],
    "dataColumns": [
      {
        "name": "Data Point ID",
        "unit": "",
        "format": "integer",
        "key": "data_point_id"
      },
      {
        "name": "Resistance Gassensor",
        "unit": "Ohms",
        "format": "float",
        "key": "resistance_gassensor"
      },
      {
        "name": "Temperature",
        "unit": "DegreesCelsius",
        "format": "float",
        "key": "temperature"
      },
      {
        "name": "Pressure",
        "unit": "Hectopascals",
        "format": "float",
        "key": "pressure"
      },
      {
        "name": "Relative Humidity",
        "unit": "Percent",
        "format": "float",
        "key": "relative_humidity"
      },
      {
        "name": "Time Since PowerOn",
        "unit": "Milliseconds",
        "format": "integer",
        "key": "timestamp_since_poweron"
      },
      {
        "name": "Real time clock",
        "unit": "Unix Timestamp: seconds since Jan 01 1970. (UTC); 0 = missing",
        "format": "integer",
        "key": "real_time_clock"
      },
      {
        "name": "Error Code",
        "unit": "",
        "format": "integer",
        "key": "error_code"
      },
      {
        "name": "Cycle Step Index",
        "unit": "",
        "format": "integer",
        "key": "cycle_step_index"
      },
      {
        "name": "Cycle ID",
        "unit": "",
        "format": "integer",
        "key": "cycle_id"
      }
    ],
    "specimenDataPoints": [
      [
        43440,
        102400000,
        38.939491,
        979.661133,
        27.739399,
        221518,
        1690531277,
        0,
        0,
        4352
      ],
      [
        43441,
        102400000,
        38.043331,
        979.61792,
        28.48719,
        227161,
        1690531283,
        0,
        1,
        4352
      ],
      [
        43442,
        7994145,
        38.353733,
        979.60968,
        28.582357,
        227446,
        1690531283,
        0,
        2,
        4352
      ],
      [
        43443,
        6618461,
        39.024601,
        979.644348,
        28.885283,
        229422,
        1690531285,
        0,
        3,
        4352
      ],
      [
        43444,
        5645761.5,
        39.112213,
        979.663635,
        28.904493,
        231382,
        1690531287,
        0,
        4,
        4352
      ]
    ]
  }
}