Support threshold hysteresis

Add support for a hysteresis value on the warning high/low and critical
high/low sensor thresholds.  On the high thresholds, this requires the
sensor value to dip below the (threshold - hysteresis) value before the
alarm clears, and on the low thresholds it has to go above (threshold +
hysteresis).

These are optional fields in the configuration JSON and will default to
zero if not present, which results in the previous behavior of not
having a hysteresis at all.

Tested: with IBM's Ambient_Virtual_Temp sensor. When changing the value
above a high threshold and then back below the threshold, we only see
the alarm deasserted when the temp is below (threshold - hysteresis).

Change-Id: Ied1d40def94e1b66cf4ec8826799bada4e6236ab
Signed-off-by: Matt Spinler <spinler@us.ibm.com>
Signed-off-by: Rashmica Gupta <rashmica.g@gmail.com>
3 files changed
tree: 6ad02a707f607e63cf5c58e4f9eb70451da0c339
  1. subprojects/
  2. .clang-format
  3. .gitignore
  4. dbusSensor.hpp
  5. dbusUtils.hpp
  6. exprtkTools.hpp
  7. LICENSE
  8. MAINTAINERS
  9. meson.build
  10. phosphor-virtual-sensor.service.in
  11. README.md
  12. thresholds.hpp
  13. virtual_sensor_config.json
  14. virtualSensor.cpp
  15. virtualSensor.hpp
README.md

phosphor-virtual-sensor

phosphor-virtual-sensor reads in virtual_sensor_config.json There are two types of data in this file:

1) virtual sensor configuration information

See virtual_sensor_config.json in this repository for an example. Sensors added this way can use any expression that is accepted by exprtk.

2) information to get a virtual sensor configuraton from D-Bus

For example:

    {
    "Desc":
        {
            "Config" : "D-Bus",
            "Type" : "modifiedMedian"
        }
    }

Sensors added this way can only use a set of restricted calculations. At this stage the only type supported is modifiedMedian.

The virtual sensor configuration information needs to be added into the relevant hardware configuration file in entity-manager. This method of adding a virtual sensor allows a recipe that builds for different hardware configurations to have different virtual sensors for each configuration.

The virtual sensor configuration in entity manager follows a different format to the JSON in virtual_sensor_config.json (specified in entity-manager/schemas/VirtualSensor.json). In particular, the format for Thresholds is different. The following table shows the severity fields that correspond to a particular threshold.

ThresholdSeverity
Warning0
Critical1
PerformanceLoss2
SoftShutdown3
HardShutdown4