groups:
    - name: zone0_control_mode
      description: Thermal control mode for zone 0
      service: xyz.openbmc_project.Control.Thermal
      type: /xyz/openbmc_project/control/thermal
      members:
          - /0
    - name: air_cooled_zone0_fans
      description: Group of fan inventory objects for air cooled zone 0
      type: /xyz/openbmc_project/inventory
      members:
          - /system/chassis/motherboard/fan0
          - /system/chassis/motherboard/fan1
          - /system/chassis/motherboard/fan2
          - /system/chassis/motherboard/fan3
          - /system/chassis/motherboard/fan4
          - /system/chassis/motherboard/fan5
    - name: zone0_ambient
      description: Group of ambient temperature sensors for zone 0
      type: /xyz/openbmc_project/sensors
      members:
          - /temperature/ambient_temp
    - name: occ0_object
      description: Dbus object containing OCC0 properties
      type: /org/open_power/control
      members:
          - /occ0
    - name: occ1_object
      description: Dbus object containing OCC1 properties
      type: /org/open_power/control
      members:
          - /occ1
    - name: zone0_cores
      description: Group of core temperature sensors for zone 0
      type: /xyz/openbmc_project/sensors
      members:
          - /temperature/p0_core0_temp
          - /temperature/p0_core1_temp
          - /temperature/p0_core2_temp
          - /temperature/p0_core3_temp
          - /temperature/p0_core4_temp
          - /temperature/p0_core5_temp
          - /temperature/p0_core6_temp
          - /temperature/p0_core7_temp
          - /temperature/p0_core8_temp
          - /temperature/p0_core9_temp
          - /temperature/p0_core10_temp
          - /temperature/p0_core11_temp
          - /temperature/p0_core12_temp
          - /temperature/p0_core13_temp
          - /temperature/p0_core14_temp
          - /temperature/p0_core15_temp
          - /temperature/p0_core16_temp
          - /temperature/p0_core17_temp
          - /temperature/p0_core18_temp
          - /temperature/p0_core19_temp
          - /temperature/p0_core20_temp
          - /temperature/p0_core21_temp
          - /temperature/p0_core22_temp
          - /temperature/p0_core23_temp
          - /temperature/p1_core0_temp
          - /temperature/p1_core1_temp
          - /temperature/p1_core2_temp
          - /temperature/p1_core3_temp
          - /temperature/p1_core4_temp
          - /temperature/p1_core5_temp
          - /temperature/p1_core6_temp
          - /temperature/p1_core7_temp
          - /temperature/p1_core8_temp
          - /temperature/p1_core9_temp
          - /temperature/p1_core10_temp
          - /temperature/p1_core11_temp
          - /temperature/p1_core12_temp
          - /temperature/p1_core13_temp
          - /temperature/p1_core14_temp
          - /temperature/p1_core15_temp
          - /temperature/p1_core16_temp
          - /temperature/p1_core17_temp
          - /temperature/p1_core18_temp
          - /temperature/p1_core19_temp
          - /temperature/p1_core20_temp
          - /temperature/p1_core21_temp
          - /temperature/p1_core22_temp
          - /temperature/p1_core23_temp
    - name: zone0_dimms
      description: Group of dimm temperature sensors for zone 0
      type: /xyz/openbmc_project/sensors
      members:
          - /temperature/dimm0_temp
          - /temperature/dimm1_temp
          - /temperature/dimm2_temp
          - /temperature/dimm3_temp
          - /temperature/dimm4_temp
          - /temperature/dimm5_temp
          - /temperature/dimm6_temp
          - /temperature/dimm7_temp
          - /temperature/dimm8_temp
          - /temperature/dimm9_temp
          - /temperature/dimm10_temp
          - /temperature/dimm11_temp
          - /temperature/dimm12_temp
          - /temperature/dimm13_temp
          - /temperature/dimm14_temp
          - /temperature/dimm15_temp
          - /temperature/dimm16_temp
          - /temperature/dimm17_temp
          - /temperature/dimm18_temp
          - /temperature/dimm19_temp
          - /temperature/dimm20_temp
          - /temperature/dimm21_temp
          - /temperature/dimm22_temp
          - /temperature/dimm23_temp
          - /temperature/dimm24_temp
          - /temperature/dimm25_temp
          - /temperature/dimm26_temp
          - /temperature/dimm27_temp
          - /temperature/dimm28_temp
          - /temperature/dimm29_temp
          - /temperature/dimm30_temp
          - /temperature/dimm31_temp
    - name: zone0_onboard
      description: Group of onboard temperature sensors for zone 0
      type: /xyz/openbmc_project/sensors
      members:
          - /temperature/p0_pcie_temp
          - /temperature/p1_pcie_temp
    - name: zone0_vrd
      description: Group of vrd temperature sensors for zone 0
      type: /xyz/openbmc_project/sensors
      members:
          - /temperature/p0_vcs_temp
          - /temperature/p0_vdn_temp
          - /temperature/p1_vcs_temp
          - /temperature/p1_vdn_temp
          - /temperature/p0_vdd_temp
          - /temperature/p1_vdd_temp
    - name: zone0_gpu
      description: Group of gpu temperature sensors for zone 0
      type: /xyz/openbmc_project/sensors
      members:
          - /temperature/gpu0
          - /temperature/gpu1
          - /temperature/gpu2
          - /temperature/gpu3
          - /temperature/gpu4
          - /temperature/gpu5
          - /temperature/gpu6
          - /temperature/gpu7
    - name: zone0_nvme
      description: Group of nvme temperature sensors for zone 0
      type: /xyz/openbmc_project/sensors
      members:
          - /temperature/nvme0
          - /temperature/nvme1
          - /temperature/nvme2
          - /temperature/nvme3
          - /temperature/nvme4
          - /temperature/nvme5
          - /temperature/nvme6
          - /temperature/nvme7
          - /temperature/nvme8
          - /temperature/nvme9
          - /temperature/nvme10
          - /temperature/nvme11
          - /temperature/nvme12
          - /temperature/nvme13
          - /temperature/nvme14
          - /temperature/nvme15
          - /temperature/nvme16
          - /temperature/nvme17
          - /temperature/nvme18
          - /temperature/nvme19
          - /temperature/nvme20
          - /temperature/nvme21
          - /temperature/nvme22
          - /temperature/nvme23
    - name: zone0_250soc
      description: Group of nvme temperature sensors for zone 0
      type: /xyz/openbmc_project/sensors
      members:
          - /temperature/250_soc0
          - /temperature/250_soc1
          - /temperature/250_soc2
          - /temperature/250_soc3
          - /temperature/250_soc4
          - /temperature/250_soc5
          - /temperature/250_soc6
          - /temperature/250_soc7
