|  | # Sensor Config | 
|  |  | 
|  | This program is only meant to control fans given thermal sensor readings. | 
|  |  | 
|  | All sensors in phosphor-dbus-interfaces for OpenBMC use Sensor.Value as their | 
|  | accessor.  This provides read-only access to information.  The goal of the | 
|  | configuration is to specify how it can be read and if it's a fan, how the PID | 
|  | output can be written.  Initially there'll only be sysfs and passive dbus | 
|  | access.  If a writePath for a sensor is a dbus path, then the system will need | 
|  | to verify which Control.Fan* interfaces is registered and send values to the | 
|  | Target property of that interface. | 
|  |  | 
|  | The min/max specified are to range a writePercent to the sensor.  The current | 
|  | FanController object outputs the new fan speed goal as a PWM percentage.  Other | 
|  | fan PID control objects may not, and they can leave the fields as 0 & 0. | 
|  |  | 
|  | The only requirement for a sensor is that it isn't writeonly.  Only fans are | 
|  | expected to have a writePath set, and in this current version non-fan sensors | 
|  | are assumed readonly. | 
|  |  | 
|  | The sensor names are unique across all zones. | 
|  |  | 
|  | "sensors" : [ | 
|  | { | 
|  | "name": "fan1",  /* Name of the sensor. */ | 
|  | "type": "fan",   /* Type of sensor, fan, temp, margin */ | 
|  | "readPath": "",  /* How the sensor can be read[1] */ | 
|  | "writePath": "", /* How the sensor can be set[2] */ | 
|  | "min": 0,        /* The minimum value used for scaling writes (int64) */ | 
|  | "max": 255,      /* The maximum value used for scaling writes (int64) */ | 
|  | "timeout": 0     /* The timeout value for the sensor, used for failsafe, 0 | 
|  | * means no timeout (int64) */ | 
|  | }, | 
|  | ] | 
|  |  | 
|  | [1] readPath has multiple options: | 
|  | * If it has "/xyz/openbmc_project/extsensors/" in it, it's an EXTERNAL or | 
|  | host-provided sensor. | 
|  | * If it has "/xyz/openbmc_project/" in it, it's a sensor whose value is | 
|  | received passively over dbus. | 
|  | * If it has "/sys/" in it, it's a sensor read directly from sysfs. | 
|  |  | 
|  | [2] | 
|  | * This can be left blank if the sensor is read-only. | 
|  | * If it has "/sys/" in it, it's a sensor written to sysfs. | 
|  | * If min and max are non-zero, it'll convert the value to within the range. | 
|  | and output that modified value.  So, if it receives a value of .90 and min | 
|  | is 0, and max is 255, it'll convert that to a value of 229.5 that is then | 
|  | cast to int64_t. | 
|  |  | 
|  | # PID Config | 
|  |  | 
|  | The PID configuration is a list of PIDs per zone. | 
|  |  | 
|  | "zones" : [ | 
|  | { | 
|  | "id": 1, /* zone id. */ | 
|  | "minThermalOutput": 3000.0, /* The minimum thermal RPM value. (double) */ | 
|  | "failsafePercent": 75.0, /* The percent to use when the zone is in fail-safe mode. (double) */ | 
|  | "pids": [ | 
|  | { | 
|  | "name": "fan1-5",           /* PID name */ | 
|  | "type": "fan",              /* Type of PID, fan, temp, or margin. */ | 
|  | "inputs": ["fan1", "fan5"], /* Sensor names that are inputs for the PID */ | 
|  | "setpoint": 90.0,           /* For temp/margin PIDs this is the setpoint, ignored otherwise (double) */ | 
|  | "pid": { | 
|  | "samplePeriod": 0.1,          /* The input sample period. (double) */ | 
|  | "proportionalCoeff": 0.0,     /* The proportional coefficient. (double) */ | 
|  | "integralCoeff": 0.0,         /* The integral coefficient. (double) */ | 
|  | "feedFwdOffsetCoeff": 0.0, /* The feed-forward offset coefficient. (double) */ | 
|  | "feedFwdGainCoeff": 0.010,    /* The feed-forward gain coefficient. (double) */ | 
|  | "integralLimit_min": 0.0,     /* The integral limit clamp, min, max (double) */ | 
|  | "integralLimit_max": 0.0, | 
|  | "outLim_min": 30.0,           /* the PID output clamp, min, max (double) */ | 
|  | "outLim_max": 100.0, | 
|  | "slewNeg": 0.0, /* The slew negative value. (double) */ | 
|  | "slewPos": 0.0  /* The slew positive value. (double) */ | 
|  | } | 
|  | } | 
|  | ] | 
|  | } | 
|  | ] |