Live demo — data resets daily at 03:00 UTC. Nothing you enter is saved. Server UI →

product: maestro audience: test-developer authority: normative

Measurement Patterns

Numeric measurement (default type)

Pass condition: value >= low_limit && value <= high_limit.

measurement:
  name: "VOUT_5V"              # REQUIRED — stored in every record
  target: 5.05                 # mock: used as measured value
  value: "{{measured_v}}"      # gRPC runners: template resolves to actual
  low_limit: 4.75              # lower bound (inclusive)
  high_limit: 5.25             # upper bound (inclusive)
  unit: "V"

Numeric comparison operators

operator Aliases Evaluation
(omitted) value >= low_limit && value <= high_limit
equal eq value == target
notequal ne value != target
greaterthan gt value > low_limit
greaterthanorequal gte, ge value >= low_limit
lessthan lt value < high_limit
lessthanorequal lte, le value <= high_limit
log Always PASS; informational only

These operators apply to type: numeric only. For type: boolean and type: string the only evaluation mechanism IS the expected: field — however, operator: log IS supported on any type (numeric, boolean, string) to make the measurement informational-only.

Boolean measurement

Pass condition: value == expected.

Operators are NOT supported for type: boolean. Omitting expected: causes the measurement to always PASS (informational-only).

measurement:
  name: "RELAY_SELFTEST"
  type: boolean
  value: "true"
  expected: "true"

String measurement

Pass condition: value == expected (exact, case-sensitive).

Operators are NOT supported for type: string. Omitting expected: causes the measurement to always PASS.

measurement:
  name: "FW_VERSION"
  type: string
  value: "v2.1.0"
  expected: "v2.1.0"

Informational-only measurement (log operator)

operator: log applies to all measurement types. The measurement always evaluates to PASS — the value IS recorded without any limit or expected-value check.

# Numeric — record a current draw without limits
measurement:
  name: "SUPPLY_CURRENT_LOG"
  target: 0.245
  unit: "A"
  operator: log

# String — record a MAC address
measurement:
  name: "MAC_ADDRESS"
  type: string
  operator: log
  value: "{{mac_address}}"

# Boolean — record a pin state
measurement:
  name: "BOOT_FLAG"
  type: boolean
  operator: log
  value: "{{boot_flag}}"

Multiple measurements from one step

Use measurements: (plural) when a single function returns several values:

- name: "Read all power rails"
  runner: python
  runner_type: python3.11
  module: "instruments"
  function: "read_power_rails"
  outputs:
    rail_3v3: "{{v3v3}}"
    rail_5v0: "{{v5v0}}"
  measurements:
    - name: "RAIL_3V3"
      value: "{{v3v3}}"
      low_limit: 3.135
      high_limit: 3.465
      unit: "V"
    - name: "RAIL_5V0"
      value: "{{v5v0}}"
      low_limit: 4.75
      high_limit: 5.25
      unit: "V"

measurements: takes precedence over measurement: when both are present.

An unhandled error has occurred. Reload 🗙

Rejoining the server...

Rejoin failed... trying again in seconds.

Failed to rejoin.
Please retry or reload the page.

The session has been paused by the server.

Failed to resume the session.
Please retry or reload the page.