matches:
    - name: propertiesChanged
      parameters:
          - object
          - interface
    - name: interfacesAdded
      parameters:
          - object
    - name: interfacesRemoved
      parameters:
          - object
    - name: nameOwnerChanged
      parameters:
          - object
          - interface

signals:
    - name: propertiesChanged
      description: >
          A property changed match
      parameters:
          - type
          - object
          - interface
          - property
      match: propertiesChanged
    - name: interfacesAdded
      description: >
          An interfaces added match
      parameters:
          - type
          - object
          - interface
          - property
      match: interfacesAdded
    - name: interfacesRemoved
      description: >
          An interfaces removed match
      parameters:
          - object
          - interface
      match: interfacesRemoved
    - name: nameOwnerChanged
      description: >
          A name owner changed match
      parameters:
      match: nameOwnerChanged

methods:
    - name: getProperties
      description: >
          Get the property values of the given group members
          by performing a `GetProperty` method call on each
      parameters:
          - type
    - name: nameHasOwner
      description: >
          A NameHasOwner method call to be performed on all event group members
      parameters:

handlers:
    - name: setProperty
      description: >
          Sets a value for the given object/interface/property
      parameters:
          - type
    - name: setService
      description: >
          Sets the service name and ownership status for the given group
      parameters:
          - group
    - name: removeInterface
      description: >
          Removes an interface(and all associated properties) on the
          given object from use within all event actions
      parameters:
          - object
          - interface

preconditions:
    - name: property_states_match
      description: >
          All defined properties must match the values given to
          enable a set speed event otherwise fan speeds are set to full
      parameters:
          - groups
    - name: services_missing_owner
      description: >
          Any services missing an owner enable the events given otherwise
          the events are removed/disabled
      parameters:

