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