# 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) */
        }
      }
    ]
  }
]