actions:
    - name: call_actions_based_on_timer
      description: >
          Sets up a list of actions to be invoked when the defined timer
          expires (or for each expiration of a repeating timer)
      parameters:
          - timer
          - actions
    - name: default_floor_on_missing_owner
      description: >
          Set the fan floor to the default floor
    - name: set_speed_on_missing_owner
      description: >
          Set fans to the given speed when any service within the group
          no longer exists
      parameters:
          - speed
    - name: set_request_speed_base_with_max
      description: >
          Set the base request speed of a zone to the max value of a group for
          calculating a new target speed
    - name: count_state_before_speed
      description: Set the speed when a number of properties at a state
      parameters:
          - count
          - property
          - speed
    - name: set_floor_from_average_sensor_value
      description: Set floor speed from first entry with average less than key
      parameters:
          - map
    - name: set_ceiling_from_average_sensor_value
      description: Set ceiling speed based on key transition values with average
      parameters:
          - map
    - name: set_net_increase_speed
      description: >
          Set the speed increase delta based on a factor applied to
          the delta increase size times the given value and property's
          value difference
      parameters:
          - property
          - factor
          - delta
    - name: set_net_decrease_speed
      description: >
          Set the speed decrease delta based on a factor applied to
          the delta decrease size times the given value and property's
          value difference
      parameters:
          - property
          - factor
          - delta
    - name: use_alternate_events_on_state
      description: >
          Replaces a set of default events with an alternate set of events
          when all the group properties are at a given state
      parameters:
          - property
          - defevents
          - altevents

