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": 11300
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": "fan3 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": 2,
70                "state": false,
71                "target": 11300
72            }
73        ]
74    },
75    {
76        // (for the following 4 rules)
77        // if a dual-rotor fan becomes non-functional, lock its speed to
78        // poweron_target to lock the other rotor to full_speed
79        "name": "nonfunc rotor override-0",
80        "groups": [
81            {
82                "name": "fan0 rotor inventory",
83                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
84                "property": { "name": "Functional" }
85            }
86        ],
87        "triggers": [
88            {
89                "class": "init",
90                "method": "get_properties"
91            },
92            {
93                "class": "signal",
94                "signal": "properties_changed"
95            }
96        ],
97        "actions": [
98            {
99                "name": "override_fan_target",
100                "count": 1,
101                "state": false,
102                "fans": ["fan0"],
103                "target": 11300
104            }
105        ]
106    },
107    {
108        "name": "nonfunc rotor override-1",
109        "groups": [
110            {
111                "name": "fan1 rotor inventory",
112                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
113                "property": { "name": "Functional" }
114            }
115        ],
116        "triggers": [
117            {
118                "class": "init",
119                "method": "get_properties"
120            },
121            {
122                "class": "signal",
123                "signal": "properties_changed"
124            }
125        ],
126        "actions": [
127            {
128                "name": "override_fan_target",
129                "count": 1,
130                "state": false,
131                "fans": ["fan1"],
132                "target": 11300
133            }
134        ]
135    },
136    {
137        "name": "nonfunc rotor override-2",
138        "groups": [
139            {
140                "name": "fan2 rotor inventory",
141                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
142                "property": { "name": "Functional" }
143            }
144        ],
145        "triggers": [
146            {
147                "class": "init",
148                "method": "get_properties"
149            },
150            {
151                "class": "signal",
152                "signal": "properties_changed"
153            }
154        ],
155        "actions": [
156            {
157                "name": "override_fan_target",
158                "count": 1,
159                "state": false,
160                "fans": ["fan2"],
161                "target": 11300
162            }
163        ]
164    },
165    {
166        "name": "nonfunc rotor override-3",
167        "groups": [
168            {
169                "name": "fan3 rotor inventory",
170                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
171                "property": { "name": "Functional" }
172            }
173        ],
174        "triggers": [
175            {
176                "class": "init",
177                "method": "get_properties"
178            },
179            {
180                "class": "signal",
181                "signal": "properties_changed"
182            }
183        ],
184        "actions": [
185            {
186                "name": "override_fan_target",
187                "count": 1,
188                "state": false,
189                "fans": ["fan3"],
190                "target": 11300
191            }
192        ]
193    },
194    {
195        // Hold fans at the given target when any critical service
196        // is not running for 5 seconds.
197        "name": "service(s) missing",
198        "groups": [
199            {
200                "name": "fan inventory",
201                "interface": "xyz.openbmc_project.Inventory.Item",
202                "property": { "name": "Present" }
203            },
204            {
205                "name": "occ objects",
206                "interface": "org.open_power.OCC.Status",
207                "property": { "name": "OccActive" }
208            },
209            {
210                "name": "nvme temps",
211                "interface": "xyz.openbmc_project.Sensor.Value",
212                "property": { "name": "Value" }
213            },
214            {
215                "name": "planar temps",
216                "interface": "xyz.openbmc_project.Sensor.Value",
217                "property": { "name": "Value" }
218            },
219            {
220                "name": "pcie cable card temps",
221                "interface": "xyz.openbmc_project.Sensor.Value",
222                "property": { "name": "Value" }
223            },
224            {
225                "name": "ambient temp",
226                "interface": "xyz.openbmc_project.Sensor.Value",
227                "property": { "name": "Value" }
228            },
229            {
230                "name": "altitude",
231                "interface": "xyz.openbmc_project.Sensor.Value",
232                "property": { "name": "Value" }
233            }
234        ],
235        "triggers": [
236            {
237                "class": "init",
238                "method": "name_has_owner"
239            },
240            {
241                "class": "signal",
242                "signal": "name_owner_changed"
243            }
244        ],
245        "actions": [
246            {
247                "name": "call_actions_based_on_timer",
248                "timer": {
249                    "interval": 5000000,
250                    "type": "oneshot"
251                },
252                "actions": [
253                    {
254                        "name": "set_target_on_missing_owner",
255                        "groups": [
256                            {
257                                "name": "fan inventory",
258                                "interface": "xyz.openbmc_project.Inventory.Item",
259                                "property": { "name": "Present" }
260                            },
261                            {
262                                "name": "occ objects",
263                                "interface": "org.open_power.OCC.Status",
264                                "property": { "name": "OccActive" }
265                            },
266                            {
267                                "name": "nvme temps",
268                                "interface": "xyz.openbmc_project.Sensor.Value",
269                                "property": { "name": "Value" }
270                            },
271                            {
272                                "name": "planar temps",
273                                "interface": "xyz.openbmc_project.Sensor.Value",
274                                "property": { "name": "Value" }
275                            },
276                            {
277                                "name": "pcie cable card temps",
278                                "interface": "xyz.openbmc_project.Sensor.Value",
279                                "property": { "name": "Value" }
280                            },
281                            {
282                                "name": "ambient temp",
283                                "interface": "xyz.openbmc_project.Sensor.Value",
284                                "property": { "name": "Value" }
285                            }
286                        ],
287                        "target": 9700
288                    }
289                ]
290            }
291        ]
292    },
293    {
294        // Set a fan floor if an OCC isn't active
295        "name": "Non-active OCC(s)",
296        "groups": [
297            {
298                "name": "occ objects",
299                "interface": "org.open_power.OCC.Status",
300                "property": {
301                    "name": "OccActive"
302                }
303            }
304        ],
305        "triggers": [
306            {
307                "class": "signal",
308                "signal": "properties_changed"
309            },
310            {
311                "class": "signal",
312                "signal": "interfaces_added"
313            },
314            {
315                "class": "init",
316                "method": "get_properties"
317            }
318        ],
319        "actions": [
320            {
321                "name": "count_state_floor",
322                "count": 1,
323                "state": false,
324                "floor": 11300
325            }
326        ]
327    },
328    {
329        // Set a raised fan floor when any temperature or altitude sensor is
330        // nonfunctional
331        "name": "Nonfunctional temperature sensors",
332        "groups": [
333            {
334                "name": "proc0 core temps",
335                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
336                "property": { "name": "Functional" }
337            },
338            {
339                "name": "proc1 core temps",
340                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
341                "property": { "name": "Functional" }
342            },
343            {
344                "name": "proc2 core temps",
345                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
346                "property": { "name": "Functional" }
347            },
348            {
349                "name": "proc3 core temps",
350                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
351                "property": { "name": "Functional" }
352            },
353            {
354                "name": "proc4 core temps",
355                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
356                "property": { "name": "Functional" }
357            },
358            {
359                "name": "proc5 core temps",
360                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
361                "property": { "name": "Functional" }
362            },
363            {
364                "name": "proc6 core temps",
365                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
366                "property": { "name": "Functional" }
367            },
368            {
369                "name": "proc7 core temps",
370                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
371                "property": { "name": "Functional" }
372            },
373            {
374                "name": "proc0 ioring temp",
375                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
376                "property": { "name": "Functional" }
377            },
378            {
379                "name": "proc1 ioring temp",
380                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
381                "property": { "name": "Functional" }
382            },
383            {
384                "name": "proc2 ioring temp",
385                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
386                "property": { "name": "Functional" }
387            },
388            {
389                "name": "proc3 ioring temp",
390                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
391                "property": { "name": "Functional" }
392            },
393            {
394                "name": "proc4 ioring temp",
395                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
396                "property": { "name": "Functional" }
397            },
398            {
399                "name": "proc5 ioring temp",
400                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
401                "property": { "name": "Functional" }
402            },
403            {
404                "name": "proc6 ioring temp",
405                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
406                "property": { "name": "Functional" }
407            },
408            {
409                "name": "proc7 ioring temp",
410                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
411                "property": { "name": "Functional" }
412            },
413            {
414                "name": "dram temps",
415                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
416                "property": { "name": "Functional" }
417            },
418            {
419                "name": "pmic temps",
420                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
421                "property": { "name": "Functional" }
422            },
423            {
424                "name": "internal memory buffer temps",
425                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
426                "property": { "name": "Functional" }
427            },
428            {
429                "name": "dram and external memory buffer temps",
430                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
431                "property": { "name": "Functional" }
432            },
433            {
434                "name": "external memory buffer temps",
435                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
436                "property": { "name": "Functional" }
437            },
438            {
439                "name": "vdd vrm temps",
440                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
441                "property": { "name": "Functional" }
442            },
443            {
444                "name": "nvme temps",
445                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
446                "property": { "name": "Functional" }
447            },
448            {
449                "name": "planar temps",
450                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
451                "property": { "name": "Functional" }
452            },
453            {
454                "name": "pcie cable card temps",
455                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
456                "property": { "name": "Functional" }
457            },
458            {
459                "name": "ambient temp",
460                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
461                "property": { "name": "Functional" }
462            },
463            {
464                "name": "altitude",
465                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
466                "property": { "name": "Functional" }
467            }
468        ],
469        "triggers": [
470            {
471                "class": "signal",
472                "signal": "properties_changed"
473            },
474            {
475                "class": "signal",
476                "signal": "interfaces_added"
477            },
478            {
479                "class": "signal",
480                "signal": "interfaces_removed"
481            },
482            {
483                "class": "init",
484                "method": "get_properties"
485            }
486        ],
487        "actions": [
488            {
489                "name": "count_state_floor",
490                "count": 1,
491                "state": false,
492                "floor": 11300
493            }
494        ]
495    },
496    {
497        "name": "Set Proc 0 Core DVFS parameter",
498        "groups": [
499            {
500                "name": "proc 0 core dvfs temp",
501                "interface": "xyz.openbmc_project.Sensor.Value",
502                "property": { "name": "Value" }
503            }
504        ],
505        "triggers": [
506            {
507                "class": "init",
508                "method": "get_properties"
509            },
510            {
511                "class": "signal",
512                "signal": "interfaces_added"
513            },
514            {
515                "class": "signal",
516                "signal": "properties_changed"
517            }
518        ],
519        "actions": [
520            {
521                "name": "set_parameter_from_group_max",
522                "parameter_name": "proc_0_core_dvfs_increase_temp",
523                "modifier": {
524                    "operator": "minus",
525                    "value": 7
526                }
527            },
528            {
529                "name": "set_parameter_from_group_max",
530                "parameter_name": "proc_0_core_dvfs_decrease_temp",
531                "modifier": {
532                    "operator": "minus",
533                    "value": 9
534                }
535            }
536        ]
537    },
538    {
539        "name": "Set Proc 1 Core DVFS parameter",
540        "groups": [
541            {
542                "name": "proc 1 core dvfs temp",
543                "interface": "xyz.openbmc_project.Sensor.Value",
544                "property": { "name": "Value" }
545            }
546        ],
547        "triggers": [
548            {
549                "class": "init",
550                "method": "get_properties"
551            },
552            {
553                "class": "signal",
554                "signal": "interfaces_added"
555            },
556            {
557                "class": "signal",
558                "signal": "properties_changed"
559            }
560        ],
561        "actions": [
562            {
563                "name": "set_parameter_from_group_max",
564                "parameter_name": "proc_1_core_dvfs_increase_temp",
565                "modifier": {
566                    "operator": "minus",
567                    "value": 7
568                }
569            },
570            {
571                "name": "set_parameter_from_group_max",
572                "parameter_name": "proc_1_core_dvfs_decrease_temp",
573                "modifier": {
574                    "operator": "minus",
575                    "value": 9
576                }
577            }
578        ]
579    },
580    {
581        "name": "Set Proc 2 Core DVFS parameter",
582        "groups": [
583            {
584                "name": "proc 2 core dvfs temp",
585                "interface": "xyz.openbmc_project.Sensor.Value",
586                "property": { "name": "Value" }
587            }
588        ],
589        "triggers": [
590            {
591                "class": "init",
592                "method": "get_properties"
593            },
594            {
595                "class": "signal",
596                "signal": "interfaces_added"
597            },
598            {
599                "class": "signal",
600                "signal": "properties_changed"
601            }
602        ],
603        "actions": [
604            {
605                "name": "set_parameter_from_group_max",
606                "parameter_name": "proc_2_core_dvfs_increase_temp",
607                "modifier": {
608                    "operator": "minus",
609                    "value": 7
610                }
611            },
612            {
613                "name": "set_parameter_from_group_max",
614                "parameter_name": "proc_2_core_dvfs_decrease_temp",
615                "modifier": {
616                    "operator": "minus",
617                    "value": 9
618                }
619            }
620        ]
621    },
622    {
623        "name": "Set Proc 3 Core DVFS parameter",
624        "groups": [
625            {
626                "name": "proc 3 core dvfs temp",
627                "interface": "xyz.openbmc_project.Sensor.Value",
628                "property": { "name": "Value" }
629            }
630        ],
631        "triggers": [
632            {
633                "class": "init",
634                "method": "get_properties"
635            },
636            {
637                "class": "signal",
638                "signal": "interfaces_added"
639            },
640            {
641                "class": "signal",
642                "signal": "properties_changed"
643            }
644        ],
645        "actions": [
646            {
647                "name": "set_parameter_from_group_max",
648                "parameter_name": "proc_3_core_dvfs_increase_temp",
649                "modifier": {
650                    "operator": "minus",
651                    "value": 7
652                }
653            },
654            {
655                "name": "set_parameter_from_group_max",
656                "parameter_name": "proc_3_core_dvfs_decrease_temp",
657                "modifier": {
658                    "operator": "minus",
659                    "value": 9
660                }
661            }
662        ]
663    },
664    {
665        "name": "Set Proc 4 Core DVFS parameter",
666        "groups": [
667            {
668                "name": "proc 4 core dvfs temp",
669                "interface": "xyz.openbmc_project.Sensor.Value",
670                "property": { "name": "Value" }
671            }
672        ],
673        "triggers": [
674            {
675                "class": "init",
676                "method": "get_properties"
677            },
678            {
679                "class": "signal",
680                "signal": "interfaces_added"
681            },
682            {
683                "class": "signal",
684                "signal": "properties_changed"
685            }
686        ],
687        "actions": [
688            {
689                "name": "set_parameter_from_group_max",
690                "parameter_name": "proc_4_core_dvfs_increase_temp",
691                "modifier": {
692                    "operator": "minus",
693                    "value": 7
694                }
695            },
696            {
697                "name": "set_parameter_from_group_max",
698                "parameter_name": "proc_4_core_dvfs_decrease_temp",
699                "modifier": {
700                    "operator": "minus",
701                    "value": 9
702                }
703            }
704        ]
705    },
706    {
707        "name": "Set Proc 5 Core DVFS parameter",
708        "groups": [
709            {
710                "name": "proc 5 core dvfs temp",
711                "interface": "xyz.openbmc_project.Sensor.Value",
712                "property": { "name": "Value" }
713            }
714        ],
715        "triggers": [
716            {
717                "class": "init",
718                "method": "get_properties"
719            },
720            {
721                "class": "signal",
722                "signal": "interfaces_added"
723            },
724            {
725                "class": "signal",
726                "signal": "properties_changed"
727            }
728        ],
729        "actions": [
730            {
731                "name": "set_parameter_from_group_max",
732                "parameter_name": "proc_5_core_dvfs_increase_temp",
733                "modifier": {
734                    "operator": "minus",
735                    "value": 7
736                }
737            },
738            {
739                "name": "set_parameter_from_group_max",
740                "parameter_name": "proc_5_core_dvfs_decrease_temp",
741                "modifier": {
742                    "operator": "minus",
743                    "value": 9
744                }
745            }
746        ]
747    },
748    {
749        "name": "Set Proc 6 Core DVFS parameter",
750        "groups": [
751            {
752                "name": "proc 6 core dvfs temp",
753                "interface": "xyz.openbmc_project.Sensor.Value",
754                "property": { "name": "Value" }
755            }
756        ],
757        "triggers": [
758            {
759                "class": "init",
760                "method": "get_properties"
761            },
762            {
763                "class": "signal",
764                "signal": "interfaces_added"
765            },
766            {
767                "class": "signal",
768                "signal": "properties_changed"
769            }
770        ],
771        "actions": [
772            {
773                "name": "set_parameter_from_group_max",
774                "parameter_name": "proc_6_core_dvfs_increase_temp",
775                "modifier": {
776                    "operator": "minus",
777                    "value": 7
778                }
779            },
780            {
781                "name": "set_parameter_from_group_max",
782                "parameter_name": "proc_6_core_dvfs_decrease_temp",
783                "modifier": {
784                    "operator": "minus",
785                    "value": 9
786                }
787            }
788        ]
789    },
790    {
791        "name": "Set Proc 7 Core DVFS parameter",
792        "groups": [
793            {
794                "name": "proc 7 core dvfs temp",
795                "interface": "xyz.openbmc_project.Sensor.Value",
796                "property": { "name": "Value" }
797            }
798        ],
799        "triggers": [
800            {
801                "class": "init",
802                "method": "get_properties"
803            },
804            {
805                "class": "signal",
806                "signal": "interfaces_added"
807            },
808            {
809                "class": "signal",
810                "signal": "properties_changed"
811            }
812        ],
813        "actions": [
814            {
815                "name": "set_parameter_from_group_max",
816                "parameter_name": "proc_7_core_dvfs_increase_temp",
817                "modifier": {
818                    "operator": "minus",
819                    "value": 7
820                }
821            },
822            {
823                "name": "set_parameter_from_group_max",
824                "parameter_name": "proc_7_core_dvfs_decrease_temp",
825                "modifier": {
826                    "operator": "minus",
827                    "value": 9
828                }
829            }
830        ]
831    },
832    {
833        "name": "Set Proc 0 IO Ring DVFS parameter",
834        "groups": [
835            {
836                "name": "proc 0 ioring dvfs temp",
837                "interface": "xyz.openbmc_project.Sensor.Value",
838                "property": { "name": "Value" }
839            }
840        ],
841        "triggers": [
842            {
843                "class": "init",
844                "method": "get_properties"
845            },
846            {
847                "class": "signal",
848                "signal": "interfaces_added"
849            },
850            {
851                "class": "signal",
852                "signal": "properties_changed"
853            }
854        ],
855        "actions": [
856            {
857                "name": "set_parameter_from_group_max",
858                "parameter_name": "proc_0_ioring_dvfs_increase_temp",
859                "modifier": {
860                    "operator": "minus",
861                    "value": 10
862                }
863            },
864            {
865                "name": "set_parameter_from_group_max",
866                "parameter_name": "proc_0_ioring_dvfs_decrease_temp",
867                "modifier": {
868                    "operator": "minus",
869                    "value": 13
870                }
871            }
872        ]
873    },
874    {
875        "name": "Set Proc 1 IO Ring DVFS parameter",
876        "groups": [
877            {
878                "name": "proc 1 ioring dvfs temp",
879                "interface": "xyz.openbmc_project.Sensor.Value",
880                "property": { "name": "Value" }
881            }
882        ],
883        "triggers": [
884            {
885                "class": "init",
886                "method": "get_properties"
887            },
888            {
889                "class": "signal",
890                "signal": "interfaces_added"
891            },
892            {
893                "class": "signal",
894                "signal": "properties_changed"
895            }
896        ],
897        "actions": [
898            {
899                "name": "set_parameter_from_group_max",
900                "parameter_name": "proc_1_ioring_dvfs_increase_temp",
901                "modifier": {
902                    "operator": "minus",
903                    "value": 10
904                }
905            },
906            {
907                "name": "set_parameter_from_group_max",
908                "parameter_name": "proc_1_ioring_dvfs_decrease_temp",
909                "modifier": {
910                    "operator": "minus",
911                    "value": 13
912                }
913            }
914        ]
915    },
916    {
917        "name": "Set Proc 2 IO Ring DVFS parameter",
918        "groups": [
919            {
920                "name": "proc 2 ioring dvfs temp",
921                "interface": "xyz.openbmc_project.Sensor.Value",
922                "property": { "name": "Value" }
923            }
924        ],
925        "triggers": [
926            {
927                "class": "init",
928                "method": "get_properties"
929            },
930            {
931                "class": "signal",
932                "signal": "interfaces_added"
933            },
934            {
935                "class": "signal",
936                "signal": "properties_changed"
937            }
938        ],
939        "actions": [
940            {
941                "name": "set_parameter_from_group_max",
942                "parameter_name": "proc_2_ioring_dvfs_increase_temp",
943                "modifier": {
944                    "operator": "minus",
945                    "value": 10
946                }
947            },
948            {
949                "name": "set_parameter_from_group_max",
950                "parameter_name": "proc_2_ioring_dvfs_decrease_temp",
951                "modifier": {
952                    "operator": "minus",
953                    "value": 13
954                }
955            }
956        ]
957    },
958    {
959        "name": "Set Proc 3 IO Ring DVFS parameter",
960        "groups": [
961            {
962                "name": "proc 3 ioring dvfs temp",
963                "interface": "xyz.openbmc_project.Sensor.Value",
964                "property": { "name": "Value" }
965            }
966        ],
967        "triggers": [
968            {
969                "class": "init",
970                "method": "get_properties"
971            },
972            {
973                "class": "signal",
974                "signal": "properties_changed"
975            },
976            {
977                "class": "signal",
978                "signal": "interfaces_added"
979            }
980        ],
981        "actions": [
982            {
983                "name": "set_parameter_from_group_max",
984                "parameter_name": "proc_3_ioring_dvfs_increase_temp",
985                "modifier": {
986                    "operator": "minus",
987                    "value": 10
988                }
989            },
990            {
991                "name": "set_parameter_from_group_max",
992                "parameter_name": "proc_3_ioring_dvfs_decrease_temp",
993                "modifier": {
994                    "operator": "minus",
995                    "value": 13
996                }
997            }
998        ]
999    },
1000    {
1001        "name": "Set Proc 4 IO Ring DVFS parameter",
1002        "groups": [
1003            {
1004                "name": "proc 4 ioring dvfs temp",
1005                "interface": "xyz.openbmc_project.Sensor.Value",
1006                "property": { "name": "Value" }
1007            }
1008        ],
1009        "triggers": [
1010            {
1011                "class": "init",
1012                "method": "get_properties"
1013            },
1014            {
1015                "class": "signal",
1016                "signal": "interfaces_added"
1017            },
1018            {
1019                "class": "signal",
1020                "signal": "properties_changed"
1021            }
1022        ],
1023        "actions": [
1024            {
1025                "name": "set_parameter_from_group_max",
1026                "parameter_name": "proc_4_ioring_dvfs_increase_temp",
1027                "modifier": {
1028                    "operator": "minus",
1029                    "value": 10
1030                }
1031            },
1032            {
1033                "name": "set_parameter_from_group_max",
1034                "parameter_name": "proc_4_ioring_dvfs_decrease_temp",
1035                "modifier": {
1036                    "operator": "minus",
1037                    "value": 13
1038                }
1039            }
1040        ]
1041    },
1042    {
1043        "name": "Set Proc 5 IO Ring DVFS parameter",
1044        "groups": [
1045            {
1046                "name": "proc 5 ioring dvfs temp",
1047                "interface": "xyz.openbmc_project.Sensor.Value",
1048                "property": { "name": "Value" }
1049            }
1050        ],
1051        "triggers": [
1052            {
1053                "class": "init",
1054                "method": "get_properties"
1055            },
1056            {
1057                "class": "signal",
1058                "signal": "interfaces_added"
1059            },
1060            {
1061                "class": "signal",
1062                "signal": "properties_changed"
1063            }
1064        ],
1065        "actions": [
1066            {
1067                "name": "set_parameter_from_group_max",
1068                "parameter_name": "proc_5_ioring_dvfs_increase_temp",
1069                "modifier": {
1070                    "operator": "minus",
1071                    "value": 10
1072                }
1073            },
1074            {
1075                "name": "set_parameter_from_group_max",
1076                "parameter_name": "proc_5_ioring_dvfs_decrease_temp",
1077                "modifier": {
1078                    "operator": "minus",
1079                    "value": 13
1080                }
1081            }
1082        ]
1083    },
1084    {
1085        "name": "Set Proc 6 IO Ring DVFS parameter",
1086        "groups": [
1087            {
1088                "name": "proc 6 ioring dvfs temp",
1089                "interface": "xyz.openbmc_project.Sensor.Value",
1090                "property": { "name": "Value" }
1091            }
1092        ],
1093        "triggers": [
1094            {
1095                "class": "init",
1096                "method": "get_properties"
1097            },
1098            {
1099                "class": "signal",
1100                "signal": "interfaces_added"
1101            },
1102            {
1103                "class": "signal",
1104                "signal": "properties_changed"
1105            }
1106        ],
1107        "actions": [
1108            {
1109                "name": "set_parameter_from_group_max",
1110                "parameter_name": "proc_6_ioring_dvfs_increase_temp",
1111                "modifier": {
1112                    "operator": "minus",
1113                    "value": 10
1114                }
1115            },
1116            {
1117                "name": "set_parameter_from_group_max",
1118                "parameter_name": "proc_6_ioring_dvfs_decrease_temp",
1119                "modifier": {
1120                    "operator": "minus",
1121                    "value": 13
1122                }
1123            }
1124        ]
1125    },
1126    {
1127        "name": "Set Proc 7 IO Ring DVFS parameter",
1128        "groups": [
1129            {
1130                "name": "proc 7 ioring dvfs temp",
1131                "interface": "xyz.openbmc_project.Sensor.Value",
1132                "property": { "name": "Value" }
1133            }
1134        ],
1135        "triggers": [
1136            {
1137                "class": "init",
1138                "method": "get_properties"
1139            },
1140            {
1141                "class": "signal",
1142                "signal": "interfaces_added"
1143            },
1144            {
1145                "class": "signal",
1146                "signal": "properties_changed"
1147            }
1148        ],
1149        "actions": [
1150            {
1151                "name": "set_parameter_from_group_max",
1152                "parameter_name": "proc_7_ioring_dvfs_increase_temp",
1153                "modifier": {
1154                    "operator": "minus",
1155                    "value": 10
1156                }
1157            },
1158            {
1159                "name": "set_parameter_from_group_max",
1160                "parameter_name": "proc_7_ioring_dvfs_decrease_temp",
1161                "modifier": {
1162                    "operator": "minus",
1163                    "value": 13
1164                }
1165            }
1166        ]
1167    },
1168    {
1169        "name": "Set DRAM DVFS parameter",
1170        "groups": [
1171            {
1172                "name": "dram dvfs temp",
1173                "interface": "xyz.openbmc_project.Sensor.Value",
1174                "property": { "name": "Value" }
1175            }
1176        ],
1177        "triggers": [
1178            {
1179                "class": "init",
1180                "method": "get_properties"
1181            },
1182            {
1183                "class": "signal",
1184                "signal": "properties_changed"
1185            },
1186            {
1187                "class": "signal",
1188                "signal": "interfaces_added"
1189            }
1190        ],
1191        "actions": [
1192            {
1193                "name": "set_parameter_from_group_max",
1194                "parameter_name": "dram_dvfs_increase_temp",
1195                "modifier": {
1196                    "operator": "minus",
1197                    "value": 8
1198                }
1199            },
1200            {
1201                "name": "set_parameter_from_group_max",
1202                "parameter_name": "dram_dvfs_decrease_temp",
1203                "modifier": {
1204                    "operator": "minus",
1205                    "value": 11
1206                }
1207            }
1208        ]
1209    },
1210    {
1211        "name": "Set PMIC DVFS parameter",
1212        "groups": [
1213            {
1214                "name": "pmic dvfs temp",
1215                "interface": "xyz.openbmc_project.Sensor.Value",
1216                "property": { "name": "Value" }
1217            }
1218        ],
1219        "triggers": [
1220            {
1221                "class": "init",
1222                "method": "get_properties"
1223            },
1224            {
1225                "class": "signal",
1226                "signal": "properties_changed"
1227            },
1228            {
1229                "class": "signal",
1230                "signal": "interfaces_added"
1231            }
1232        ],
1233        "actions": [
1234            {
1235                "name": "set_parameter_from_group_max",
1236                "parameter_name": "pmic_dvfs_increase_temp",
1237                "modifier": {
1238                    "operator": "minus",
1239                    "value": 10
1240                }
1241            },
1242            {
1243                "name": "set_parameter_from_group_max",
1244                "parameter_name": "pmic_dvfs_decrease_temp",
1245                "modifier": {
1246                    "operator": "minus",
1247                    "value": 13
1248                }
1249            }
1250        ]
1251    },
1252    {
1253        "name": "Set internal memory buffer DVFS parameter",
1254        "groups": [
1255            {
1256                "name": "internal memory buffer dvfs temp",
1257                "interface": "xyz.openbmc_project.Sensor.Value",
1258                "property": { "name": "Value" }
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        "actions": [
1276            {
1277                "name": "set_parameter_from_group_max",
1278                "parameter_name": "intmb_dvfs_increase_temp",
1279                "modifier": {
1280                    "operator": "minus",
1281                    "value": 9
1282                }
1283            },
1284            {
1285                "name": "set_parameter_from_group_max",
1286                "parameter_name": "intmb_dvfs_decrease_temp",
1287                "modifier": {
1288                    "operator": "minus",
1289                    "value": 12
1290                }
1291            }
1292        ]
1293    },
1294    {
1295        "name": "Set DRAM and external memory buffer DVFS parameter",
1296        "groups": [
1297            {
1298                "name": "dram and external memory buffer dvfs temp",
1299                "interface": "xyz.openbmc_project.Sensor.Value",
1300                "property": { "name": "Value" }
1301            }
1302        ],
1303        "triggers": [
1304            {
1305                "class": "init",
1306                "method": "get_properties"
1307            },
1308            {
1309                "class": "signal",
1310                "signal": "properties_changed"
1311            },
1312            {
1313                "class": "signal",
1314                "signal": "interfaces_added"
1315            }
1316        ],
1317        "actions": [
1318            {
1319                "name": "set_parameter_from_group_max",
1320                "parameter_name": "dram_extmb_dvfs_increase_temp",
1321                "modifier": {
1322                    "operator": "minus",
1323                    "value": 10
1324                }
1325            },
1326            {
1327                "name": "set_parameter_from_group_max",
1328                "parameter_name": "dram_extmb_dvfs_decrease_temp",
1329                "modifier": {
1330                    "operator": "minus",
1331                    "value": 13
1332                }
1333            }
1334        ]
1335    },
1336    {
1337        "name": "Set external memory buffer DVFS parameter",
1338        "groups": [
1339            {
1340                "name": "external memory buffer dvfs temp",
1341                "interface": "xyz.openbmc_project.Sensor.Value",
1342                "property": { "name": "Value" }
1343            }
1344        ],
1345        "triggers": [
1346            {
1347                "class": "init",
1348                "method": "get_properties"
1349            },
1350            {
1351                "class": "signal",
1352                "signal": "properties_changed"
1353            },
1354            {
1355                "class": "signal",
1356                "signal": "interfaces_added"
1357            }
1358        ],
1359        "actions": [
1360            {
1361                "name": "set_parameter_from_group_max",
1362                "parameter_name": "extmb_dvfs_increase_temp",
1363                "modifier": {
1364                    "operator": "minus",
1365                    "value": 10
1366                }
1367            },
1368            {
1369                "name": "set_parameter_from_group_max",
1370                "parameter_name": "extmb_dvfs_decrease_temp",
1371                "modifier": {
1372                    "operator": "minus",
1373                    "value": 13
1374                }
1375            }
1376        ]
1377    },
1378    {
1379        // Collect group temperatures each iteration the repeating timer expires
1380        "name": "Fan control timer loop",
1381        "groups": [
1382            {
1383                "name": "proc0 core temps",
1384                "interface": "xyz.openbmc_project.Sensor.Value",
1385                "property": { "name": "Value" }
1386            },
1387            {
1388                "name": "proc1 core temps",
1389                "interface": "xyz.openbmc_project.Sensor.Value",
1390                "property": { "name": "Value" }
1391            },
1392            {
1393                "name": "proc2 core temps",
1394                "interface": "xyz.openbmc_project.Sensor.Value",
1395                "property": { "name": "Value" }
1396            },
1397            {
1398                "name": "proc3 core temps",
1399                "interface": "xyz.openbmc_project.Sensor.Value",
1400                "property": { "name": "Value" }
1401            },
1402            {
1403                "name": "proc4 core temps",
1404                "interface": "xyz.openbmc_project.Sensor.Value",
1405                "property": { "name": "Value" }
1406            },
1407            {
1408                "name": "proc5 core temps",
1409                "interface": "xyz.openbmc_project.Sensor.Value",
1410                "property": { "name": "Value" }
1411            },
1412            {
1413                "name": "proc6 core temps",
1414                "interface": "xyz.openbmc_project.Sensor.Value",
1415                "property": { "name": "Value" }
1416            },
1417            {
1418                "name": "proc7 core temps",
1419                "interface": "xyz.openbmc_project.Sensor.Value",
1420                "property": { "name": "Value" }
1421            },
1422            {
1423                "name": "proc0 ioring temp",
1424                "interface": "xyz.openbmc_project.Sensor.Value",
1425                "property": { "name": "Value" }
1426            },
1427            {
1428                "name": "proc1 ioring temp",
1429                "interface": "xyz.openbmc_project.Sensor.Value",
1430                "property": { "name": "Value" }
1431            },
1432            {
1433                "name": "proc2 ioring temp",
1434                "interface": "xyz.openbmc_project.Sensor.Value",
1435                "property": { "name": "Value" }
1436            },
1437            {
1438                "name": "proc3 ioring temp",
1439                "interface": "xyz.openbmc_project.Sensor.Value",
1440                "property": { "name": "Value" }
1441            },
1442            {
1443                "name": "proc4 ioring temp",
1444                "interface": "xyz.openbmc_project.Sensor.Value",
1445                "property": { "name": "Value" }
1446            },
1447            {
1448                "name": "proc5 ioring temp",
1449                "interface": "xyz.openbmc_project.Sensor.Value",
1450                "property": { "name": "Value" }
1451            },
1452            {
1453                "name": "proc6 ioring temp",
1454                "interface": "xyz.openbmc_project.Sensor.Value",
1455                "property": { "name": "Value" }
1456            },
1457            {
1458                "name": "proc7 ioring temp",
1459                "interface": "xyz.openbmc_project.Sensor.Value",
1460                "property": { "name": "Value" }
1461            },
1462            {
1463                "name": "dram temps",
1464                "interface": "xyz.openbmc_project.Sensor.Value",
1465                "property": { "name": "Value" }
1466            },
1467            {
1468                "name": "pmic temps",
1469                "interface": "xyz.openbmc_project.Sensor.Value",
1470                "property": { "name": "Value" }
1471            },
1472            {
1473                "name": "internal memory buffer temps",
1474                "interface": "xyz.openbmc_project.Sensor.Value",
1475                "property": { "name": "Value" }
1476            },
1477            {
1478                "name": "dram and external memory buffer temps",
1479                "interface": "xyz.openbmc_project.Sensor.Value",
1480                "property": { "name": "Value" }
1481            },
1482            {
1483                "name": "external memory buffer temps",
1484                "interface": "xyz.openbmc_project.Sensor.Value",
1485                "property": { "name": "Value" }
1486            },
1487            {
1488                "name": "vdd vrm temps",
1489                "interface": "xyz.openbmc_project.Sensor.Value",
1490                "property": { "name": "Value" }
1491            },
1492            {
1493                "name": "nvme temps",
1494                "interface": "xyz.openbmc_project.Sensor.Value",
1495                "property": { "name": "Value" }
1496            },
1497            {
1498                "name": "planar temps",
1499                "interface": "xyz.openbmc_project.Sensor.Value",
1500                "property": { "name": "Value" }
1501            },
1502            {
1503                "name": "pcie cable card temps",
1504                "interface": "xyz.openbmc_project.Sensor.Value",
1505                "property": { "name": "Value" }
1506            }
1507        ],
1508        "triggers": [
1509            {
1510                "class": "timer",
1511                "type": "repeating",
1512                "interval": 2000000,
1513                "preload_groups": true
1514            }
1515        ],
1516        "actions": [
1517            {
1518                "name": "set_net_increase_target",
1519                "groups": [
1520                    {
1521                        "name": "proc0 core temps",
1522                        "interface": "xyz.openbmc_project.Sensor.Value",
1523                        "property": { "name": "Value" }
1524                    }
1525                ],
1526                "state_parameter_name": "proc_0_core_dvfs_increase_temp",
1527                "delta": 255
1528            },
1529            {
1530                "name": "set_net_increase_target",
1531                "groups": [
1532                    {
1533                        "name": "proc1 core temps",
1534                        "interface": "xyz.openbmc_project.Sensor.Value",
1535                        "property": { "name": "Value" }
1536                    }
1537                ],
1538                "state_parameter_name": "proc_1_core_dvfs_increase_temp",
1539                "delta": 255
1540            },
1541            {
1542                "name": "set_net_increase_target",
1543                "groups": [
1544                    {
1545                        "name": "proc2 core temps",
1546                        "interface": "xyz.openbmc_project.Sensor.Value",
1547                        "property": { "name": "Value" }
1548                    }
1549                ],
1550                "state_parameter_name": "proc_2_core_dvfs_increase_temp",
1551                "delta": 255
1552            },
1553            {
1554                "name": "set_net_increase_target",
1555                "groups": [
1556                    {
1557                        "name": "proc3 core temps",
1558                        "interface": "xyz.openbmc_project.Sensor.Value",
1559                        "property": { "name": "Value" }
1560                    }
1561                ],
1562                "state_parameter_name": "proc_3_core_dvfs_increase_temp",
1563                "delta": 255
1564            },
1565            {
1566                "name": "set_net_increase_target",
1567                "groups": [
1568                    {
1569                        "name": "proc4 core temps",
1570                        "interface": "xyz.openbmc_project.Sensor.Value",
1571                        "property": { "name": "Value" }
1572                    }
1573                ],
1574                "state_parameter_name": "proc_4_core_dvfs_increase_temp",
1575                "delta": 255
1576            },
1577            {
1578                "name": "set_net_increase_target",
1579                "groups": [
1580                    {
1581                        "name": "proc5 core temps",
1582                        "interface": "xyz.openbmc_project.Sensor.Value",
1583                        "property": { "name": "Value" }
1584                    }
1585                ],
1586                "state_parameter_name": "proc_5_core_dvfs_increase_temp",
1587                "delta": 255
1588            },
1589            {
1590                "name": "set_net_increase_target",
1591                "groups": [
1592                    {
1593                        "name": "proc6 core temps",
1594                        "interface": "xyz.openbmc_project.Sensor.Value",
1595                        "property": { "name": "Value" }
1596                    }
1597                ],
1598                "state_parameter_name": "proc_6_core_dvfs_increase_temp",
1599                "delta": 255
1600            },
1601            {
1602                "name": "set_net_increase_target",
1603                "groups": [
1604                    {
1605                        "name": "proc7 core temps",
1606                        "interface": "xyz.openbmc_project.Sensor.Value",
1607                        "property": { "name": "Value" }
1608                    }
1609                ],
1610                "state_parameter_name": "proc_7_core_dvfs_increase_temp",
1611                "delta": 255
1612            },
1613            {
1614                "name": "set_net_increase_target",
1615                "groups": [
1616                    {
1617                        "name": "proc0 ioring temp",
1618                        "interface": "xyz.openbmc_project.Sensor.Value",
1619                        "property": { "name": "Value" }
1620                    }
1621                ],
1622                "state_parameter_name": "proc_0_ioring_dvfs_increase_temp",
1623                "delta": 255
1624            },
1625            {
1626                "name": "set_net_increase_target",
1627                "groups": [
1628                    {
1629                        "name": "proc1 ioring temp",
1630                        "interface": "xyz.openbmc_project.Sensor.Value",
1631                        "property": { "name": "Value" }
1632                    }
1633                ],
1634                "state_parameter_name": "proc_1_ioring_dvfs_increase_temp",
1635                "delta": 255
1636            },
1637            {
1638                "name": "set_net_increase_target",
1639                "groups": [
1640                    {
1641                        "name": "proc2 ioring temp",
1642                        "interface": "xyz.openbmc_project.Sensor.Value",
1643                        "property": { "name": "Value" }
1644                    }
1645                ],
1646                "state_parameter_name": "proc_2_ioring_dvfs_increase_temp",
1647                "delta": 255
1648            },
1649            {
1650                "name": "set_net_increase_target",
1651                "groups": [
1652                    {
1653                        "name": "proc3 ioring temp",
1654                        "interface": "xyz.openbmc_project.Sensor.Value",
1655                        "property": { "name": "Value" }
1656                    }
1657                ],
1658                "state_parameter_name": "proc_3_ioring_dvfs_increase_temp",
1659                "delta": 255
1660            },
1661            {
1662                "name": "set_net_increase_target",
1663                "groups": [
1664                    {
1665                        "name": "proc4 ioring temp",
1666                        "interface": "xyz.openbmc_project.Sensor.Value",
1667                        "property": { "name": "Value" }
1668                    }
1669                ],
1670                "state_parameter_name": "proc_4_ioring_dvfs_increase_temp",
1671                "delta": 255
1672            },
1673            {
1674                "name": "set_net_increase_target",
1675                "groups": [
1676                    {
1677                        "name": "proc5 ioring temp",
1678                        "interface": "xyz.openbmc_project.Sensor.Value",
1679                        "property": { "name": "Value" }
1680                    }
1681                ],
1682                "state_parameter_name": "proc_5_ioring_dvfs_increase_temp",
1683                "delta": 255
1684            },
1685            {
1686                "name": "set_net_increase_target",
1687                "groups": [
1688                    {
1689                        "name": "proc6 ioring temp",
1690                        "interface": "xyz.openbmc_project.Sensor.Value",
1691                        "property": { "name": "Value" }
1692                    }
1693                ],
1694                "state_parameter_name": "proc_6_ioring_dvfs_increase_temp",
1695                "delta": 255
1696            },
1697            {
1698                "name": "set_net_increase_target",
1699                "groups": [
1700                    {
1701                        "name": "proc7 ioring temp",
1702                        "interface": "xyz.openbmc_project.Sensor.Value",
1703                        "property": { "name": "Value" }
1704                    }
1705                ],
1706                "state_parameter_name": "proc_7_ioring_dvfs_increase_temp",
1707                "delta": 255
1708            },
1709            {
1710                "name": "set_net_increase_target",
1711                "groups": [
1712                    {
1713                        "name": "dram temps",
1714                        "interface": "xyz.openbmc_project.Sensor.Value",
1715                        "property": { "name": "Value" }
1716                    }
1717                ],
1718                "state_parameter_name": "dram_dvfs_increase_temp",
1719                "delta": 175
1720            },
1721            {
1722                "name": "set_net_increase_target",
1723                "groups": [
1724                    {
1725                        "name": "pmic temps",
1726                        "interface": "xyz.openbmc_project.Sensor.Value",
1727                        "property": { "name": "Value" }
1728                    }
1729                ],
1730                "state_parameter_name": "pmic_dvfs_increase_temp",
1731                "delta": 200
1732            },
1733            {
1734                "name": "set_net_increase_target",
1735                "groups": [
1736                    {
1737                        "name": "internal memory buffer temps",
1738                        "interface": "xyz.openbmc_project.Sensor.Value",
1739                        "property": { "name": "Value" }
1740                    }
1741                ],
1742                "state_parameter_name": "intmb_dvfs_increase_temp",
1743                "delta": 150
1744            },
1745            {
1746                "name": "set_net_increase_target",
1747                "groups": [
1748                    {
1749                        "name": "dram and external memory buffer temps",
1750                        "interface": "xyz.openbmc_project.Sensor.Value",
1751                        "property": { "name": "Value" }
1752                    }
1753                ],
1754                "state_parameter_name": "dram_extmb_dvfs_increase_temp",
1755                "delta": 200
1756            },
1757            {
1758                "name": "set_net_increase_target",
1759                "groups": [
1760                    {
1761                        "name": "external memory buffer temps",
1762                        "interface": "xyz.openbmc_project.Sensor.Value",
1763                        "property": { "name": "Value" }
1764                    }
1765                ],
1766                "state_parameter_name": "extmb_dvfs_increase_temp",
1767                "delta": 200
1768            },
1769            {
1770                "name": "set_net_increase_target",
1771                "groups": [
1772                    {
1773                        "name": "vdd vrm temps",
1774                        "interface": "xyz.openbmc_project.Sensor.Value",
1775                        "property": { "name": "Value" }
1776                    }
1777                ],
1778                "state": 85.0,
1779                "delta": 255
1780            },
1781            {
1782                "name": "set_net_increase_target",
1783                "groups": [
1784                    {
1785                        "name": "nvme temps",
1786                        "interface": "xyz.openbmc_project.Sensor.Value",
1787                        "property": { "name": "Value" }
1788                    }
1789                ],
1790                "state": 58.0,
1791                "delta": 200
1792            },
1793            {
1794                "name": "set_net_increase_target",
1795                "groups": [
1796                    {
1797                        "name": "planar temps",
1798                        "interface": "xyz.openbmc_project.Sensor.Value",
1799                        "property": { "name": "Value" }
1800                    }
1801                ],
1802                "state": 50.0,
1803                "delta": 255
1804            },
1805            {
1806                "name": "set_net_increase_target",
1807                "groups": [
1808                    {
1809                        "name": "pcie cable card temps",
1810                        "interface": "xyz.openbmc_project.Sensor.Value",
1811                        "property": { "name": "Value" }
1812                    }
1813                ],
1814                "state": 70.0,
1815                "delta": 255
1816            },
1817            {
1818                "name": "set_net_decrease_target",
1819                "groups": [
1820                    {
1821                        "name": "proc0 core temps",
1822                        "interface": "xyz.openbmc_project.Sensor.Value",
1823                        "property": { "name": "Value" }
1824                    }
1825                ],
1826                "state_parameter_name": "proc_0_core_dvfs_decrease_temp",
1827                "delta": 50
1828            },
1829            {
1830                "name": "set_net_decrease_target",
1831                "groups": [
1832                    {
1833                        "name": "proc1 core temps",
1834                        "interface": "xyz.openbmc_project.Sensor.Value",
1835                        "property": { "name": "Value" }
1836                    }
1837                ],
1838                "state_parameter_name": "proc_1_core_dvfs_decrease_temp",
1839                "delta": 50
1840            },
1841            {
1842                "name": "set_net_decrease_target",
1843                "groups": [
1844                    {
1845                        "name": "proc2 core temps",
1846                        "interface": "xyz.openbmc_project.Sensor.Value",
1847                        "property": { "name": "Value" }
1848                    }
1849                ],
1850                "state_parameter_name": "proc_2_core_dvfs_decrease_temp",
1851                "delta": 50
1852            },
1853            {
1854                "name": "set_net_decrease_target",
1855                "groups": [
1856                    {
1857                        "name": "proc3 core temps",
1858                        "interface": "xyz.openbmc_project.Sensor.Value",
1859                        "property": { "name": "Value" }
1860                    }
1861                ],
1862                "state_parameter_name": "proc_3_core_dvfs_decrease_temp",
1863                "delta": 50
1864            },
1865            {
1866                "name": "set_net_decrease_target",
1867                "groups": [
1868                    {
1869                        "name": "proc4 core temps",
1870                        "interface": "xyz.openbmc_project.Sensor.Value",
1871                        "property": { "name": "Value" }
1872                    }
1873                ],
1874                "state_parameter_name": "proc_4_core_dvfs_decrease_temp",
1875                "delta": 50
1876            },
1877            {
1878                "name": "set_net_decrease_target",
1879                "groups": [
1880                    {
1881                        "name": "proc5 core temps",
1882                        "interface": "xyz.openbmc_project.Sensor.Value",
1883                        "property": { "name": "Value" }
1884                    }
1885                ],
1886                "state_parameter_name": "proc_5_core_dvfs_decrease_temp",
1887                "delta": 50
1888            },
1889            {
1890                "name": "set_net_decrease_target",
1891                "groups": [
1892                    {
1893                        "name": "proc6 core temps",
1894                        "interface": "xyz.openbmc_project.Sensor.Value",
1895                        "property": { "name": "Value" }
1896                    }
1897                ],
1898                "state_parameter_name": "proc_6_core_dvfs_decrease_temp",
1899                "delta": 50
1900            },
1901            {
1902                "name": "set_net_decrease_target",
1903                "groups": [
1904                    {
1905                        "name": "proc7 core temps",
1906                        "interface": "xyz.openbmc_project.Sensor.Value",
1907                        "property": { "name": "Value" }
1908                    }
1909                ],
1910                "state_parameter_name": "proc_7_core_dvfs_decrease_temp",
1911                "delta": 50
1912            },
1913            {
1914                "name": "set_net_decrease_target",
1915                "groups": [
1916                    {
1917                        "name": "proc0 ioring temp",
1918                        "interface": "xyz.openbmc_project.Sensor.Value",
1919                        "property": { "name": "Value" }
1920                    }
1921                ],
1922                "state_parameter_name": "proc_0_ioring_dvfs_decrease_temp",
1923                "delta": 50
1924            },
1925            {
1926                "name": "set_net_decrease_target",
1927                "groups": [
1928                    {
1929                        "name": "proc1 ioring temp",
1930                        "interface": "xyz.openbmc_project.Sensor.Value",
1931                        "property": { "name": "Value" }
1932                    }
1933                ],
1934                "state_parameter_name": "proc_1_ioring_dvfs_decrease_temp",
1935                "delta": 50
1936            },
1937            {
1938                "name": "set_net_decrease_target",
1939                "groups": [
1940                    {
1941                        "name": "proc2 ioring temp",
1942                        "interface": "xyz.openbmc_project.Sensor.Value",
1943                        "property": { "name": "Value" }
1944                    }
1945                ],
1946                "state_parameter_name": "proc_2_ioring_dvfs_decrease_temp",
1947                "delta": 50
1948            },
1949            {
1950                "name": "set_net_decrease_target",
1951                "groups": [
1952                    {
1953                        "name": "proc3 ioring temp",
1954                        "interface": "xyz.openbmc_project.Sensor.Value",
1955                        "property": { "name": "Value" }
1956                    }
1957                ],
1958                "state_parameter_name": "proc_3_ioring_dvfs_decrease_temp",
1959                "delta": 50
1960            },
1961            {
1962                "name": "set_net_decrease_target",
1963                "groups": [
1964                    {
1965                        "name": "proc4 ioring temp",
1966                        "interface": "xyz.openbmc_project.Sensor.Value",
1967                        "property": { "name": "Value" }
1968                    }
1969                ],
1970                "state_parameter_name": "proc_4_ioring_dvfs_decrease_temp",
1971                "delta": 50
1972            },
1973            {
1974                "name": "set_net_decrease_target",
1975                "groups": [
1976                    {
1977                        "name": "proc5 ioring temp",
1978                        "interface": "xyz.openbmc_project.Sensor.Value",
1979                        "property": { "name": "Value" }
1980                    }
1981                ],
1982                "state_parameter_name": "proc_5_ioring_dvfs_decrease_temp",
1983                "delta": 50
1984            },
1985            {
1986                "name": "set_net_decrease_target",
1987                "groups": [
1988                    {
1989                        "name": "proc6 ioring temp",
1990                        "interface": "xyz.openbmc_project.Sensor.Value",
1991                        "property": { "name": "Value" }
1992                    }
1993                ],
1994                "state_parameter_name": "proc_6_ioring_dvfs_decrease_temp",
1995                "delta": 50
1996            },
1997            {
1998                "name": "set_net_decrease_target",
1999                "groups": [
2000                    {
2001                        "name": "proc7 ioring temp",
2002                        "interface": "xyz.openbmc_project.Sensor.Value",
2003                        "property": { "name": "Value" }
2004                    }
2005                ],
2006                "state_parameter_name": "proc_7_ioring_dvfs_decrease_temp",
2007                "delta": 50
2008            },
2009            {
2010                "name": "set_net_decrease_target",
2011                "groups": [
2012                    {
2013                        "name": "dram temps",
2014                        "interface": "xyz.openbmc_project.Sensor.Value",
2015                        "property": { "name": "Value" }
2016                    }
2017                ],
2018                "state_parameter_name": "dram_dvfs_decrease_temp",
2019                "delta": 40
2020            },
2021            {
2022                "name": "set_net_decrease_target",
2023                "groups": [
2024                    {
2025                        "name": "pmic temps",
2026                        "interface": "xyz.openbmc_project.Sensor.Value",
2027                        "property": { "name": "Value" }
2028                    }
2029                ],
2030                "state_parameter_name": "pmic_dvfs_decrease_temp",
2031                "delta": 40
2032            },
2033            {
2034                "name": "set_net_decrease_target",
2035                "groups": [
2036                    {
2037                        "name": "internal memory buffer temps",
2038                        "interface": "xyz.openbmc_project.Sensor.Value",
2039                        "property": { "name": "Value" }
2040                    }
2041                ],
2042                "state_parameter_name": "intmb_dvfs_decrease_temp",
2043                "delta": 40
2044            },
2045            {
2046                "name": "set_net_decrease_target",
2047                "groups": [
2048                    {
2049                        "name": "dram and external memory buffer temps",
2050                        "interface": "xyz.openbmc_project.Sensor.Value",
2051                        "property": { "name": "Value" }
2052                    }
2053                ],
2054                "state_parameter_name": "dram_extmb_dvfs_decrease_temp",
2055                "delta": 40
2056            },
2057            {
2058                "name": "set_net_decrease_target",
2059                "groups": [
2060                    {
2061                        "name": "external memory buffer temps",
2062                        "interface": "xyz.openbmc_project.Sensor.Value",
2063                        "property": { "name": "Value" }
2064                    }
2065                ],
2066                "state_parameter_name": "extmb_dvfs_decrease_temp",
2067                "delta": 40
2068            },
2069            {
2070                "name": "set_net_decrease_target",
2071                "groups": [
2072                    {
2073                        "name": "vdd vrm temps",
2074                        "interface": "xyz.openbmc_project.Sensor.Value",
2075                        "property": { "name": "Value" }
2076                    }
2077                ],
2078                "state": 80.0,
2079                "delta": 30
2080            },
2081            {
2082                "name": "set_net_decrease_target",
2083                "groups": [
2084                    {
2085                        "name": "nvme temps",
2086                        "interface": "xyz.openbmc_project.Sensor.Value",
2087                        "property": { "name": "Value" }
2088                    }
2089                ],
2090                "state": 55.0,
2091                "delta": 40
2092            },
2093            {
2094                "name": "set_net_decrease_target",
2095                "groups": [
2096                    {
2097                        "name": "planar temps",
2098                        "interface": "xyz.openbmc_project.Sensor.Value",
2099                        "property": { "name": "Value" }
2100                    }
2101                ],
2102                "state": 48.0,
2103                "delta": 80
2104            },
2105            {
2106                "name": "set_net_decrease_target",
2107                "groups": [
2108                    {
2109                        "name": "pcie cable card temps",
2110                        "interface": "xyz.openbmc_project.Sensor.Value",
2111                        "property": { "name": "Value" }
2112                    }
2113                ],
2114                "state": 65.0,
2115                "delta": 80
2116            }
2117        ]
2118    },
2119    {
2120        // Remove NVMe temperature objects from cache when they are removed from
2121        // dbus. There's no need to react to their removal.
2122        "name": "remove nvme objects",
2123        "groups": [
2124            {
2125                "name": "nvme temps",
2126                "interface": "xyz.openbmc_project.Sensor.Value",
2127                "property": { "name": "Value" }
2128            },
2129            {
2130                "name": "nvme temps",
2131                "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
2132                "property": { "name": "Functional" }
2133            }
2134        ],
2135        "triggers": [
2136            {
2137                "class": "signal",
2138                "signal": "interfaces_removed"
2139            }
2140        ]
2141    },
2142    {
2143        "name": "set pcie floor index",
2144        "groups": [
2145            {
2146                "name": "pcie slots",
2147                "interface": "xyz.openbmc_project.State.Decorator.PowerState",
2148                "property": {
2149                    "name": "PowerState"
2150                }
2151            },
2152            {
2153                "name": "pcie cards",
2154                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
2155                "property": {
2156                    "name": "Function0DeviceId"
2157                }
2158            },
2159            {
2160                "name": "pcie cards",
2161                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
2162                "property": {
2163                    "name": "Function0VendorId"
2164                }
2165            },
2166            {
2167                "name": "pcie cards",
2168                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
2169                "property": {
2170                    "name": "Function0SubsystemId"
2171                }
2172            },
2173            {
2174                "name": "pcie cards",
2175                "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
2176                "property": {
2177                    "name": "Function0SubsystemVendorId"
2178                }
2179            }
2180        ],
2181        "triggers": [
2182            {
2183                "class": "init",
2184                "method": "get_properties"
2185            },
2186            {
2187                "class": "signal",
2188                "signal": "properties_changed"
2189            },
2190            {
2191                "class": "signal",
2192                "signal": "interfaces_added"
2193            }
2194        ],
2195        "actions": [
2196            {
2197                "name": "pcie_card_floors",
2198                "use_config_specific_files": true,
2199                "settle_time": 2
2200            }
2201        ]
2202    },
2203    {
2204        "name": "Set altitude offset parameter",
2205        "groups": [
2206            {
2207                "name": "altitude",
2208                "interface": "xyz.openbmc_project.Sensor.Value",
2209                "property": { "name": "Value" }
2210            }
2211        ],
2212        "triggers": [
2213            {
2214                "class": "init",
2215                "method": "get_properties"
2216            },
2217            {
2218                "class": "signal",
2219                "signal": "interfaces_added"
2220            },
2221            {
2222                // Refresh altitude every 24hrs
2223                "class": "timer",
2224                "type": "repeating",
2225                "interval": 86400000000,
2226                "preload_groups": true
2227            }
2228        ],
2229        "actions": [
2230            {
2231                "name": "set_parameter_from_group_max",
2232                "parameter_name": "ambient_20_altitude_offset",
2233                "modifier": {
2234                    "operator": "less_than",
2235                    "default_value": 1500,
2236                    "value": [
2237                        { "arg_value": 500, "parameter_value": 0 },
2238                        { "arg_value": 1000, "parameter_value": 375 },
2239                        { "arg_value": 1500, "parameter_value": 550 },
2240                        { "arg_value": 2000, "parameter_value": 775 },
2241                        { "arg_value": 2500, "parameter_value": 1000 },
2242                        { "arg_value": 3050, "parameter_value": 1275 }
2243                    ]
2244                }
2245            },
2246            {
2247                "name": "set_parameter_from_group_max",
2248                "parameter_name": "ambient_25_altitude_offset",
2249                "modifier": {
2250                    "operator": "less_than",
2251                    "default_value": 2000,
2252                    "value": [
2253                        { "arg_value": 500, "parameter_value": 0 },
2254                        { "arg_value": 1000, "parameter_value": 450 },
2255                        { "arg_value": 1500, "parameter_value": 700 },
2256                        { "arg_value": 2000, "parameter_value": 975 },
2257                        { "arg_value": 2500, "parameter_value": 1275 },
2258                        { "arg_value": 3050, "parameter_value": 1625 }
2259                    ]
2260                }
2261            },
2262            {
2263                "name": "set_parameter_from_group_max",
2264                "parameter_name": "ambient_30_altitude_offset",
2265                "modifier": {
2266                    "operator": "less_than",
2267                    "default_value": 2500,
2268                    "value": [
2269                        { "arg_value": 500, "parameter_value": 0 },
2270                        { "arg_value": 1000, "parameter_value": 600 },
2271                        { "arg_value": 1500, "parameter_value": 900 },
2272                        { "arg_value": 2000, "parameter_value": 1275 },
2273                        { "arg_value": 2500, "parameter_value": 1650 },
2274                        { "arg_value": 3050, "parameter_value": 2100 }
2275                    ]
2276                }
2277            },
2278            {
2279                "name": "set_parameter_from_group_max",
2280                "parameter_name": "ambient_35_altitude_offset",
2281                "modifier": {
2282                    "operator": "less_than",
2283                    "default_value": 3000,
2284                    "value": [
2285                        { "arg_value": 500, "parameter_value": 0 },
2286                        { "arg_value": 1000, "parameter_value": 750 },
2287                        { "arg_value": 1500, "parameter_value": 1175 },
2288                        { "arg_value": 2000, "parameter_value": 1625 },
2289                        { "arg_value": 2500, "parameter_value": 2125 },
2290                        { "arg_value": 3050, "parameter_value": 2725 }
2291                    ]
2292                }
2293            },
2294            {
2295                "name": "set_parameter_from_group_max",
2296                "parameter_name": "ambient_40_altitude_offset",
2297                "modifier": {
2298                    "operator": "less_than",
2299                    "default_value": 3500,
2300                    "value": [
2301                        { "arg_value": 500, "parameter_value": 0 },
2302                        { "arg_value": 1000, "parameter_value": 975 },
2303                        { "arg_value": 1500, "parameter_value": 1500 },
2304                        { "arg_value": 2000, "parameter_value": 2100 },
2305                        { "arg_value": 2500, "parameter_value": 2750 },
2306                        { "arg_value": 3050, "parameter_value": 3500 }
2307                    ]
2308                }
2309            }
2310        ]
2311    },
2312    {
2313        "name": "Fan floors",
2314        "groups": [
2315            {
2316                "name": "ambient temp",
2317                "interface": "xyz.openbmc_project.Sensor.Value",
2318                "property": { "name": "Value" }
2319            }
2320        ],
2321        "triggers": [
2322            {
2323                "class": "init",
2324                "method": "get_properties"
2325            },
2326            {
2327                "class": "signal",
2328                "signal": "properties_changed"
2329            },
2330            {
2331                "class": "signal",
2332                "signal": "interfaces_added"
2333            },
2334            {
2335                "class": "parameter",
2336                "parameter": "pcie_floor_index"
2337            },
2338            {
2339                "class": "parameter",
2340                "parameter": "ambient_20_altitude_offset"
2341            },
2342            {
2343                "class": "parameter",
2344                "parameter": "ambient_25_altitude_offset"
2345            },
2346            {
2347                "class": "parameter",
2348                "parameter": "ambient_30_altitude_offset"
2349            },
2350            {
2351                "class": "parameter",
2352                "parameter": "ambient_35_altitude_offset"
2353            },
2354            {
2355                "class": "parameter",
2356                "parameter": "ambient_40_altitude_offset"
2357            }
2358        ],
2359        "actions": [
2360            {
2361                "name": "mapped_floor",
2362                "key_group": "ambient temp",
2363                "fan_floors": [
2364                    {
2365                        // Entry valid for temps < 20
2366                        "key": 20,
2367                        "default_floor": 3800,
2368                        "floor_offset_parameter": "ambient_20_altitude_offset",
2369                        "floors": [
2370                            {
2371                                "parameter": "pcie_floor_index",
2372                                "floors": [
2373                                    { "value": 1, "floor": 3800 },
2374                                    { "value": 2, "floor": 4200 },
2375                                    { "value": 3, "floor": 4600 }
2376                                ]
2377                            }
2378                        ]
2379                    },
2380                    {
2381                        // Entry valid for temps < 25
2382                        "key": 25,
2383                        "default_floor": 4400,
2384                        "floor_offset_parameter": "ambient_25_altitude_offset",
2385                        "floors": [
2386                            {
2387                                "parameter": "pcie_floor_index",
2388                                "floors": [
2389                                    { "value": 1, "floor": 4400 },
2390                                    { "value": 2, "floor": 4800 },
2391                                    { "value": 3, "floor": 5400 }
2392                                ]
2393                            }
2394                        ]
2395                    },
2396                    {
2397                        // Entry valid for temps < 30
2398                        "key": 30,
2399                        "default_floor": 5000,
2400                        "floor_offset_parameter": "ambient_30_altitude_offset",
2401                        "floors": [
2402                            {
2403                                "parameter": "pcie_floor_index",
2404                                "floors": [
2405                                    { "value": 1, "floor": 5000 },
2406                                    { "value": 2, "floor": 5600 },
2407                                    { "value": 3, "floor": 6500 }
2408                                ]
2409                            }
2410                        ]
2411                    },
2412                    {
2413                        // Entry valid for temps < 35
2414                        "key": 35,
2415                        "default_floor": 5800,
2416                        "floor_offset_parameter": "ambient_35_altitude_offset",
2417                        "floors": [
2418                            {
2419                                "parameter": "pcie_floor_index",
2420                                "floors": [
2421                                    { "value": 1, "floor": 5800 },
2422                                    { "value": 2, "floor": 6700 },
2423                                    { "value": 3, "floor": 7700 }
2424                                ]
2425                            }
2426                        ]
2427                    },
2428                    {
2429                        // Entry valid for temps < 40
2430                        "key": 40,
2431                        "default_floor": 6900,
2432                        "floor_offset_parameter": "ambient_40_altitude_offset",
2433                        "floors": [
2434                            {
2435                                "parameter": "pcie_floor_index",
2436                                "floors": [
2437                                    { "value": 1, "floor": 6900 },
2438                                    { "value": 2, "floor": 7900 },
2439                                    { "value": 3, "floor": 9200 }
2440                                ]
2441                            }
2442                        ]
2443                    }
2444                ]
2445            }
2446        ]
2447    }
2448]
2449