Redfish Thermal Subsystem Module

The Thermal Subsystem module in tlBMC manages Redfish routes related to thermal monitoring and cooling resources. This includes retrieving details of the Thermal Subsystem itself and managing the collections of Fans.

These routes are implemented in the C++ files thermal_subsystem.cc and fan.cc.

Overview of Redfish Routes

The Thermal Subsystem routes are registered if the configuration flag sensor_collector_module.thermal_control_sub_module.enabled is set to true in the Central Configuration.

Thermal Subsystem Resource

  • URL: /redfish/v1/Chassis/{ChassisId}/ThermalSubsystem
  • Method: GET
  • Description: Provides information about the Thermal Subsystem for the given {ChassisId}.
  • Behavior:
    • Verifies the existence of the Chassis by checking for a valid FRU key in the Store.
    • The response includes:
      • @odata.id and @odata.type (#ThermalSubsystem.v1_0_0.ThermalSubsystem)
      • Name and Id (both set to “Thermal Subsystem”)
      • A link to the Fan Collection: /redfish/v1/Chassis/{ChassisId}/ThermalSubsystem/Fans
      • Basic Status (Health: OK, State: Enabled)

Fan Collection Resource

  • URL: /redfish/v1/Chassis/{ChassisId}/ThermalSubsystem/Fans
  • Method: GET
  • Description: Lists all Fan resources under the specified Chassis.
  • Behavior: Retrieves all child fans for the given {ChassisId} from the topology and returns a collection of links.

Fan Resource

  • URL: /redfish/v1/Chassis/{ChassisId}/ThermalSubsystem/Fans/{FanId}
  • Method: GET
  • Description: Provides detailed status and telemetry for a specific Fan.
  • Behavior:
    • Returns static properties like Model and HotPluggable from the Store topology.
    • Returns location information (Location/PartLocation/LocationType).
    • Returns telemetry under SpeedPercent:
      • DataSourceUri: Links to the sensor resource (e.g. /redfish/v1/Chassis/{ChassisId}/Sensors/fanpwm_{pwm_sensor_name}).
      • Reading: Current fan speed percentage (PWM).
      • SpeedRPM: Current fan speed in RPM (Tachometer).

Central Configuration (central_config.proto)

The following central configurations in the SensorCollectorModule affect this module:

Field NameTypeDefaultDescription
sensor_collector_module.thermal_control_sub_module.enabledboolfalseGates the registration of all Thermal Subsystem and Fan routes. If enabled, the legacy Thermal link under Chassis is omitted and replaced by ThermalSubsystem.

Redfish Output Example

The following JSON snippet demonstrates a sample Redfish representation of a ThermalSubsystem resource (with specific platform identifiers redacted) as exposed over HTTP GET requests:

{
  "@odata.id": "/redfish/v1/Chassis/Chassis_0/ThermalSubsystem",
  "@odata.type": "#ThermalSubsystem.v1_0_0.ThermalSubsystem",
  "Fans": {
    "@odata.id": "/redfish/v1/Chassis/Chassis_0/ThermalSubsystem/Fans"
  },
  "Id": "ThermalSubsystem",
  "Name": "Thermal Subsystem",
  "Status": {
    "Health": "OK",
    "State": "Enabled"
  }
}

And the corresponding Fan Collection resource representation (/redfish/v1/Chassis/Chassis_0/ThermalSubsystem/Fans):

{
  "@odata.id": "/redfish/v1/Chassis/Chassis_0/ThermalSubsystem/Fans",
  "@odata.type": "#FanCollection.FanCollection",
  "Description": "The collection of Fan resource instances",
  "Members": [
    {
      "@odata.id": "/redfish/v1/Chassis/Chassis_0/ThermalSubsystem/Fans/fan0"
    },
    {
      "@odata.id": "/redfish/v1/Chassis/Chassis_0/ThermalSubsystem/Fans/fan1"
    }
  ],
  "Members@odata.count": 2,
  "Name": "Fan Collection"
}

A detailed representation of a specific Fan resource instance (/redfish/v1/Chassis/Chassis_0/ThermalSubsystem/Fans/fan0):

{
  "@odata.id": "/redfish/v1/Chassis/Chassis_0/ThermalSubsystem/Fans/fan0",
  "@odata.type": "#Fan.v1_3_0.Fan",
  "HotPluggable": true,
  "Id": "fan0",
  "Location": {
    "PartLocation": {
      "LocationType": "Connector",
      "ServiceLabel": "FAN0"
    }
  },
  "Model": "model",
  "Name": "fan0",
  "SpeedPercent": {
    "DataSourceUri": "/redfish/v1/Chassis/Chassis_0/Sensors/fanpwm_fan0_pwm",
    "Reading": 50.5,
    "SpeedRPM": 5000
  },
  "Status": {
    "Health": "OK",
    "State": "Enabled"
  }
}

Protobuf Configuration

The following protobuf schemas define the internal representations of Fan properties and topology:

  • central_config.proto: Defines the ThermalControlSubmodule registration flag.

  • fru.proto: Defines the FanInfo message containing static properties.

  • topology_config.proto: Details the parent-child relationships between Chassis and Fans.


Code References

  • redfish/routes/thermal_subsystem.cc

  • redfish/routes/fan.cc

  • redfish/routes/all_routes.cc

  • configs/entity_config_json_impl.cc