events:
    - name: default_fan_floor_on_service_fail
      precondition:
          name: services_missing_owner
          groups:
              - name: zone0_ambient
                interface: xyz.openbmc_project.Sensor.Value
                property:
                    name: Value
                    type: int64_t
          triggers:
              - name: init
                method: nameHasOwner
                handler: setService
              - name: signal
                signal: nameOwnerChanged
                handler: setService
          events:
              - name: default_fan_floor
                groups:
                    - name: zone0_ambient
                      interface: xyz.openbmc_project.Sensor.Value
                      property:
                          name: Value
                          type: int64_t
                triggers:
                    - name: timer
                      interval: 5000000
                      type: oneshot
                actions:
                    - name: default_floor_on_missing_owner
    - name: high_speed_on_occ_service_fails
      groups:
          - name: occ0_object
            interface: org.open_power.OCC.Status
            property:
                name: OccActive
                type: bool
          - name: occ1_object
            interface: org.open_power.OCC.Status
            property:
                name: OccActive
                type: bool
      triggers:
          - name: init
            method: nameHasOwner
            handler: setService
          - name: signal
            signal: nameOwnerChanged
            handler: setService
      actions:
          - name: call_actions_based_on_timer
            timer:
                interval: 5000000
                type: oneshot
            actions:
                - name: set_speed_on_missing_owner
                  speed:
                      value: 255
                      type: uint64_t
    - name: missing_or_fails_before_high_speed_air
      groups:
          - name: air_cooled_zone0_fans
            zone_conditions:
                - name: air_cooled_chassis
                  zones:
                      - 0
            interface: xyz.openbmc_project.Inventory.Item
            property:
                name: Present
                type: bool
          - name: air_cooled_zone0_fans
            zone_conditions:
                - name: air_cooled_chassis
                  zones:
                      - 0
            interface: xyz.openbmc_project.State.Decorator.OperationalStatus
            property:
                name: Functional
                type: bool
      triggers:
          - name: init
            method: getProperties
            handler: setProperty
          - name: signal
            signal: propertiesChanged
            handler: setProperty
      actions:
          - name: count_state_before_speed
            count: 1
            property:
                value: false
                type: bool
            speed:
                value: 255
                type: uint64_t
    - name: set_air_cooled_speed_boundaries_based_on_ambient
      groups:
          - name: zone0_control_mode
            zone_conditions:
                - name: air_cooled_chassis
                  zones:
                      - 0
            interface: xyz.openbmc_project.Control.ThermalMode
            property:
                name: Current
                type: std::string
      triggers:
          - name: init
            method: getProperties
            handler: setProperty
          - name: signal
            signal: propertiesChanged
            handler: setProperty
      actions:
          - name: use_alternate_events_on_state
            property:
                value: CUSTOM
                type: std::string
            defevents:
                - name: default_floor_boundary
                  groups:
                      - name: zone0_ambient
                        zone_conditions:
                            - name: air_cooled_chassis
                              zones:
                                  - 0
                        interface: xyz.openbmc_project.Sensor.Value
                        property:
                            name: Value
                            type: int64_t
                  triggers:
                      - name: init
                        method: getProperties
                        handler: setProperty
                      - name: signal
                        signal: propertiesChanged
                        handler: setProperty
                  actions:
                      - name: set_floor_from_average_sensor_value
                        map:
                            value:
                                - 25000: 85
                                - 26000: 85
                                - 28000: 97
                                - 31000: 116
                                - 33000: 128
                                - 36000: 148
                                - 38000: 160
                                - 41000: 255
                            type: std::map<int64_t, uint64_t>
                      - name: set_ceiling_from_average_sensor_value
                        map:
                            value:
                                - 25000: 255
                                - 27000: 255
                            type: std::map<int64_t, uint64_t>
            altevents:
                - name: alternate_floor_boundary
                  groups:
                      - name: zone0_ambient
                        zone_conditions:
                            - name: air_cooled_chassis
                              zones:
                                  - 0
                        interface: xyz.openbmc_project.Sensor.Value
                        property:
                            name: Value
                            type: int64_t
                  triggers:
                      - name: init
                        method: getProperties
                        handler: setProperty
                      - name: signal
                        signal: propertiesChanged
                        handler: setProperty
                  actions:
                      - name: set_floor_from_average_sensor_value
                        map:
                            value:
                                - 25000: 255
                                - 26000: 255
                                - 28000: 255
                                - 31000: 255
                                - 33000: 255
                                - 36000: 255
                                - 38000: 255
                                - 41000: 255
                            type: std::map<int64_t, uint64_t>
                      - name: set_ceiling_from_average_sensor_value
                        map:
                            value:
                                - 25000: 255
                                - 27000: 255
                            type: std::map<int64_t, uint64_t>
    - name: occ_active_speed_changes
      precondition:
          name: property_states_match
          groups:
              - name: occ0_object
                interface: org.open_power.OCC.Status
                property:
                    name: OccActive
                    type: bool
                    value: true
              - name: occ1_object
                interface: org.open_power.OCC.Status
                property:
                    name: OccActive
                    type: bool
                    value: true
          triggers:
              - name: init
                method: getProperties
                handler: setProperty
              - name: signal
                signal: interfacesAdded
                handler: setProperty
              - name: signal
                signal: propertiesChanged
                handler: setProperty
          events:
            - name: speed_control_sensors
              groups:
                  - name: zone0_onboard
                    interface: xyz.openbmc_project.Sensor.Value
                    property:
                        name: Value
                        type: int64_t
                  - name: zone0_vrd
                    interface: xyz.openbmc_project.Sensor.Value
                    property:
                        name: Value
                        type: int64_t
                  - name: zone0_cores
                    interface: xyz.openbmc_project.Sensor.Value
                    property:
                        name: Value
                        type: int64_t
                  - name: zone0_dimms
                    interface: xyz.openbmc_project.Sensor.Value
                    property:
                        name: Value
                        type: int64_t
                  - name: zone0_gpu
                    interface: xyz.openbmc_project.Sensor.Value
                    property:
                        name: Value
                        type: int64_t
                  - name: zone0_nvme
                    interface: xyz.openbmc_project.Sensor.Value
                    property:
                        name: Value
                        type: int64_t
                  - name: zone0_250soc
                    interface: xyz.openbmc_project.Sensor.Value
                    property:
                        name: Value
                        type: int64_t
              triggers:
                  - name: init
                    method: getProperties
                    handler: setProperty
                  - name: signal
                    signal: interfacesAdded
                    handler: setProperty
                  - name: signal
                    signal: propertiesChanged
                    handler: setProperty
                  - name: signal
                    signal: interfacesRemoved
                    handler: removeInterface
            - name: fails_before_high_speed_air
              groups:
                  - name: zone0_cores
                    interface: xyz.openbmc_project.State.Decorator.OperationalStatus
                    property:
                        name: Functional
                        type: bool
                  - name: zone0_dimms
                    interface: xyz.openbmc_project.State.Decorator.OperationalStatus
                    property:
                        name: Functional
                        type: bool
              triggers:
                  - name: init
                    method: getProperties
                    handler: setProperty
                  - name: signal
                    signal: interfacesAdded
                    handler: setProperty
                  - name: signal
                    signal: propertiesChanged
                    handler: setProperty
              actions:
                  - name: count_state_before_speed
                    count: 1
                    property:
                        value: false
                        type: bool
                    speed:
                        value: 255
                        type: uint64_t
            - name: 1sec_speed_change_request_sampling
              triggers:
                  - name: timer
                    interval: 1000000
                    type: repeating
              actions:
                  # Speed changes based on onboard temps
                  - name: set_net_increase_speed
                    groups:
                        - name: zone0_onboard
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 55000
                        type: int64_t
                    factor:
                        value: 1000
                        type: int64_t
                    delta:
                        value: 8
                        type: uint64_t
                  - name: set_net_decrease_speed
                    groups:
                        - name: zone0_onboard
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 52000
                        type: int64_t
                    factor:
                        value: 1000
                        type: int64_t
                    delta:
                        value: 3
                        type: uint64_t
                  # Speed changes based on vrd temps
                  - name: set_net_increase_speed
                    groups:
                        - name: zone0_vrd
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 90000
                        type: int64_t
                    factor:
                        value: 1000
                        type: int64_t
                    delta:
                        value: 5
                        type: uint64_t
                  - name: set_net_decrease_speed
                    groups:
                        - name: zone0_vrd
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 85000
                        type: int64_t
                    factor:
                        value: 3000
                        type: int64_t
                    delta:
                        value: 3
                        type: uint64_t
                  # Speed changes based on core temps
                  - name: set_net_increase_speed
                    groups:
                        - name: zone0_cores
                          zone_conditions:
                              - name: air_cooled_chassis
                                zones:
                                    - 0
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 75000
                        type: int64_t
                    factor:
                        value: 1000
                        type: int64_t
                    delta:
                        value: 13
                        type: uint64_t
                  - name: set_net_decrease_speed
                    groups:
                        - name: zone0_cores
                          zone_conditions:
                              - name: air_cooled_chassis
                                zones:
                                    - 0
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 70000
                        type: int64_t
                    factor:
                        value: 4000
                        type: int64_t
                    delta:
                        value: 5
                        type: uint64_t
                  # Speed changes based on dimm temps
                  - name: set_net_increase_speed
                    groups:
                        - name: zone0_dimms
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 80000
                        type: int64_t
                    factor:
                        value: 1000
                        type: int64_t
                    delta:
                        value: 8
                        type: uint64_t
                  - name: set_net_decrease_speed
                    groups:
                        - name: zone0_dimms
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 75000
                        type: int64_t
                    factor:
                        value: 3000
                        type: int64_t
                    delta:
                        value: 3
                        type: uint64_t
                  # Speed changes based on gpu temps
                  - name: set_net_increase_speed
                    groups:
                        - name: zone0_gpu
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 80
                        type: int64_t
                    factor:
                        value: 1
                        type: int64_t
                    delta:
                        value: 13
                        type: uint64_t
                  - name: set_net_decrease_speed
                    groups:
                        - name: zone0_gpu
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 77
                        type: int64_t
                    factor:
                        value: 4
                        type: int64_t
                    delta:
                        value: 5
                        type: uint64_t
                  # Speed changes based on nvme temps
                  - name: set_net_increase_speed
                    groups:
                        - name: zone0_nvme
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 55
                        type: int64_t
                    factor:
                        value: 1
                        type: int64_t
                    delta:
                        value: 13
                        type: uint64_t
                  - name: set_net_decrease_speed
                    groups:
                        - name: zone0_nvme
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 52
                        type: int64_t
                    factor:
                        value: 3
                        type: int64_t
                    delta:
                        value: 5
                        type: uint64_t
                  # Speed changes based on 250soc temps
                  - name: set_net_increase_speed
                    groups:
                        - name: zone0_250soc
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 80000
                        type: int64_t
                    factor:
                        value: 1000
                        type: int64_t
                    delta:
                        value: 13
                        type: uint64_t
                  - name: set_net_decrease_speed
                    groups:
                        - name: zone0_250soc
                          interface: xyz.openbmc_project.Sensor.Value
                          property:
                              name: Value
                              type: int64_t
                    property:
                        value: 77000
                        type: int64_t
                    factor:
                        value: 3000
                        type: int64_t
                    delta:
                        value: 5
                        type: uint64_t
