The SensorCollector module is responsible for collecting telemetry data from various hardware sensors on the platform, storing the sensor values, and exposing them via the Redfish API.
When enabled, this module manages the following Redfish resources:
/redfish/v1/Chassis/<ChassisId>/Sensors and individual sensors under itThe sensor collector module is configured globally in central_config.proto under the SensorCollectorModule message:
| Field Name | Type | Default Value | Description |
|---|---|---|---|
enabled | bool | false | Enables the sensor collector module. |
allow_sensor_creation_failure | bool | false | If true, sensor creation failures will not prevent tlBMC startup (useful for debugging). |
thermal_control_sub_module | ThermalControlSubmodule | N/A | Configuration for the thermal control submodule (Borg, Fan mode, etc.). |
enable_threshold_monitoring | bool | false | Periodically monitors sensor thresholds and publishes SEL events when crossed. |
sensor_collection_append_sub_module | SensorCollectionAppendSubmodule | N/A | Appends tlBMC sensors to the collection owned by gBMCWeb. |
own_sensor_collection_in_redfish | bool | false | If true, tlBMC will own the sensor collection in Redfish. |
drop_failed_duplicate_sensors | bool | false | If true, a sensor that failed creation is dropped at startup when a successfully created sensor with the same key exists. |
| Field Name | Type | Default Value | Description |
|---|---|---|---|
enabled | bool | false | Enables tlBMC to |
| : : : : own : | |||
| : : : : ThermalSubsystem, : | |||
| : : : : Fans, : | |||
| : : : : PowerSubsystem, : | |||
| : : : : and Managers. : |
| Field Name | Type | Default Value | Description |
|---|---|---|---|
enabled | bool | false | Appends tlBMC sensors to |
| : : : : the collection owned by : | |||
| : : : : gBMCWeb. : | |||
per_sensor_append_mode | bool | false | Appends individual |
| : : : : sensors based on Entity : | |||
| : : : : Manager configuration : | |||
| : : : : rather than the entire : | |||
| : : : : collection. : |
tlBMC relies on Entity Manager (EM) configuration JSON files to discover and initialize sensors. To make tlBMC monitor a sensor, the configuration block must contain "TlbmcOwned": true.
All sensors support these common parameters within their JSON exposing block:
| Parameter Name | Type / Values | Description |
|---|---|---|
Name | string | The user-visible name of the |
| : : : sensor. : | ||
Type | string | The hardware driver/sensor |
| : : : type. See supported types : | ||
| : : : below. : | ||
Bus | integer or string | The I2C logical bus (e.g. 2, |
| : : : or dynamic expressions like : | ||
: : : "$bus"). : | ||
Address | string | The I2C device address in hex |
: : : format (e.g. "0x4c"). : | ||
TlbmcOwned | boolean | Must be true for tlBMC to |
| : : : instantiate this sensor : | ||
| : : : config. : | ||
PowerState | string | Dependency on host power state |
: : : (e.g. "Always", "On", : | ||
: : : "BiosPost"). : | ||
HostId | string | Required when PowerState is |
: : : "On" or "BiosPost" (e.g. : | ||
: : : "Host1", or expressions like : | ||
: : : "Host$BUS / 29 + 1"). : | ||
RefreshIntervalMs | integer | Polling frequency for the |
| : : : sensor in milliseconds. : | ||
Thresholds | array | A list of warning or critical |
| : : : threshold objects. : | ||
MinReading / | number | Overrides for default sensor |
: MaxReading : : reading limits. : |
The following hardware chip drivers and sensor types are supported out-of-the-box:
MAX31725TMP75MAX31732SA56004TMP461TMP431TMP421ADM1266ADM1272ADM1273PMBusLTC2991RAA228228TDA38725TDA38740XDPE1A2G5BLTC4287Q50SN12072Q54SN120A4TPS25990RAA229639LX6301SBTSI_I3CTPS546E25BMR490GOOGLE_TPUXDPE19284CMAX20826MAX20830CMAX20840CRAA229141MAX34451SBRMI_I3CMP2925MP2929MP5998INA226RAA229621ADS1015MAX11611TLA2024I2CFan (Both Tachometer and PWM controllers)XeonCPU (Intel CPU telemetry over PECI/I2C)GpioSensorVirtualSensor (Math expression combination of other sensors)Below is the list of underlying protobuf schemas representing the parsed configs:
hwmon_temp_sensor_config.proto: Defines config parameters for temperature monitoring.
psu_sensor_config.proto: Defines power supply sensors configuration.
adc_sensor_config.proto: Defines channel mapping and scaling for analog-to-digital converters.
fan_pwm_config.proto: Defines fan pulse-width modulation config.
fan_tach_config.proto: Defines fan tachometer RPM config.
intel_cpu_sensor_config.proto: Defines CPU thermal registers and DTS offsets.
gpio_sensor_config.proto: Defines input GPIO level sensors.
virtual_sensor_config.proto: Defines sensors calculated via mathematical expressions.
sensor_instance_properties.proto: Common physical properties for a sensor instance.
entity_common_config.proto: Base entity configs like refresh intervals and power state requirements.
hal_common_config.proto: Generic I2C logical bus and address representation.
threshold_config.proto: Custom sensor limit warning/critical thresholds.
| Field Name | Type | Description |
|---|---|---|
bus | uint64 | The I2C logical bus number. |
address | uint64 | The I2C device target address. |
| Field Name | Type | Description |
|---|---|---|
board_config_key | string | The config key of the parent board. |
refresh_interval | google.protobuf.Duration | The polling rate interval. |
queue_size | uint64 | The numeric buffer queue size (default 10). |
config_detected | bool | Tracks whether the sensor was matched during scans. |
sensor_group | string | The parent bus/group string. |
config_name | string | The raw configuration item name. |
power_state | SensorPowerRequirement | Dependency on the host run state (e.g. SENSOR_POWER_REQUIREMENT_ALWAYS, SENSOR_POWER_REQUIREMENT_CHASSIS_ON, SENSOR_POWER_REQUIREMENT_BIOS_POST). |
| Field Name | Type | Description |
|---|---|---|
name | string | The instance name (unique per sensor). |
unit | SensorUnit | Measurement units (e.g. UNIT_DEGREE_CELSIUS, UNIT_VOLT, UNIT_REVOLUTION_PER_MINUTE). |
thresholds | ThresholdConfigs | Limits triggering warning or critical status. |
reading_ranges | ReadingRangeConfigs | Normal operational bounds (Min/Max values). |
redfish_hidden | bool | Excludes this specific instance from the Redfish tree. |
append_to_sensor_collection | bool | Instructs gBMCWeb to append this sensor explicitly. |
general_config { sensor_collector_module { enabled: true enable_threshold_monitoring: true } }
{ "Address": "0x4C", "Bus": "$BUS / 29 * 100 + 101", "Name": "HPM$BUS / 29 D0_AMBIENT_00_T", "Name1": "HPM$BUS / 29 D0_THERMAL_00_T", "PowerState": "On", "HostId": "Host$BUS / 29 + 1", "Thresholds": [ { "Direction": "greater than", "Hysteresis": 1.5, "Index": 2, "Name": "upper critical", "Severity": 1, "Value": 95 }, { "Direction": "less than", "Hysteresis": 1.5, "Index": 2, "Name": "lower critical", "Severity": 1, "Value": 0 } ], "TlbmcOwned": true, "Type": "TMP431" }
{ "Address": "0x40", "Bus": "$BUS / 29 * 100 + 131", "Labels": [ "vout1", "vout2" ], "Name": "HPM$BUS / 29 ADM1266_U213", "PowerState": "On", "HostId": "Host$BUS / 29 + 1", "Thresholds": [ { "Direction": "greater than", "Label": "vout1", "Name": "upper critical", "Severity": 1, "Value": 13.56 }, { "Direction": "less than", "Label": "vout2", "Name": "lower critical", "Severity": 1, "Value": 2.805 } ], "TlbmcOwned": true, "Type": "ADM1266", "vout1_Max": 13.56, "vout1_Name": "HPM$BUS / 29 U213_P12V_V", "vout2_Min": 0.4, "vout2_Name": "HPM$BUS / 29 U213_P3V3_STBY_V" }
{ "Name": "Thidwick vmon", "Bus": "$bus", "Address": "0x48", "Type": "ADS1015", "Labels": [ "in_voltage0_raw", "in_voltage1_raw" ], "TlbmcOwned": true, "AppendToSensorCollection": true, "Channels": [ { "SensorName": "PE$bus - 4 MS1_Analog_PG_vout", "FileName": "in_voltage0_raw", "Units": "Volts", "Scale": 1000 }, { "SensorName": "PE$bus - 4 MS0_Analog_PG_vout", "FileName": "in_voltage1_raw", "Units": "Volts", "Scale": 1000 } ], "IntervalMs": 1000 }
{ "Name": "cpu_sensor", "Type": "XeonCPU", "Bus": 1, "Address": "0x30", "CpuID": 0, "SensorGroup": "group1", "Labels": ["Die", "DIMM A1"], "Die_Name": "die", "DtsCritOffset": 1000, "DIMM_A1_Name": "DIMM1", "RelatedItem": [ { "SensorName": "DIMM1", "Type": "RESOURCE_TYPE_DIMM", "ResourceId": "dimm1" } ], "TlbmcOwned": true }
{ "Name": "gpio_sensor", "Type": "GpioSensor", "GpioPinName": "gpio_pin", "TlbmcOwned": true, "Units": "Volts", "RefreshIntervalMs": 1000 }
{ "Name": "virtual_sensor", "Type": "VirtualSensor", "Expression": "voltage_BMC_P3V3_STBY + voltage_BMC_P1V8", "Units": "Volts", "RedfishHidden": [ "virtual_sensor" ], "TlbmcOwned": true }
SensorCollector: The orchestrator class implementing the module's thread loop. It retrieves physical readings via the platform HAL, updates the sensor store, handles limits, and coordinates Redfish route registries.sensor_collector.h
entity_config_json_impl.cc