1[
2    {
3        // Hold fans at the given target when a number of fans are missing.
4        "name": "fan(s) missing",
5        "groups": [
6            {
7                "name": "fan inventory",
8                "interface": "xyz.openbmc_project.Inventory.Item",
9                "property": { "name": "Present" }
10            }
11        ],
12        "triggers": [
13            {
14                "class": "init",
15                "method": "get_properties"
16            },
17            {
18                "class": "signal",
19                "signal": "properties_changed"
20            }
21        ],
22        "actions": [
23            {
24                "name": "count_state_before_target",
25                "count": 1,
26                "state": false,
27                "target": 10400
28            }
29        ]
30    },
31    {
32        // Hold fans at the given target when a number of rotors are nonfunctional.
33        "name": "fan rotor(s) faulted",
34        "groups": [
35            {
36                "name": "fan0 rotor inventory",
37                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
38                "property": { "name": "Functional" }
39            },
40            {
41                "name": "fan1 rotor inventory",
42                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
43                "property": { "name": "Functional" }
44            },
45            {
46                "name": "fan2 rotor inventory",
47                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
48                "property": { "name": "Functional" }
49            },
50            {
51                "name": "fan4 rotor inventory",
52                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
53                "property": { "name": "Functional" }
54            }
55        ],
56        "triggers": [
57            {
58                "class": "init",
59                "method": "get_properties"
60            },
61            {
62                "class": "signal",
63                "signal": "properties_changed"
64            }
65        ],
66        "actions": [
67            {
68                "name": "count_state_before_target",
69                "count": 1,
70                "state": false,
71                "target": 10400
72            }
73        ]
74    },
75    {
76        // Hold fans at the given target when any critical service
77        // is not running for 5 seconds.
78        "name": "service(s) missing",
79        "groups": [
80            {
81                "name": "fan inventory",
82                "interface": "xyz.openbmc_project.Inventory.Item",
83                "property": { "name": "Present" }
84            },
85            {
86                "name": "occ objects",
87                "interface": "org.open_power.OCC.Status",
88                "property": { "name": "OccActive" }
89            },
90            {
91                "name": "nvme temps",
92                "interface": "xyz.openbmc_project.Sensor.Value",
93                "property": { "name": "Value" }
94            },
95            {
96                "name": "planar temps",
97                "interface": "xyz.openbmc_project.Sensor.Value",
98                "property": { "name": "Value" }
99            },
100            {
101                "name": "flett temps",
102                "interface": "xyz.openbmc_project.Sensor.Value",
103                "property": { "name": "Value" }
104            },
105            {
106                "name": "pcie cable card temps",
107                "interface": "xyz.openbmc_project.Sensor.Value",
108                "property": { "name": "Value" }
109            },
110            {
111                "name": "ambient temp",
112                "interface": "xyz.openbmc_project.Sensor.Value",
113                "property": { "name": "Value" }
114            }
115        ],
116        "triggers": [
117            {
118                "class": "init",
119                "method": "name_has_owner"
120            },
121            {
122                "class": "signal",
123                "signal": "name_owner_changed"
124            }
125        ],
126        "actions": [
127            {
128                "name": "call_actions_based_on_timer",
129                "timer": {
130                    "interval": 5000000,
131                    "type": "oneshot"
132                },
133                "actions": [
134                    {
135                        "name": "set_target_on_missing_owner",
136                        "groups": [
137                            {
138                                "name": "fan inventory",
139                                "interface": "xyz.openbmc_project.Inventory.Item",
140                                "property": { "name": "Present" }
141                            },
142                            {
143                                "name": "occ objects",
144                                "interface": "org.open_power.OCC.Status",
145                                "property": { "name": "OccActive" }
146                            },
147                            {
148                                "name": "nvme temps",
149                                "interface": "xyz.openbmc_project.Sensor.Value",
150                                "property": { "name": "Value" }
151                            },
152                            {
153                                "name": "planar temps",
154                                "interface": "xyz.openbmc_project.Sensor.Value",
155                                "property": { "name": "Value" }
156                            },
157                            {
158                                "name": "flett temps",
159                                "interface": "xyz.openbmc_project.Sensor.Value",
160                                "property": { "name": "Value" }
161                            },
162                            {
163                                "name": "pcie cable card temps",
164                                "interface": "xyz.openbmc_project.Sensor.Value",
165                                "property": { "name": "Value" }
166                            },
167                            {
168                                "name": "ambient temp",
169                                "interface": "xyz.openbmc_project.Sensor.Value",
170                                "property": { "name": "Value" }
171                            }
172                        ],
173                        "target": 10400
174                    }
175                ]
176            }
177        ]
178    },
179    {
180        // Set a fan floor if an OCC isn't active
181        "name": "Non-active OCC(s)",
182        "groups": [
183            {
184                "name": "occ objects",
185                "interface": "org.open_power.OCC.Status",
186                "property": {
187                    "name": "OccActive"
188                }
189            }
190        ],
191        "triggers": [
192            {
193                "class": "signal",
194                "signal": "properties_changed"
195            },
196            {
197                "class": "signal",
198                "signal": "interfaces_added"
199            },
200            {
201                "class": "init",
202                "method": "get_properties"
203            }
204        ],
205        "actions": [
206            {
207                "name": "count_state_floor",
208                "count": 1,
209                "state": false,
210                "floor": 10400
211            }
212        ]
213    },
214    {
215        // Set a raised fan floor when any temperature sensor is nonfunctional
216        "name": "Nonfunctional temperature sensors",
217        "groups": [
218            {
219                "name": "proc0 core temps",
220                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
221                "property": { "name": "Functional" }
222            },
223            {
224                "name": "proc1 core temps",
225                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
226                "property": { "name": "Functional" }
227            },
228            {
229                "name": "proc0 ioring temp",
230                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
231                "property": { "name": "Functional" }
232            },
233            {
234                "name": "proc1 ioring temp",
235                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
236                "property": { "name": "Functional" }
237            },
238            {
239                "name": "dram temps",
240                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
241                "property": { "name": "Functional" }
242            },
243            {
244                "name": "pmic temps",
245                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
246                "property": { "name": "Functional" }
247            },
248            {
249                "name": "internal memory buffer temps",
250                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
251                "property": { "name": "Functional" }
252            },
253            {
254                "name": "dram and external memory buffer temps",
255                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
256                "property": { "name": "Functional" }
257            },
258            {
259                "name": "external memory buffer temps",
260                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
261                "property": { "name": "Functional" }
262            },
263            {
264                "name": "vdd vrm temps",
265                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
266                "property": { "name": "Functional" }
267            },
268            {
269                "name": "nvme temps",
270                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
271                "property": { "name": "Functional" }
272            },
273            {
274                "name": "planar temps",
275                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
276                "property": { "name": "Functional" }
277            },
278            {
279                "name": "flett temps",
280                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
281                "property": { "name": "Functional" }
282            },
283            {
284                "name": "pcie cable card temps",
285                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
286                "property": { "name": "Functional" }
287            },
288            {
289                "name": "ambient temp",
290                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
291                "property": { "name": "Functional" }
292            }
293        ],
294        "triggers": [
295            {
296                "class": "signal",
297                "signal": "properties_changed"
298            },
299            {
300                "class": "signal",
301                "signal": "interfaces_added"
302            },
303            {
304                "class": "signal",
305                "signal": "interfaces_removed"
306            },
307            {
308                "class": "init",
309                "method": "get_properties"
310            }
311        ],
312        "actions": [
313            {
314                "name": "count_state_floor",
315                "count": 1,
316                "state": false,
317                "floor": 10400
318            }
319        ]
320    },
321    {
322        "name": "Set Proc 0 Core DVFS parameter",
323        "groups": [
324            {
325                "name": "proc 0 core dvfs temp",
326                "interface": "xyz.openbmc_project.Sensor.Value",
327                "property": { "name": "Value" }
328            }
329        ],
330        "triggers": [
331            {
332                "class": "init",
333                "method": "get_properties"
334            },
335            {
336                "class": "signal",
337                "signal": "interfaces_added"
338            },
339            {
340                "class": "signal",
341                "signal": "properties_changed"
342            }
343        ],
344        "actions": [
345            {
346                "name": "set_parameter_from_group_max",
347                "parameter_name": "proc_0_core_dvfs_increase_temp",
348                "modifier": {
349                    "operator": "minus",
350                    "value": 10
351                }
352            },
353            {
354                "name": "set_parameter_from_group_max",
355                "parameter_name": "proc_0_core_dvfs_decrease_temp",
356                "modifier": {
357                    "operator": "minus",
358                    "value": 13
359                }
360            }
361        ]
362    },
363    {
364        "name": "Set Proc 1 Core DVFS parameter",
365        "groups": [
366            {
367                "name": "proc 1 core dvfs temp",
368                "interface": "xyz.openbmc_project.Sensor.Value",
369                "property": { "name": "Value" }
370            }
371        ],
372        "triggers": [
373            {
374                "class": "init",
375                "method": "get_properties"
376            },
377            {
378                "class": "signal",
379                "signal": "interfaces_added"
380            },
381            {
382                "class": "signal",
383                "signal": "properties_changed"
384            }
385        ],
386        "actions": [
387            {
388                "name": "set_parameter_from_group_max",
389                "parameter_name": "proc_1_core_dvfs_increase_temp",
390                "modifier": {
391                    "operator": "minus",
392                    "value": 10
393                }
394            },
395            {
396                "name": "set_parameter_from_group_max",
397                "parameter_name": "proc_1_core_dvfs_decrease_temp",
398                "modifier": {
399                    "operator": "minus",
400                    "value": 13
401                }
402            }
403        ]
404    },
405    {
406        "name": "Set Proc 0 IO Ring DVFS parameter",
407        "groups": [
408            {
409                "name": "proc 0 ioring dvfs temp",
410                "interface": "xyz.openbmc_project.Sensor.Value",
411                "property": { "name": "Value" }
412            }
413        ],
414        "triggers": [
415            {
416                "class": "init",
417                "method": "get_properties"
418            },
419            {
420                "class": "signal",
421                "signal": "interfaces_added"
422            },
423            {
424                "class": "signal",
425                "signal": "properties_changed"
426            }
427        ],
428        "actions": [
429            {
430                "name": "set_parameter_from_group_max",
431                "parameter_name": "proc_0_ioring_dvfs_increase_temp",
432                "modifier": {
433                    "operator": "minus",
434                    "value": 10
435                }
436            },
437            {
438                "name": "set_parameter_from_group_max",
439                "parameter_name": "proc_0_ioring_dvfs_decrease_temp",
440                "modifier": {
441                    "operator": "minus",
442                    "value": 13
443                }
444            }
445        ]
446    },
447    {
448        "name": "Set Proc 1 IO Ring DVFS parameter",
449        "groups": [
450            {
451                "name": "proc 1 ioring dvfs temp",
452                "interface": "xyz.openbmc_project.Sensor.Value",
453                "property": { "name": "Value" }
454            }
455        ],
456        "triggers": [
457            {
458                "class": "init",
459                "method": "get_properties"
460            },
461            {
462                "class": "signal",
463                "signal": "interfaces_added"
464            },
465            {
466                "class": "signal",
467                "signal": "properties_changed"
468            }
469        ],
470        "actions": [
471            {
472                "name": "set_parameter_from_group_max",
473                "parameter_name": "proc_1_ioring_dvfs_increase_temp",
474                "modifier": {
475                    "operator": "minus",
476                    "value": 10
477                }
478            },
479            {
480                "name": "set_parameter_from_group_max",
481                "parameter_name": "proc_1_ioring_dvfs_decrease_temp",
482                "modifier": {
483                    "operator": "minus",
484                    "value": 13
485                }
486            }
487        ]
488    },
489    {
490        "name": "Set DRAM DVFS parameter",
491        "groups": [
492            {
493                "name": "dram dvfs temp",
494                "interface": "xyz.openbmc_project.Sensor.Value",
495                "property": { "name": "Value" }
496            }
497        ],
498        "triggers": [
499            {
500                "class": "init",
501                "method": "get_properties"
502            },
503            {
504                "class": "signal",
505                "signal": "properties_changed"
506            },
507            {
508                "class": "signal",
509                "signal": "interfaces_added"
510            }
511        ],
512        "actions": [
513            {
514                "name": "set_parameter_from_group_max",
515                "parameter_name": "dram_dvfs_increase_temp",
516                "modifier": {
517                    "operator": "minus",
518                    "value": 10
519                }
520            },
521            {
522                "name": "set_parameter_from_group_max",
523                "parameter_name": "dram_dvfs_decrease_temp",
524                "modifier": {
525                    "operator": "minus",
526                    "value": 13
527                }
528            }
529        ]
530    },
531    {
532        "name": "Set PMIC DVFS parameter",
533        "groups": [
534            {
535                "name": "pmic dvfs temp",
536                "interface": "xyz.openbmc_project.Sensor.Value",
537                "property": { "name": "Value" }
538            }
539        ],
540        "triggers": [
541            {
542                "class": "init",
543                "method": "get_properties"
544            },
545            {
546                "class": "signal",
547                "signal": "properties_changed"
548            },
549            {
550                "class": "signal",
551                "signal": "interfaces_added"
552            }
553        ],
554        "actions": [
555            {
556                "name": "set_parameter_from_group_max",
557                "parameter_name": "pmic_dvfs_increase_temp",
558                "modifier": {
559                    "operator": "minus",
560                    "value": 10
561                }
562            },
563            {
564                "name": "set_parameter_from_group_max",
565                "parameter_name": "pmic_dvfs_decrease_temp",
566                "modifier": {
567                    "operator": "minus",
568                    "value": 13
569                }
570            }
571        ]
572    },
573    {
574        "name": "Set internal memory buffer DVFS parameter",
575        "groups": [
576            {
577                "name": "internal memory buffer dvfs temp",
578                "interface": "xyz.openbmc_project.Sensor.Value",
579                "property": { "name": "Value" }
580            }
581        ],
582        "triggers": [
583            {
584                "class": "init",
585                "method": "get_properties"
586            },
587            {
588                "class": "signal",
589                "signal": "properties_changed"
590            },
591            {
592                "class": "signal",
593                "signal": "interfaces_added"
594            }
595        ],
596        "actions": [
597            {
598                "name": "set_parameter_from_group_max",
599                "parameter_name": "intmb_dvfs_increase_temp",
600                "modifier": {
601                    "operator": "minus",
602                    "value": 10
603                }
604            },
605            {
606                "name": "set_parameter_from_group_max",
607                "parameter_name": "intmb_dvfs_decrease_temp",
608                "modifier": {
609                    "operator": "minus",
610                    "value": 13
611                }
612            }
613        ]
614    },
615    {
616        "name": "Set DRAM and external memory buffer DVFS parameter",
617        "groups": [
618            {
619                "name": "dram and external memory buffer dvfs temp",
620                "interface": "xyz.openbmc_project.Sensor.Value",
621                "property": { "name": "Value" }
622            }
623        ],
624        "triggers": [
625            {
626                "class": "init",
627                "method": "get_properties"
628            },
629            {
630                "class": "signal",
631                "signal": "properties_changed"
632            },
633            {
634                "class": "signal",
635                "signal": "interfaces_added"
636            }
637        ],
638        "actions": [
639            {
640                "name": "set_parameter_from_group_max",
641                "parameter_name": "dram_extmb_dvfs_increase_temp",
642                "modifier": {
643                    "operator": "minus",
644                    "value": 10
645                }
646            },
647            {
648                "name": "set_parameter_from_group_max",
649                "parameter_name": "dram_extmb_dvfs_decrease_temp",
650                "modifier": {
651                    "operator": "minus",
652                    "value": 13
653                }
654            }
655        ]
656    },
657    {
658        "name": "Set external memory buffer DVFS parameter",
659        "groups": [
660            {
661                "name": "external memory buffer dvfs temp",
662                "interface": "xyz.openbmc_project.Sensor.Value",
663                "property": { "name": "Value" }
664            }
665        ],
666        "triggers": [
667            {
668                "class": "init",
669                "method": "get_properties"
670            },
671            {
672                "class": "signal",
673                "signal": "properties_changed"
674            },
675            {
676                "class": "signal",
677                "signal": "interfaces_added"
678            }
679        ],
680        "actions": [
681            {
682                "name": "set_parameter_from_group_max",
683                "parameter_name": "extmb_dvfs_increase_temp",
684                "modifier": {
685                    "operator": "minus",
686                    "value": 7
687                }
688            },
689            {
690                "name": "set_parameter_from_group_max",
691                "parameter_name": "extmb_dvfs_decrease_temp",
692                "modifier": {
693                    "operator": "minus",
694                    "value": 10
695                }
696            }
697        ]
698    },
699    {
700        // Collect group temperatures each iteration the repeating timer expires
701        "name": "Fan control timer loop",
702        "groups": [
703            {
704                "name": "proc0 core temps",
705                "interface": "xyz.openbmc_project.Sensor.Value",
706                "property": { "name": "Value" }
707            },
708            {
709                "name": "proc1 core temps",
710                "interface": "xyz.openbmc_project.Sensor.Value",
711                "property": { "name": "Value" }
712            },
713            {
714                "name": "proc0 ioring temp",
715                "interface": "xyz.openbmc_project.Sensor.Value",
716                "property": { "name": "Value" }
717            },
718            {
719                "name": "proc1 ioring temp",
720                "interface": "xyz.openbmc_project.Sensor.Value",
721                "property": { "name": "Value" }
722            },
723            {
724                "name": "dram temps",
725                "interface": "xyz.openbmc_project.Sensor.Value",
726                "property": { "name": "Value" }
727            },
728            {
729                "name": "pmic temps",
730                "interface": "xyz.openbmc_project.Sensor.Value",
731                "property": { "name": "Value" }
732            },
733            {
734                "name": "internal memory buffer temps",
735                "interface": "xyz.openbmc_project.Sensor.Value",
736                "property": { "name": "Value" }
737            },
738            {
739                "name": "dram and external memory buffer temps",
740                "interface": "xyz.openbmc_project.Sensor.Value",
741                "property": { "name": "Value" }
742            },
743            {
744                "name": "external memory buffer temps",
745                "interface": "xyz.openbmc_project.Sensor.Value",
746                "property": { "name": "Value" }
747            },
748            {
749                "name": "vdd vrm temps",
750                "interface": "xyz.openbmc_project.Sensor.Value",
751                "property": { "name": "Value" }
752            },
753            {
754                "name": "nvme temps",
755                "interface": "xyz.openbmc_project.Sensor.Value",
756                "property": { "name": "Value" }
757            },
758            {
759                "name": "planar temps",
760                "interface": "xyz.openbmc_project.Sensor.Value",
761                "property": { "name": "Value" }
762            },
763            {
764                "name": "flett temps",
765                "interface": "xyz.openbmc_project.Sensor.Value",
766                "property": { "name": "Value" }
767            },
768            {
769                "name": "pcie cable card temps",
770                "interface": "xyz.openbmc_project.Sensor.Value",
771                "property": { "name": "Value" }
772            }
773        ],
774        "triggers": [
775            {
776                "class": "timer",
777                "type": "repeating",
778                "interval": 2000000,
779                "preload_groups": true
780            }
781        ],
782        "actions": [
783            {
784                "name": "set_net_increase_target",
785                "groups": [
786                    {
787                        "name": "proc0 core temps",
788                        "interface": "xyz.openbmc_project.Sensor.Value",
789                        "property": { "name": "Value" }
790                    }
791                ],
792                "state_parameter_name": "proc_0_core_dvfs_increase_temp",
793                "delta": 300
794            },
795            {
796                "name": "set_net_increase_target",
797                "groups": [
798                    {
799                        "name": "proc1 core temps",
800                        "interface": "xyz.openbmc_project.Sensor.Value",
801                        "property": { "name": "Value" }
802                    }
803                ],
804                "state_parameter_name": "proc_1_core_dvfs_increase_temp",
805                "delta": 300
806            },
807            {
808                "name": "set_net_increase_target",
809                "groups": [
810                    {
811                        "name": "proc0 ioring temp",
812                        "interface": "xyz.openbmc_project.Sensor.Value",
813                        "property": { "name": "Value" }
814                    }
815                ],
816                "state_parameter_name": "proc_0_ioring_dvfs_increase_temp",
817                "delta": 300
818            },
819            {
820                "name": "set_net_increase_target",
821                "groups": [
822                    {
823                        "name": "proc1 ioring temp",
824                        "interface": "xyz.openbmc_project.Sensor.Value",
825                        "property": { "name": "Value" }
826                    }
827                ],
828                "state_parameter_name": "proc_1_ioring_dvfs_increase_temp",
829                "delta": 300
830            },
831            {
832                "name": "set_net_increase_target",
833                "groups": [
834                    {
835                        "name": "dram temps",
836                        "interface": "xyz.openbmc_project.Sensor.Value",
837                        "property": { "name": "Value" }
838                    }
839                ],
840                "state_parameter_name": "dram_dvfs_increase_temp",
841                "delta": 200
842            },
843            {
844                "name": "set_net_increase_target",
845                "groups": [
846                    {
847                        "name": "pmic temps",
848                        "interface": "xyz.openbmc_project.Sensor.Value",
849                        "property": { "name": "Value" }
850                    }
851                ],
852                "state_parameter_name": "pmic_dvfs_increase_temp",
853                "delta": 200
854            },
855            {
856                "name": "set_net_increase_target",
857                "groups": [
858                    {
859                        "name": "internal memory buffer temps",
860                        "interface": "xyz.openbmc_project.Sensor.Value",
861                        "property": { "name": "Value" }
862                    }
863                ],
864                "state_parameter_name": "intmb_dvfs_increase_temp",
865                "delta": 200
866            },
867            {
868                "name": "set_net_increase_target",
869                "groups": [
870                    {
871                        "name": "dram and external memory buffer temps",
872                        "interface": "xyz.openbmc_project.Sensor.Value",
873                        "property": { "name": "Value" }
874                    }
875                ],
876                "state_parameter_name": "dram_extmb_dvfs_increase_temp",
877                "delta": 200
878            },
879            {
880                "name": "set_net_increase_target",
881                "groups": [
882                    {
883                        "name": "external memory buffer temps",
884                        "interface": "xyz.openbmc_project.Sensor.Value",
885                        "property": { "name": "Value" }
886                    }
887                ],
888                "state_parameter_name": "extmb_dvfs_increase_temp",
889                "delta": 200
890            },
891            {
892                "name": "set_net_increase_target",
893                "groups": [
894                    {
895                        "name": "vdd vrm temps",
896                        "interface": "xyz.openbmc_project.Sensor.Value",
897                        "property": { "name": "Value" }
898                    }
899                ],
900                "state": 82.0,
901                "delta": 300
902            },
903            {
904                "name": "set_net_increase_target",
905                "groups": [
906                    {
907                        "name": "nvme temps",
908                        "interface": "xyz.openbmc_project.Sensor.Value",
909                        "property": { "name": "Value" }
910                    }
911                ],
912                "state": 58.0,
913                "delta": 200
914            },
915            {
916                "name": "set_net_increase_target",
917                "groups": [
918                    {
919                        "name": "planar temps",
920                        "interface": "xyz.openbmc_project.Sensor.Value",
921                        "property": { "name": "Value" }
922                    }
923                ],
924                "state": 65.0,
925                "delta": 255
926            },
927            {
928                "name": "set_net_increase_target",
929                "groups": [
930                    {
931                        "name": "flett temps",
932                        "interface": "xyz.openbmc_project.Sensor.Value",
933                        "property": { "name": "Value" }
934                    }
935                ],
936                "state": 80.0,
937                "delta": 200
938            },
939            {
940                "name": "set_net_increase_target",
941                "groups": [
942                    {
943                        "name": "pcie cable card temps",
944                        "interface": "xyz.openbmc_project.Sensor.Value",
945                        "property": { "name": "Value" }
946                    }
947                ],
948                "state": 70.0,
949                "delta": 255
950            },
951            {
952                "name": "set_net_decrease_target",
953                "groups": [
954                    {
955                        "name": "proc0 core temps",
956                        "interface": "xyz.openbmc_project.Sensor.Value",
957                        "property": { "name": "Value" }
958                    }
959                ],
960                "state_parameter_name": "proc_0_core_dvfs_decrease_temp",
961                "delta": 50
962            },
963            {
964                "name": "set_net_decrease_target",
965                "groups": [
966                    {
967                        "name": "proc1 core temps",
968                        "interface": "xyz.openbmc_project.Sensor.Value",
969                        "property": { "name": "Value" }
970                    }
971                ],
972                "state_parameter_name": "proc_1_core_dvfs_decrease_temp",
973                "delta": 50
974            },
975            {
976                "name": "set_net_decrease_target",
977                "groups": [
978                    {
979                        "name": "proc0 ioring temp",
980                        "interface": "xyz.openbmc_project.Sensor.Value",
981                        "property": { "name": "Value" }
982                    }
983                ],
984                "state_parameter_name": "proc_0_ioring_dvfs_decrease_temp",
985                "delta": 50
986            },
987            {
988                "name": "set_net_decrease_target",
989                "groups": [
990                    {
991                        "name": "proc1 ioring temp",
992                        "interface": "xyz.openbmc_project.Sensor.Value",
993                        "property": { "name": "Value" }
994                    }
995                ],
996                "state_parameter_name": "proc_1_ioring_dvfs_decrease_temp",
997                "delta": 50
998            },
999            {
1000                "name": "set_net_decrease_target",
1001                "groups": [
1002                    {
1003                        "name": "dram temps",
1004                        "interface": "xyz.openbmc_project.Sensor.Value",
1005                        "property": { "name": "Value" }
1006                    }
1007                ],
1008                "state_parameter_name": "dram_dvfs_decrease_temp",
1009                "delta": 50
1010            },
1011            {
1012                "name": "set_net_decrease_target",
1013                "groups": [
1014                    {
1015                        "name": "pmic temps",
1016                        "interface": "xyz.openbmc_project.Sensor.Value",
1017                        "property": { "name": "Value" }
1018                    }
1019                ],
1020                "state_parameter_name": "pmic_dvfs_decrease_temp",
1021                "delta": 50
1022            },
1023            {
1024                "name": "set_net_decrease_target",
1025                "groups": [
1026                    {
1027                        "name": "internal memory buffer temps",
1028                        "interface": "xyz.openbmc_project.Sensor.Value",
1029                        "property": { "name": "Value" }
1030                    }
1031                ],
1032                "state_parameter_name": "intmb_dvfs_decrease_temp",
1033                "delta": 50
1034            },
1035            {
1036                "name": "set_net_decrease_target",
1037                "groups": [
1038                    {
1039                        "name": "dram and external memory buffer temps",
1040                        "interface": "xyz.openbmc_project.Sensor.Value",
1041                        "property": { "name": "Value" }
1042                    }
1043                ],
1044                "state_parameter_name": "dram_extmb_dvfs_decrease_temp",
1045                "delta": 50
1046            },
1047            {
1048                "name": "set_net_decrease_target",
1049                "groups": [
1050                    {
1051                        "name": "external memory buffer temps",
1052                        "interface": "xyz.openbmc_project.Sensor.Value",
1053                        "property": { "name": "Value" }
1054                    }
1055                ],
1056                "state_parameter_name": "extmb_dvfs_decrease_temp",
1057                "delta": 50
1058            },
1059            {
1060                "name": "set_net_decrease_target",
1061                "groups": [
1062                    {
1063                        "name": "vdd vrm temps",
1064                        "interface": "xyz.openbmc_project.Sensor.Value",
1065                        "property": { "name": "Value" }
1066                    }
1067                ],
1068                "state": 79.0,
1069                "delta": 50
1070            },
1071            {
1072                "name": "set_net_decrease_target",
1073                "groups": [
1074                    {
1075                        "name": "nvme temps",
1076                        "interface": "xyz.openbmc_project.Sensor.Value",
1077                        "property": { "name": "Value" }
1078                    }
1079                ],
1080                "state": 55.0,
1081                "delta": 50
1082            },
1083            {
1084                "name": "set_net_decrease_target",
1085                "groups": [
1086                    {
1087                        "name": "planar temps",
1088                        "interface": "xyz.openbmc_project.Sensor.Value",
1089                        "property": { "name": "Value" }
1090                    }
1091                ],
1092                "state": 60.0,
1093                "delta": 50
1094            },
1095            {
1096                "name": "set_net_decrease_target",
1097                "groups": [
1098                    {
1099                        "name": "flett temps",
1100                        "interface": "xyz.openbmc_project.Sensor.Value",
1101                        "property": { "name": "Value" }
1102                    }
1103                ],
1104                "state": 75.0,
1105                "delta": 40
1106            },
1107            {
1108                "name": "set_net_decrease_target",
1109                "groups": [
1110                    {
1111                        "name": "pcie cable card temps",
1112                        "interface": "xyz.openbmc_project.Sensor.Value",
1113                        "property": { "name": "Value" }
1114                    }
1115                ],
1116                "state": 65.0,
1117                "delta": 50
1118            }
1119        ]
1120    },
1121    {
1122        // Remove NVMe temperature objects from cache when they are removed from
1123        // dbus. There's no need to react to their removal.
1124        "name": "remove nvme objects",
1125        "groups": [
1126            {
1127                "name": "nvme temps",
1128                "interface": "xyz.openbmc_project.Sensor.Value",
1129                "property": { "name": "Value" }
1130            },
1131            {
1132                "name": "nvme temps",
1133                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
1134                "property": { "name": "Functional" }
1135            }
1136        ],
1137        "triggers": [
1138            {
1139                "class": "signal",
1140                "signal": "interfaces_removed"
1141            }
1142        ]
1143    },
1144    {
1145        "name": "set pcie floor index",
1146        "groups": [
1147            {
1148                "name": "pcie slots",
1149                "interface": "xyz.openbmc_project.State.Decorator.PowerState",
1150                "property": {
1151                    "name": "PowerState"
1152                }
1153            },
1154            {
1155                "name": "pcie cards",
1156                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1157                "property": {
1158                    "name": "Function0DeviceId"
1159                }
1160            },
1161            {
1162                "name": "pcie cards",
1163                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1164                "property": {
1165                    "name": "Function0VendorId"
1166                }
1167            },
1168            {
1169                "name": "pcie cards",
1170                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1171                "property": {
1172                    "name": "Function0SubsystemId"
1173                }
1174            },
1175            {
1176                "name": "pcie cards",
1177                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1178                "property": {
1179                    "name": "Function0SubsystemVendorId"
1180                }
1181            }
1182        ],
1183        "triggers": [
1184            {
1185                "class": "init",
1186                "method": "get_properties"
1187            },
1188            {
1189                "class": "signal",
1190                "signal": "properties_changed"
1191            },
1192            {
1193                "class": "signal",
1194                "signal": "interfaces_added"
1195            }
1196        ],
1197        "actions": [
1198            {
1199                "name": "pcie_card_floors",
1200                "use_config_specific_files": true,
1201                "settle_time": 2
1202            }
1203        ]
1204    },
1205    {
1206        "name": "Set altitude offset parameter",
1207        "groups": [
1208            {
1209                "name": "altitude",
1210                "interface": "xyz.openbmc_project.Sensor.Value",
1211                "property": { "name": "Value" }
1212            }
1213        ],
1214        "triggers": [
1215            {
1216                "class": "init",
1217                "method": "get_properties"
1218            },
1219            {
1220                "class": "signal",
1221                "signal": "interfaces_added"
1222            },
1223            {
1224                // Refresh altitude every 24hrs
1225                "class": "timer",
1226                "type": "repeating",
1227                "interval": 86400000000,
1228                "preload_groups": true
1229            }
1230        ],
1231        "actions": [
1232            {
1233                "name": "set_parameter_from_group_max",
1234                "parameter_name": "altitude_offset",
1235                "modifier": {
1236                    "operator": "less_than",
1237                    "default_value": 3000,
1238                    "value": [
1239                        { "arg_value": 1000, "parameter_value": 0 },
1240                        { "arg_value": 1900, "parameter_value": 1000 },
1241                        { "arg_value": 2800, "parameter_value": 2000 }
1242                    ]
1243                }
1244            }
1245        ]
1246    },
1247    {
1248        "name": "Fan floors",
1249        "groups": [
1250            {
1251                "name": "ambient temp",
1252                "interface": "xyz.openbmc_project.Sensor.Value",
1253                "property": { "name": "Value" }
1254            },
1255            {
1256                "name": "cpu 0 inventory",
1257                "interface": "xyz.openbmc_project.Inventory.Decorator.Asset",
1258                "property": { "name": "Model" }
1259            }
1260        ],
1261        "triggers": [
1262            {
1263                "class": "init",
1264                "method": "get_properties"
1265            },
1266            {
1267                "class": "signal",
1268                "signal": "properties_changed"
1269            },
1270            {
1271                "class": "signal",
1272                "signal": "interfaces_added"
1273            },
1274            {
1275                "class": "parameter",
1276                "parameter": "pcie_floor_index"
1277            },
1278            {
1279                "class": "parameter",
1280                "parameter": "altitude_offset"
1281            }
1282        ],
1283        "actions": [
1284            {
1285                "name": "mapped_floor",
1286                "key_group": "ambient temp",
1287                "condition_group": "cpu 0 inventory",
1288                "condition_value": "5CF9",
1289                "condition_op": "not_equal",
1290                "fan_floors": [
1291                    {
1292                        // Entry valid for ambient temp < 27
1293                        "key": 27,
1294                        "default_floor": 3700,
1295                        "floor_offset_parameter": "altitude_offset",
1296                        "floors": [
1297                            {
1298                                "parameter": "pcie_floor_index",
1299                                "floors": [
1300                                    { "value": 1, "floor": 6000 },
1301                                    { "value": 2, "floor": 7000 },
1302                                    { "value": 3, "floor": 8000 }
1303                                ]
1304                            }
1305                        ]
1306                    },
1307                    {
1308                        // Entry valid for ambient temp < 32
1309                        "key": 32,
1310                        "default_floor": 5000,
1311                        "floor_offset_parameter": "altitude_offset",
1312                        "floors": [
1313                            {
1314                                "parameter": "pcie_floor_index",
1315                                "floors": [
1316                                    { "value": 1, "floor": 7000 },
1317                                    { "value": 2, "floor": 9000 },
1318                                    { "value": 3, "floor": 9500 }
1319                                ]
1320                            }
1321                        ]
1322                    },
1323                    {
1324                        // Entry valid for ambient temp < 37
1325                        "key": 37,
1326                        "default_floor": 6000,
1327                        "floor_offset_parameter": "altitude_offset",
1328                        "floors": [
1329                            {
1330                                "parameter": "pcie_floor_index",
1331                                "floors": [
1332                                    { "value": 1, "floor": 9000 },
1333                                    { "value": 2, "floor": 9500 },
1334                                    { "value": 3, "floor": 10400 }
1335                                ]
1336                            }
1337                        ]
1338                    },
1339                    {
1340                        // Entry valid for ambient temp < 42
1341                        "key": 42,
1342                        "default_floor": 8000,
1343                        "floor_offset_parameter": "altitude_offset",
1344                        "floors": [
1345                            {
1346                                "parameter": "pcie_floor_index",
1347                                "floors": [
1348                                    { "value": 1, "floor": 9500 },
1349                                    { "value": 2, "floor": 10400 },
1350                                    { "value": 3, "floor": 10400 }
1351                                ]
1352                            }
1353                        ]
1354                    }
1355                ]
1356            },
1357            {
1358                "name": "mapped_floor",
1359                "key_group": "ambient temp",
1360                "condition_group": "cpu 0 inventory",
1361                "condition_value": "5CF9",
1362                "condition_op": "equal",
1363                "fan_floors": [
1364                    {
1365                        // Entry valid for ambient temp < 27
1366                        "key": 27,
1367                        "default_floor": 5000,
1368                        "floor_offset_parameter": "altitude_offset",
1369                        "floors": [
1370                            {
1371                                "parameter": "pcie_floor_index",
1372                                "floors": [
1373                                    { "value": 1, "floor": 7000 },
1374                                    { "value": 2, "floor": 8000 },
1375                                    { "value": 3, "floor": 9000 }
1376                                ]
1377                            }
1378                        ]
1379                    },
1380                    {
1381                        // Entry valid for ambient temp < 32
1382                        "key": 32,
1383                        "default_floor": 6000,
1384                        "floor_offset_parameter": "altitude_offset",
1385                        "floors": [
1386                            {
1387                                "parameter": "pcie_floor_index",
1388                                "floors": [
1389                                    { "value": 1, "floor": 8000 },
1390                                    { "value": 2, "floor": 9000 },
1391                                    { "value": 3, "floor": 9500 }
1392                                ]
1393                            }
1394                        ]
1395                    },
1396                    {
1397                        // Entry valid for ambient temp < 37
1398                        "key": 37,
1399                        "default_floor": 7000,
1400                        "floor_offset_parameter": "altitude_offset",
1401                        "floors": [
1402                            {
1403                                "parameter": "pcie_floor_index",
1404                                "floors": [
1405                                    { "value": 1, "floor": 9000 },
1406                                    { "value": 2, "floor": 9500 },
1407                                    { "value": 3, "floor": 10400 }
1408                                ]
1409                            }
1410                        ]
1411                    },
1412                    {
1413                        // Entry valid for ambient temp < 42
1414                        "key": 42,
1415                        "default_floor": 8000,
1416                        "floor_offset_parameter": "altitude_offset",
1417                        "floors": [
1418                            {
1419                                "parameter": "pcie_floor_index",
1420                                "floors": [
1421                                    { "value": 1, "floor": 9500 },
1422                                    { "value": 2, "floor": 10400 },
1423                                    { "value": 3, "floor": 10400 }
1424                                ]
1425                            }
1426                        ]
1427                    }
1428                ]
1429            }
1430        ]
1431    }
1432]
1433