Skip to content

Question / request: fan profile and RGB format documentation for Python use #5

@kahache7

Description

@kahache7

Summary

I am using BENCHLAB for automated benchmark experiments and I would like to control fan behavior from Python before running batches of tests.

I would like to understand how to read, interpret, and eventually write fan profiles from Python.

The current benchlab-pytools repository already exposes telemetry well. I also noticed that the command enum includes profile/control-related commands such as:

  • UART_CMD_READ_FAN_PROFILE
  • UART_CMD_WRITE_FAN_PROFILE
  • UART_CMD_READ_RGB
  • UART_CMD_WRITE_RGB
  • possibly calibration-related commands

However, I could not find documentation or Python examples showing the expected structure / payload format for fan profiles (or RGB configuration).

Use case

My goal is to run repeatable benchmark batches from Python.

For example:

  1. Set or verify a known fan profile before an experiment.
  2. Run the workload / benchmark.
  3. Read BENCHLAB telemetry from Python.
  4. Export telemetry to influxDB via MQTT.
  5. Change fan settings and run next batch, or optionally restore the previous fan configuration.

For this workflow, it would be very useful to know the official profile format rather than relying only on the Windows UI.

What I tested

Hardware/firmware/software:

  • BENCHLAB hardware (-03)
  • Firmware V2
  • Official Windows BENCHLAB software
  • One fan connected for testing

In the Windows software, I observed:

  • Profile 1 / Temperature mode works as expected.
  • Temperature mode appears to use:
    • SRC
    • Temp Low
    • Temp High
    • Duty Low
    • Duty High
  • Fan duty changes according to the selected temperature source and range.
  • Fan RPM appears to be reported per fan header.
  • Fan duty appears to move globally for all fan headers, rather than independently per fan.

However, I may be missing something:

  • Selecting Profile 2 / 50% changes the mode to Fixed, but I do not see the actual fan duty change to 50%.
  • Selecting Profile 3 / 100% also changes the mode to Fixed, but I do not see the actual fan duty change to 100%.
  • Changing Fixed mode values manually does not seem to affect the actual fan duty in my tests.

So I am not sure whether fixed profiles are currently implemented, or whether fan control is currently intended to be temperature-based/global.

Questions

Could you clarify the intended behavior?

  1. Is fan control global for all fan headers, or should each fan header support independent PWM control?
  2. Are Profile 1 / Profile 2 / Profile 3 built-in presets, user-editable profiles, or placeholders?
  3. Should Profile 2 force 50% duty and Profile 3 force 100% duty?
  4. Are fan profiles stored persistently on the BENCHLAB device?
  5. What is the structure / binary layout returned by READ_FAN_PROFILE?
  6. What payload format is expected by WRITE_FAN_PROFILE?
  7. Is RGB/LED control intended to be exposed from Python?
  8. What is the structure / binary layout for READ_RGB and WRITE_RGB?
  9. Are calibration commands intended to be user-accessible from Python, or should they be considered internal/service-only?

Documentation / examples that would be useful

It would be helpful to have one or more small official Python examples or documentation snippets covering:

  • Reading the current fan profile.
  • Interpreting the fan profile fields / structure.
  • Writing or applying a fan profile.
  • Whether profile writes are temporary or persistent.
  • Reading the current RGB/LED configuration, if supported.
  • Writing RGB/LED configuration, if supported.
  • Clarifying whether calibration commands are intended for external use.

I noticed the dev-pycore branch appears to move low-level serial/device access toward benchlab-pycore.

If fan profile and RGB control are planned to live in benchlab-pycore rather than benchlab-pytools, it would still be useful to have the relevant examples or documentation referenced from this repository.

Goal

I am happy to test examples on real hardware. My main goal is to understand the intended fan control interface well enough to integrate BENCHLAB into automated Python-based benchmark experiments.

Thanks in advance

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions