A tool that enables a user to view the status of a system in regard to fan control including the ability to manually set the fans to a desired RPM (or PWM if supported by the system). This tool has been tested against systems utilizing the phosphor-fan-presence repository set of fan applications (i.e. romulus, witherspoon, etc...) and is not warranted to work on systems using some other set of BMC fan applications.
The intention of this tool is to temporarily stop the automatic fan control algorithm and allow the user to manually set the fans within the system chassis to a given target. Once a user no longer has a need to manually control the fans, the resume operation re-enables and restarts the phosphor-fan-control service. The status command provides a simple way to get the status of the fans along with the the main system states and fan control systemd service, while the reload command is available to commit JSON changes made to config files (YAML-based configurations are not reloadable).
Note: In the case where a system does not have an active fan control algorithm enabled yet, an intended safe fan target should be set prior to resuming.
NAME
  fanctl - Manually control, get fan tachs, view status, reload config,
  and resume automatic control of all fans within a chassis.
SYNOPSIS
  fanctl [OPTION]
OPTIONS
set <TARGET> [TARGET SENSOR LIST]
    <TARGET>
        - RPM/PWM target to set the fans
    [TARGET SENSOR LIST]
        - space-delimited list of target sensors to set
get
    - Get the current fan target and feedback speeds for all rotors
status
    - Get the full system status in regard to fans
reload
    - Reload phosphor-fan configuration JSON files (YAML configuration not
      supported)
resume
    - Resume automatic fan control
    * Note: In the case where a system does not have an active fan control
      algorithm enabled yet, an intended safe fan target should be set
      prior to resuming
dump
    - Tell fan control to dump its caches and flight recorder.
query_dump
    - Provides arguments to search the dump file.
help
    - Display this help and exit
Set all fans to a target value (The tool determines whether the machine is using RPM or PWM fan speeds, and sets them to the value provided):
fanctl set 10500
Set only fan_0, fan1_0, fan2_0 to target 8500:
fanctl set 8500 fan0_0 fan1_0 fan2_0
Resume automatic fan control:
fanctl resume
Get the current fan target and feedback speeds for all rotors:
fanctl get
> fanctl get
TARGET SENSOR    TARGET(RPM)   FEEDBACK SENSOR    FEEDBACK(RPM)
===============================================================
fan0_0             10000            fan0_0            7020
                                    fan0_1           10000
fan1_0              2300            fan1_0            2192
                                    fan1_1            2300
fan2_0              2300            fan2_0            2192
                                    fan2_1            2300
fan3_0              3333            fan3_0            2839
                                    fan3_1            3333
fan4_0              3333            fan4_0            2839
                                    fan4_1            3333
fan5_0             10000            fan5_0            7020
                                    fan5_1           10000
Get the full system status in regard to fans:
fanctl status
Fan Control Service State : loaded, inactive(dead) CurrentBMCState : xyz.openbmc_project.State.BMC.BMCState.Ready CurrentPowerState : xyz.openbmc_project.State.Chassis.PowerState.Off CurrentHostState : xyz.openbmc_project.State.Host.HostState.Off FAN TARGET(RPM) FEEDBACK(RPM) PRESENT FUNCTIONAL =============================================================== fan0 10000 7020/10000 true true fan1 10000 7020/10000 true true fan2 10000 7020/10000 true true fan3 10000 7020/10000 true true fan4 10000 7020/10000 true true fan5 10000 7020/10000 true true
Reload all json config files in the order each is found: override location, given Compatible interface location, default location.
fanctl reload
Tell the fan control daemon to dump debug data to /tmp/fan_control_dump.json
fanctl dump
Print all temperatures in the fan control cache after running 'fanctl dump':
fanctl query_dump -s objects -n sensors/temperature -p Value
Print every interface and property in the Ambient temp sensor's cache entry:
fanctl query_dump -s objects -n Ambient
Print the flight recorder after running 'fanctl dump':
fanctl query_dump -s flight_recorder