blob: d2f4c11a145bdce12126f597a3888a41d1b34a91 [file] [log] [blame]
Matthew Barthf0f213c2021-10-19 13:32:31 -05001[
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,
Matthew Bartheff46602022-02-11 14:10:58 -060027 "target": 18000
Matthew Barthf0f213c2021-10-19 13:32:31 -050028 }
29 ]
Matthew Barth991020b2021-10-19 13:34:33 -050030 },
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 "name": "fan4 rotor inventory",
57 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
58 "property": { "name": "Functional" }
59 },
60 {
61 "name": "fan5 rotor inventory",
62 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
63 "property": { "name": "Functional" }
64 }
65 ],
66 "triggers": [
67 {
68 "class": "init",
69 "method": "get_properties"
70 },
71 {
72 "class": "signal",
73 "signal": "properties_changed"
74 }
75 ],
76 "actions": [
77 {
78 "name": "count_state_before_target",
79 "count": 1,
80 "state": false,
Matthew Bartheff46602022-02-11 14:10:58 -060081 "target": 18000
Matthew Barth991020b2021-10-19 13:34:33 -050082 }
83 ]
Matthew Barth09b09e52021-10-28 15:29:13 -050084 },
85 {
86 // Hold fans at the given target when any critical service
87 // is not running for 5 seconds.
88 "name": "service(s) missing",
89 "groups": [
90 {
Matthew Barthf3a6d452021-11-23 14:41:43 -060091 "name": "fan inventory",
92 "interface": "xyz.openbmc_project.Inventory.Item",
93 "property": { "name": "Present" }
94 },
95 {
Matthew Barth09b09e52021-10-28 15:29:13 -050096 "name": "occ objects",
97 "interface": "org.open_power.OCC.Status",
98 "property": { "name": "OccActive" }
Matthew Barth86a484f2022-01-14 13:06:50 -060099 },
100 {
101 "name": "nvme temps",
102 "interface": "xyz.openbmc_project.Sensor.Value",
103 "property": { "name": "Value" }
104 },
105 {
106 "name": "planar temps",
107 "interface": "xyz.openbmc_project.Sensor.Value",
108 "property": { "name": "Value" }
109 },
110 {
111 "name": "flett temps",
112 "interface": "xyz.openbmc_project.Sensor.Value",
113 "property": { "name": "Value" }
114 },
115 {
Matthew Barth48b74802022-01-14 15:25:24 -0600116 "name": "pcie cable card temps",
Matthew Barth86a484f2022-01-14 13:06:50 -0600117 "interface": "xyz.openbmc_project.Sensor.Value",
118 "property": { "name": "Value" }
119 },
120 {
121 "name": "ambient temp",
122 "interface": "xyz.openbmc_project.Sensor.Value",
123 "property": { "name": "Value" }
124 },
125 {
126 "name": "altitude",
127 "interface": "xyz.openbmc_project.Sensor.Value",
128 "property": { "name": "Value" }
Matthew Barth09b09e52021-10-28 15:29:13 -0500129 }
130 ],
131 "triggers": [
132 {
133 "class": "init",
134 "method": "name_has_owner"
135 },
136 {
137 "class": "signal",
138 "signal": "name_owner_changed"
139 }
140 ],
141 "actions": [
142 {
143 "name": "call_actions_based_on_timer",
144 "timer": {
145 "interval": 5000000,
146 "type": "oneshot"
147 },
148 "actions": [
149 {
150 "name": "set_target_on_missing_owner",
151 "groups": [
152 {
153 "name": "fan inventory",
154 "interface": "xyz.openbmc_project.Inventory.Item",
155 "property": { "name": "Present" }
156 },
157 {
158 "name": "occ objects",
159 "interface": "org.open_power.OCC.Status",
160 "property": { "name": "OccActive" }
Matthew Barth86a484f2022-01-14 13:06:50 -0600161 },
162 {
163 "name": "nvme temps",
164 "interface": "xyz.openbmc_project.Sensor.Value",
165 "property": { "name": "Value" }
166 },
167 {
168 "name": "planar temps",
169 "interface": "xyz.openbmc_project.Sensor.Value",
170 "property": { "name": "Value" }
171 },
172 {
173 "name": "flett temps",
174 "interface": "xyz.openbmc_project.Sensor.Value",
175 "property": { "name": "Value" }
176 },
177 {
Matthew Barth48b74802022-01-14 15:25:24 -0600178 "name": "pcie cable card temps",
Matthew Barth86a484f2022-01-14 13:06:50 -0600179 "interface": "xyz.openbmc_project.Sensor.Value",
180 "property": { "name": "Value" }
181 },
182 {
183 "name": "ambient temp",
184 "interface": "xyz.openbmc_project.Sensor.Value",
185 "property": { "name": "Value" }
Matthew Barth09b09e52021-10-28 15:29:13 -0500186 }
187 ],
Matthew Bartheff46602022-02-11 14:10:58 -0600188 "target": 18000
Matthew Barth09b09e52021-10-28 15:29:13 -0500189 }
190 ]
191 }
192 ]
Matt Spinler5934f092021-11-03 14:30:28 -0500193 },
194 {
195 // Set a fan floor if an OCC isn't active
196 "name": "Non-active OCCs",
197 "groups": [
198 {
199 "name": "occ objects",
200 "interface": "org.open_power.OCC.Status",
201 "property": {
202 "name": "OccActive"
203 }
204 }
205 ],
206 "triggers": [
207 {
208 "class": "signal",
209 "signal": "properties_changed"
210 },
211 {
212 "class": "signal",
213 "signal": "interfaces_added"
214 },
215 {
216 "class": "init",
217 "method": "get_properties"
218 }
219 ],
220 "actions": [
221 {
222 "name": "count_state_floor",
223 "count": 1,
224 "state": false,
Matthew Bartheff46602022-02-11 14:10:58 -0600225 "floor": 18000
Matt Spinler5934f092021-11-03 14:30:28 -0500226 }
227 ]
Matt Spinler323694a2021-11-11 16:03:18 -0600228 },
229 {
Matthew Barth8d6cf062022-01-13 14:02:20 -0600230 // Set a raised fan floor when any temperature or altitude sensor is
231 // nonfunctional
Matthew Barth4172d8d2022-01-13 11:31:54 -0600232 "name": "Nonfunctional temperature sensors",
Matthew Barth39925fb2022-01-12 10:45:59 -0600233 "groups": [
234 {
235 "name": "proc0 core temps",
236 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
237 "property": { "name": "Functional" }
238 },
239 {
240 "name": "proc1 core temps",
241 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
242 "property": { "name": "Functional" }
243 },
244 {
245 "name": "proc2 core temps",
246 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
247 "property": { "name": "Functional" }
248 },
249 {
250 "name": "proc3 core temps",
251 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
252 "property": { "name": "Functional" }
253 },
254 {
255 "name": "proc0 ioring temp",
256 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
257 "property": { "name": "Functional" }
258 },
259 {
260 "name": "proc1 ioring temp",
261 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
262 "property": { "name": "Functional" }
263 },
264 {
265 "name": "proc2 ioring temp",
266 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
267 "property": { "name": "Functional" }
268 },
269 {
270 "name": "proc3 ioring temp",
271 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
272 "property": { "name": "Functional" }
273 },
274 {
275 "name": "dram temps",
276 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
277 "property": { "name": "Functional" }
278 },
279 {
280 "name": "pmic temps",
281 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
282 "property": { "name": "Functional" }
283 },
284 {
285 "name": "internal memory buffer temps",
286 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
287 "property": { "name": "Functional" }
288 },
289 {
290 "name": "dram and external memory buffer temps",
291 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
292 "property": { "name": "Functional" }
293 },
294 {
295 "name": "external memory buffer temps",
296 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
297 "property": { "name": "Functional" }
298 },
299 {
300 "name": "vdd vrm temps",
301 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
302 "property": { "name": "Functional" }
Matthew Barth4172d8d2022-01-13 11:31:54 -0600303 },
304 {
305 "name": "nvme temps",
306 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
307 "property": { "name": "Functional" }
308 },
309 {
310 "name": "planar temps",
311 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
312 "property": { "name": "Functional" }
313 },
314 {
315 "name": "flett temps",
316 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
317 "property": { "name": "Functional" }
318 },
319 {
Matthew Barth48b74802022-01-14 15:25:24 -0600320 "name": "pcie cable card temps",
Matthew Barth4172d8d2022-01-13 11:31:54 -0600321 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
322 "property": { "name": "Functional" }
Matthew Barth8d6cf062022-01-13 14:02:20 -0600323 },
324 {
325 "name": "ambient temp",
326 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
327 "property": { "name": "Functional" }
328 },
329 {
330 "name": "altitude",
331 "interface": "xyz.openbmc_project.State.Decorator.OperationalStatus",
332 "property": { "name": "Functional" }
Matthew Barth39925fb2022-01-12 10:45:59 -0600333 }
334 ],
335 "triggers": [
336 {
337 "class": "signal",
338 "signal": "properties_changed"
339 },
340 {
341 "class": "signal",
342 "signal": "interfaces_added"
343 },
344 {
345 "class": "init",
346 "method": "get_properties"
347 }
348 ],
349 "actions": [
350 {
351 "name": "count_state_floor",
352 "count": 1,
353 "state": false,
Matthew Bartheff46602022-02-11 14:10:58 -0600354 "floor": 18000
Matthew Barth39925fb2022-01-12 10:45:59 -0600355 }
356 ]
357 },
358 {
Matt Spinler323694a2021-11-11 16:03:18 -0600359 "name": "Set Proc 0 Core DVFS parameter",
360 "groups": [
361 {
362 "name": "proc 0 core dvfs temp",
363 "interface": "xyz.openbmc_project.Sensor.Value",
364 "property": { "name": "Value" }
365 }
366 ],
367 "triggers": [
368 {
369 "class": "init",
370 "method": "get_properties"
371 },
372 {
373 "class": "signal",
374 "signal": "interfaces_added"
375 },
376 {
377 "class": "signal",
378 "signal": "properties_changed"
379 }
380 ],
381 "actions": [
382 {
383 "name": "set_parameter_from_group_max",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600384 "parameter_name": "proc_0_core_dvfs_increase_temp",
Matt Spinler323694a2021-11-11 16:03:18 -0600385 "modifier": {
386 "operator": "minus",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600387 "value": 10
Matt Spinler323694a2021-11-11 16:03:18 -0600388 }
Matthew Barthdcf39732021-12-01 21:58:59 -0600389 },
390 {
391 "name": "set_parameter_from_group_max",
392 "parameter_name": "proc_0_core_dvfs_decrease_temp",
393 "modifier": {
394 "operator": "minus",
395 "value": 13
396 }
Matt Spinler323694a2021-11-11 16:03:18 -0600397 }
398 ]
399 },
400 {
401 "name": "Set Proc 1 Core DVFS parameter",
402 "groups": [
403 {
404 "name": "proc 1 core dvfs temp",
405 "interface": "xyz.openbmc_project.Sensor.Value",
406 "property": { "name": "Value" }
407 }
408 ],
409 "triggers": [
410 {
411 "class": "init",
412 "method": "get_properties"
413 },
414 {
415 "class": "signal",
416 "signal": "interfaces_added"
417 },
418 {
419 "class": "signal",
420 "signal": "properties_changed"
421 }
422 ],
423 "actions": [
424 {
425 "name": "set_parameter_from_group_max",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600426 "parameter_name": "proc_1_core_dvfs_increase_temp",
Matt Spinler323694a2021-11-11 16:03:18 -0600427 "modifier": {
428 "operator": "minus",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600429 "value": 10
Matt Spinler323694a2021-11-11 16:03:18 -0600430 }
Matthew Barthdcf39732021-12-01 21:58:59 -0600431 },
432 {
433 "name": "set_parameter_from_group_max",
434 "parameter_name": "proc_1_core_dvfs_decrease_temp",
435 "modifier": {
436 "operator": "minus",
437 "value": 13
438 }
Matt Spinler323694a2021-11-11 16:03:18 -0600439 }
440 ]
441 },
442 {
443 "name": "Set Proc 2 Core DVFS parameter",
444 "groups": [
445 {
446 "name": "proc 2 core dvfs temp",
447 "interface": "xyz.openbmc_project.Sensor.Value",
448 "property": { "name": "Value" }
449 }
450 ],
451 "triggers": [
452 {
453 "class": "init",
454 "method": "get_properties"
455 },
456 {
457 "class": "signal",
458 "signal": "interfaces_added"
459 },
460 {
461 "class": "signal",
462 "signal": "properties_changed"
463 }
464 ],
465 "actions": [
466 {
467 "name": "set_parameter_from_group_max",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600468 "parameter_name": "proc_2_core_dvfs_increase_temp",
Matt Spinler323694a2021-11-11 16:03:18 -0600469 "modifier": {
470 "operator": "minus",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600471 "value": 10
Matt Spinler323694a2021-11-11 16:03:18 -0600472 }
Matthew Barthdcf39732021-12-01 21:58:59 -0600473 },
474 {
475 "name": "set_parameter_from_group_max",
476 "parameter_name": "proc_2_core_dvfs_decrease_temp",
477 "modifier": {
478 "operator": "minus",
479 "value": 13
480 }
Matt Spinler323694a2021-11-11 16:03:18 -0600481 }
482 ]
483 },
484 {
485 "name": "Set Proc 3 Core DVFS parameter",
486 "groups": [
487 {
488 "name": "proc 3 core dvfs temp",
489 "interface": "xyz.openbmc_project.Sensor.Value",
490 "property": { "name": "Value" }
491 }
492 ],
493 "triggers": [
494 {
495 "class": "init",
496 "method": "get_properties"
497 },
498 {
499 "class": "signal",
500 "signal": "interfaces_added"
501 },
502 {
503 "class": "signal",
504 "signal": "properties_changed"
505 }
506 ],
507 "actions": [
508 {
509 "name": "set_parameter_from_group_max",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600510 "parameter_name": "proc_3_core_dvfs_increase_temp",
Matt Spinler323694a2021-11-11 16:03:18 -0600511 "modifier": {
512 "operator": "minus",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600513 "value": 10
Matt Spinler323694a2021-11-11 16:03:18 -0600514 }
Matthew Barthdcf39732021-12-01 21:58:59 -0600515 },
516 {
517 "name": "set_parameter_from_group_max",
518 "parameter_name": "proc_3_core_dvfs_decrease_temp",
519 "modifier": {
520 "operator": "minus",
521 "value": 13
522 }
Matt Spinler323694a2021-11-11 16:03:18 -0600523 }
524 ]
525 },
526 {
527 "name": "Set Proc 0 IO Ring DVFS parameter",
528 "groups": [
529 {
530 "name": "proc 0 ioring dvfs temp",
531 "interface": "xyz.openbmc_project.Sensor.Value",
532 "property": { "name": "Value" }
533 }
534 ],
535 "triggers": [
536 {
537 "class": "init",
538 "method": "get_properties"
539 },
540 {
541 "class": "signal",
542 "signal": "interfaces_added"
543 },
544 {
545 "class": "signal",
546 "signal": "properties_changed"
547 }
548 ],
549 "actions": [
550 {
551 "name": "set_parameter_from_group_max",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600552 "parameter_name": "proc_0_ioring_dvfs_increase_temp",
Matt Spinler323694a2021-11-11 16:03:18 -0600553 "modifier": {
554 "operator": "minus",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600555 "value": 10
Matt Spinler323694a2021-11-11 16:03:18 -0600556 }
Matthew Barthdcf39732021-12-01 21:58:59 -0600557 },
558 {
559 "name": "set_parameter_from_group_max",
560 "parameter_name": "proc_0_ioring_dvfs_decrease_temp",
561 "modifier": {
562 "operator": "minus",
563 "value": 13
564 }
Matt Spinler323694a2021-11-11 16:03:18 -0600565 }
566 ]
567 },
568 {
569 "name": "Set Proc 1 IO Ring DVFS parameter",
570 "groups": [
571 {
572 "name": "proc 1 ioring dvfs temp",
573 "interface": "xyz.openbmc_project.Sensor.Value",
574 "property": { "name": "Value" }
575 }
576 ],
577 "triggers": [
578 {
579 "class": "init",
580 "method": "get_properties"
581 },
582 {
583 "class": "signal",
584 "signal": "interfaces_added"
585 },
586 {
587 "class": "signal",
588 "signal": "properties_changed"
589 }
590 ],
591 "actions": [
592 {
593 "name": "set_parameter_from_group_max",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600594 "parameter_name": "proc_1_ioring_dvfs_increase_temp",
Matt Spinler323694a2021-11-11 16:03:18 -0600595 "modifier": {
596 "operator": "minus",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600597 "value": 10
Matt Spinler323694a2021-11-11 16:03:18 -0600598 }
Matthew Barthdcf39732021-12-01 21:58:59 -0600599 },
600 {
601 "name": "set_parameter_from_group_max",
602 "parameter_name": "proc_1_ioring_dvfs_decrease_temp",
603 "modifier": {
604 "operator": "minus",
605 "value": 13
606 }
Matt Spinler323694a2021-11-11 16:03:18 -0600607 }
608 ]
609 },
610 {
611 "name": "Set Proc 2 IO Ring DVFS parameter",
612 "groups": [
613 {
614 "name": "proc 2 ioring dvfs temp",
615 "interface": "xyz.openbmc_project.Sensor.Value",
616 "property": { "name": "Value" }
617 }
618 ],
619 "triggers": [
620 {
621 "class": "init",
622 "method": "get_properties"
623 },
624 {
625 "class": "signal",
626 "signal": "interfaces_added"
627 },
628 {
629 "class": "signal",
630 "signal": "properties_changed"
631 }
632 ],
633 "actions": [
634 {
635 "name": "set_parameter_from_group_max",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600636 "parameter_name": "proc_2_ioring_dvfs_increase_temp",
Matt Spinler323694a2021-11-11 16:03:18 -0600637 "modifier": {
638 "operator": "minus",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600639 "value": 10
Matt Spinler323694a2021-11-11 16:03:18 -0600640 }
Matthew Barthdcf39732021-12-01 21:58:59 -0600641 },
642 {
643 "name": "set_parameter_from_group_max",
644 "parameter_name": "proc_2_ioring_dvfs_decrease_temp",
645 "modifier": {
646 "operator": "minus",
647 "value": 13
648 }
Matt Spinler323694a2021-11-11 16:03:18 -0600649 }
650 ]
651 },
652 {
653 "name": "Set Proc 3 IO Ring DVFS parameter",
654 "groups": [
655 {
656 "name": "proc 3 ioring dvfs temp",
657 "interface": "xyz.openbmc_project.Sensor.Value",
658 "property": { "name": "Value" }
659 }
660 ],
661 "triggers": [
662 {
663 "class": "init",
664 "method": "get_properties"
665 },
666 {
667 "class": "signal",
668 "signal": "properties_changed"
669 },
670 {
671 "class": "signal",
672 "signal": "interfaces_added"
673 }
674 ],
675 "actions": [
676 {
677 "name": "set_parameter_from_group_max",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600678 "parameter_name": "proc_3_ioring_dvfs_increase_temp",
Matt Spinler323694a2021-11-11 16:03:18 -0600679 "modifier": {
680 "operator": "minus",
Matthew Bartha0a72b12021-12-01 21:18:13 -0600681 "value": 10
Matt Spinler323694a2021-11-11 16:03:18 -0600682 }
Matthew Barthdcf39732021-12-01 21:58:59 -0600683 },
684 {
685 "name": "set_parameter_from_group_max",
686 "parameter_name": "proc_3_ioring_dvfs_decrease_temp",
687 "modifier": {
688 "operator": "minus",
689 "value": 13
690 }
Matt Spinler323694a2021-11-11 16:03:18 -0600691 }
692 ]
Matthew Barthb6f10352021-12-02 17:42:49 -0600693 },
694 {
695 // Collect group temperatures each iteration the repeating timer expires
696 "name": "Fan control timer loop",
697 "groups": [
698 {
699 "name": "proc0 core temps",
700 "interface": "xyz.openbmc_project.Sensor.Value",
701 "property": { "name": "Value" }
702 },
703 {
704 "name": "proc1 core temps",
705 "interface": "xyz.openbmc_project.Sensor.Value",
706 "property": { "name": "Value" }
707 },
708 {
709 "name": "proc2 core temps",
710 "interface": "xyz.openbmc_project.Sensor.Value",
711 "property": { "name": "Value" }
712 },
713 {
714 "name": "proc3 core temps",
715 "interface": "xyz.openbmc_project.Sensor.Value",
716 "property": { "name": "Value" }
717 },
718 {
719 "name": "proc0 ioring temp",
720 "interface": "xyz.openbmc_project.Sensor.Value",
721 "property": { "name": "Value" }
722 },
723 {
724 "name": "proc1 ioring temp",
725 "interface": "xyz.openbmc_project.Sensor.Value",
726 "property": { "name": "Value" }
727 },
728 {
729 "name": "proc2 ioring temp",
730 "interface": "xyz.openbmc_project.Sensor.Value",
731 "property": { "name": "Value" }
732 },
733 {
734 "name": "proc3 ioring temp",
735 "interface": "xyz.openbmc_project.Sensor.Value",
736 "property": { "name": "Value" }
737 },
738 {
739 "name": "dram temps",
740 "interface": "xyz.openbmc_project.Sensor.Value",
741 "property": { "name": "Value" }
742 },
743 {
744 "name": "pmic temps",
745 "interface": "xyz.openbmc_project.Sensor.Value",
746 "property": { "name": "Value" }
747 },
748 {
749 "name": "internal memory buffer temps",
750 "interface": "xyz.openbmc_project.Sensor.Value",
751 "property": { "name": "Value" }
752 },
753 {
754 "name": "dram and external memory buffer temps",
755 "interface": "xyz.openbmc_project.Sensor.Value",
756 "property": { "name": "Value" }
757 },
758 {
759 "name": "external memory buffer temps",
760 "interface": "xyz.openbmc_project.Sensor.Value",
761 "property": { "name": "Value" }
762 },
763 {
764 "name": "vdd vrm temps",
765 "interface": "xyz.openbmc_project.Sensor.Value",
766 "property": { "name": "Value" }
Matthew Barth23a7b2b2022-01-11 15:22:55 -0600767 },
768 {
769 "name": "nvme temps",
770 "interface": "xyz.openbmc_project.Sensor.Value",
771 "property": { "name": "Value" }
772 },
773 {
774 "name": "planar temps",
775 "interface": "xyz.openbmc_project.Sensor.Value",
776 "property": { "name": "Value" }
Matt Spinler9b7fc002022-01-11 15:35:29 -0600777 },
778 {
779 "name": "flett temps",
780 "interface": "xyz.openbmc_project.Sensor.Value",
781 "property": { "name": "Value" }
782 },
783 {
Matthew Barth48b74802022-01-14 15:25:24 -0600784 "name": "pcie cable card temps",
Matt Spinler9b7fc002022-01-11 15:35:29 -0600785 "interface": "xyz.openbmc_project.Sensor.Value",
786 "property": { "name": "Value" }
Matthew Barthb6f10352021-12-02 17:42:49 -0600787 }
788 ],
789 "triggers": [
790 {
791 "class": "timer",
792 "type": "repeating",
793 "interval": 2000000,
794 "preload_groups": true
795 }
Matthew Barth6f63b2f2021-12-06 21:08:13 -0600796 ],
797 "actions": [
798 {
799 "name": "set_net_increase_target",
800 "groups": [
801 {
802 "name": "proc0 core temps",
803 "interface": "xyz.openbmc_project.Sensor.Value",
804 "property": { "name": "Value" }
805 }
806 ],
807 "state_parameter_name": "proc_0_core_dvfs_increase_temp",
808 "delta": 300
809 },
810 {
811 "name": "set_net_increase_target",
812 "groups": [
813 {
814 "name": "proc1 core temps",
815 "interface": "xyz.openbmc_project.Sensor.Value",
816 "property": { "name": "Value" }
817 }
818 ],
819 "state_parameter_name": "proc_1_core_dvfs_increase_temp",
820 "delta": 300
821 },
822 {
823 "name": "set_net_increase_target",
824 "groups": [
825 {
826 "name": "proc2 core temps",
827 "interface": "xyz.openbmc_project.Sensor.Value",
828 "property": { "name": "Value" }
829 }
830 ],
831 "state_parameter_name": "proc_2_core_dvfs_increase_temp",
832 "delta": 300
833 },
834 {
835 "name": "set_net_increase_target",
836 "groups": [
837 {
838 "name": "proc3 core temps",
839 "interface": "xyz.openbmc_project.Sensor.Value",
840 "property": { "name": "Value" }
841 }
842 ],
843 "state_parameter_name": "proc_3_core_dvfs_increase_temp",
844 "delta": 300
845 },
846 {
847 "name": "set_net_increase_target",
848 "groups": [
849 {
850 "name": "proc0 ioring temp",
851 "interface": "xyz.openbmc_project.Sensor.Value",
852 "property": { "name": "Value" }
853 }
854 ],
855 "state_parameter_name": "proc_0_ioring_dvfs_increase_temp",
856 "delta": 300
857 },
858 {
859 "name": "set_net_increase_target",
860 "groups": [
861 {
862 "name": "proc1 ioring temp",
863 "interface": "xyz.openbmc_project.Sensor.Value",
864 "property": { "name": "Value" }
865 }
866 ],
867 "state_parameter_name": "proc_1_ioring_dvfs_increase_temp",
868 "delta": 300
869 },
870 {
871 "name": "set_net_increase_target",
872 "groups": [
873 {
874 "name": "proc2 ioring temp",
875 "interface": "xyz.openbmc_project.Sensor.Value",
876 "property": { "name": "Value" }
877 }
878 ],
879 "state_parameter_name": "proc_2_ioring_dvfs_increase_temp",
880 "delta": 300
881 },
882 {
883 "name": "set_net_increase_target",
884 "groups": [
885 {
886 "name": "proc3 ioring temp",
887 "interface": "xyz.openbmc_project.Sensor.Value",
888 "property": { "name": "Value" }
889 }
890 ],
891 "state_parameter_name": "proc_3_ioring_dvfs_increase_temp",
892 "delta": 300
893 },
894 {
895 "name": "set_net_increase_target",
896 "groups": [
897 {
898 "name": "dram temps",
899 "interface": "xyz.openbmc_project.Sensor.Value",
900 "property": { "name": "Value" }
901 }
902 ],
Matthew Bartheff46602022-02-11 14:10:58 -0600903 "state": 69.0,
904 "delta": 100
Matthew Barth6f63b2f2021-12-06 21:08:13 -0600905 },
906 {
907 "name": "set_net_increase_target",
908 "groups": [
909 {
910 "name": "pmic temps",
911 "interface": "xyz.openbmc_project.Sensor.Value",
912 "property": { "name": "Value" }
913 }
914 ],
Matthew Bartheff46602022-02-11 14:10:58 -0600915 "state": 69.0,
916 "delta": 100
Matthew Barth6f63b2f2021-12-06 21:08:13 -0600917 },
918 {
919 "name": "set_net_increase_target",
920 "groups": [
921 {
922 "name": "internal memory buffer temps",
923 "interface": "xyz.openbmc_project.Sensor.Value",
924 "property": { "name": "Value" }
925 }
926 ],
Matthew Bartheff46602022-02-11 14:10:58 -0600927 "state": 74.0,
928 "delta": 100
Matthew Barth6f63b2f2021-12-06 21:08:13 -0600929 },
930 {
931 "name": "set_net_increase_target",
932 "groups": [
933 {
934 "name": "dram and external memory buffer temps",
935 "interface": "xyz.openbmc_project.Sensor.Value",
936 "property": { "name": "Value" }
937 }
938 ],
939 "state": 55.0,
940 "delta": 200
941 },
942 {
943 "name": "set_net_increase_target",
944 "groups": [
945 {
946 "name": "external memory buffer temps",
947 "interface": "xyz.openbmc_project.Sensor.Value",
948 "property": { "name": "Value" }
949 }
950 ],
951 "state": 55.0,
952 "delta": 200
953 },
954 {
955 "name": "set_net_increase_target",
956 "groups": [
957 {
958 "name": "vdd vrm temps",
959 "interface": "xyz.openbmc_project.Sensor.Value",
960 "property": { "name": "Value" }
961 }
962 ],
963 "state": 82.0,
964 "delta": 300
Matthew Barthb253cbd2021-12-06 21:47:50 -0600965 },
966 {
Matthew Barthb28663e2021-12-08 21:52:00 -0600967 "name": "set_net_increase_target",
968 "groups": [
969 {
970 "name": "nvme temps",
971 "interface": "xyz.openbmc_project.Sensor.Value",
972 "property": { "name": "Value" }
973 }
974 ],
975 "state": 58.0,
976 "delta": 200
977 },
978 {
Matthew Barth075fcd82021-12-13 20:56:49 -0600979 "name": "set_net_increase_target",
980 "groups": [
981 {
982 "name": "planar temps",
983 "interface": "xyz.openbmc_project.Sensor.Value",
984 "property": { "name": "Value" }
985 }
986 ],
987 "state": 65.0,
988 "delta": 255
989 },
990 {
Matt Spinler1006fe32022-01-10 14:06:22 -0600991 "name": "set_net_increase_target",
992 "groups": [
993 {
994 "name": "flett temps",
995 "interface": "xyz.openbmc_project.Sensor.Value",
996 "property": { "name": "Value" }
997 }
998 ],
Matthew Bartheff46602022-02-11 14:10:58 -0600999 "state": 80.0,
1000 "delta": 200
Matt Spinler1006fe32022-01-10 14:06:22 -06001001 },
1002 {
1003 "name": "set_net_increase_target",
1004 "groups": [
1005 {
Matthew Barth48b74802022-01-14 15:25:24 -06001006 "name": "pcie cable card temps",
Matt Spinler1006fe32022-01-10 14:06:22 -06001007 "interface": "xyz.openbmc_project.Sensor.Value",
1008 "property": { "name": "Value" }
1009 }
1010 ],
1011 "state": 70.0,
1012 "delta": 255
1013 },
1014 {
Matthew Barthb253cbd2021-12-06 21:47:50 -06001015 "name": "set_net_decrease_target",
1016 "groups": [
1017 {
1018 "name": "proc0 core temps",
1019 "interface": "xyz.openbmc_project.Sensor.Value",
1020 "property": { "name": "Value" }
1021 }
1022 ],
1023 "state_parameter_name": "proc_0_core_dvfs_decrease_temp",
Matthew Bartheff46602022-02-11 14:10:58 -06001024 "delta": 50
Matthew Barthb253cbd2021-12-06 21:47:50 -06001025 },
1026 {
1027 "name": "set_net_decrease_target",
1028 "groups": [
1029 {
1030 "name": "proc1 core temps",
1031 "interface": "xyz.openbmc_project.Sensor.Value",
1032 "property": { "name": "Value" }
1033 }
1034 ],
1035 "state_parameter_name": "proc_1_core_dvfs_decrease_temp",
Matthew Bartheff46602022-02-11 14:10:58 -06001036 "delta": 50
Matthew Barthb253cbd2021-12-06 21:47:50 -06001037 },
1038 {
1039 "name": "set_net_decrease_target",
1040 "groups": [
1041 {
1042 "name": "proc2 core temps",
1043 "interface": "xyz.openbmc_project.Sensor.Value",
1044 "property": { "name": "Value" }
1045 }
1046 ],
1047 "state_parameter_name": "proc_2_core_dvfs_decrease_temp",
Matthew Bartheff46602022-02-11 14:10:58 -06001048 "delta": 50
Matthew Barthb253cbd2021-12-06 21:47:50 -06001049 },
1050 {
1051 "name": "set_net_decrease_target",
1052 "groups": [
1053 {
1054 "name": "proc3 core temps",
1055 "interface": "xyz.openbmc_project.Sensor.Value",
1056 "property": { "name": "Value" }
1057 }
1058 ],
1059 "state_parameter_name": "proc_3_core_dvfs_decrease_temp",
Matthew Bartheff46602022-02-11 14:10:58 -06001060 "delta": 50
Matthew Barthb253cbd2021-12-06 21:47:50 -06001061 },
1062 {
1063 "name": "set_net_decrease_target",
1064 "groups": [
1065 {
1066 "name": "proc0 ioring temp",
1067 "interface": "xyz.openbmc_project.Sensor.Value",
1068 "property": { "name": "Value" }
1069 }
1070 ],
1071 "state_parameter_name": "proc_0_ioring_dvfs_decrease_temp",
Matthew Bartheff46602022-02-11 14:10:58 -06001072 "delta": 50
Matthew Barthb253cbd2021-12-06 21:47:50 -06001073 },
1074 {
1075 "name": "set_net_decrease_target",
1076 "groups": [
1077 {
1078 "name": "proc1 ioring temp",
1079 "interface": "xyz.openbmc_project.Sensor.Value",
1080 "property": { "name": "Value" }
1081 }
1082 ],
1083 "state_parameter_name": "proc_1_ioring_dvfs_decrease_temp",
Matthew Bartheff46602022-02-11 14:10:58 -06001084 "delta": 50
Matthew Barthb253cbd2021-12-06 21:47:50 -06001085 },
1086 {
1087 "name": "set_net_decrease_target",
1088 "groups": [
1089 {
1090 "name": "proc2 ioring temp",
1091 "interface": "xyz.openbmc_project.Sensor.Value",
1092 "property": { "name": "Value" }
1093 }
1094 ],
1095 "state_parameter_name": "proc_2_ioring_dvfs_decrease_temp",
Matthew Bartheff46602022-02-11 14:10:58 -06001096 "delta": 50
Matthew Barthb253cbd2021-12-06 21:47:50 -06001097 },
1098 {
1099 "name": "set_net_decrease_target",
1100 "groups": [
1101 {
1102 "name": "proc3 ioring temp",
1103 "interface": "xyz.openbmc_project.Sensor.Value",
1104 "property": { "name": "Value" }
1105 }
1106 ],
1107 "state_parameter_name": "proc_3_ioring_dvfs_decrease_temp",
Matthew Bartheff46602022-02-11 14:10:58 -06001108 "delta": 50
Matthew Barthb253cbd2021-12-06 21:47:50 -06001109 },
1110 {
1111 "name": "set_net_decrease_target",
1112 "groups": [
1113 {
1114 "name": "dram temps",
1115 "interface": "xyz.openbmc_project.Sensor.Value",
1116 "property": { "name": "Value" }
1117 }
1118 ],
Matthew Bartheff46602022-02-11 14:10:58 -06001119 "state": 66.0,
Matthew Barthb253cbd2021-12-06 21:47:50 -06001120 "delta": 40
1121 },
1122 {
1123 "name": "set_net_decrease_target",
1124 "groups": [
1125 {
1126 "name": "pmic temps",
1127 "interface": "xyz.openbmc_project.Sensor.Value",
1128 "property": { "name": "Value" }
1129 }
1130 ],
Matthew Bartheff46602022-02-11 14:10:58 -06001131 "state": 66.0,
Matthew Barthb253cbd2021-12-06 21:47:50 -06001132 "delta": 40
1133 },
1134 {
1135 "name": "set_net_decrease_target",
1136 "groups": [
1137 {
1138 "name": "internal memory buffer temps",
1139 "interface": "xyz.openbmc_project.Sensor.Value",
1140 "property": { "name": "Value" }
1141 }
1142 ],
Matthew Bartheff46602022-02-11 14:10:58 -06001143 "state": 71.0,
Matthew Barthb253cbd2021-12-06 21:47:50 -06001144 "delta": 40
1145 },
1146 {
1147 "name": "set_net_decrease_target",
1148 "groups": [
1149 {
1150 "name": "dram and external memory buffer temps",
1151 "interface": "xyz.openbmc_project.Sensor.Value",
1152 "property": { "name": "Value" }
1153 }
1154 ],
1155 "state": 52.0,
1156 "delta": 40
1157 },
1158 {
1159 "name": "set_net_decrease_target",
1160 "groups": [
1161 {
1162 "name": "external memory buffer temps",
1163 "interface": "xyz.openbmc_project.Sensor.Value",
1164 "property": { "name": "Value" }
1165 }
1166 ],
1167 "state": 52.0,
1168 "delta": 40
1169 },
1170 {
1171 "name": "set_net_decrease_target",
1172 "groups": [
1173 {
1174 "name": "vdd vrm temps",
1175 "interface": "xyz.openbmc_project.Sensor.Value",
1176 "property": { "name": "Value" }
1177 }
1178 ],
1179 "state": 79.0,
1180 "delta": 30
Matthew Barth85080982021-12-08 22:27:29 -06001181 },
1182 {
1183 "name": "set_net_decrease_target",
1184 "groups": [
1185 {
1186 "name": "nvme temps",
1187 "interface": "xyz.openbmc_project.Sensor.Value",
1188 "property": { "name": "Value" }
1189 }
1190 ],
1191 "state": 55.0,
1192 "delta": 40
Matthew Barth075fcd82021-12-13 20:56:49 -06001193 },
1194 {
1195 "name": "set_net_decrease_target",
1196 "groups": [
1197 {
1198 "name": "planar temps",
1199 "interface": "xyz.openbmc_project.Sensor.Value",
1200 "property": { "name": "Value" }
1201 }
1202 ],
1203 "state": 60.0,
1204 "delta": 80
Matt Spinler1006fe32022-01-10 14:06:22 -06001205 },
1206 {
1207 "name": "set_net_decrease_target",
1208 "groups": [
1209 {
1210 "name": "flett temps",
1211 "interface": "xyz.openbmc_project.Sensor.Value",
1212 "property": { "name": "Value" }
1213 }
1214 ],
Matthew Bartheff46602022-02-11 14:10:58 -06001215 "state": 75.0,
Matt Spinler1006fe32022-01-10 14:06:22 -06001216 "delta": 80
1217 },
1218 {
1219 "name": "set_net_decrease_target",
1220 "groups": [
1221 {
Matthew Barth48b74802022-01-14 15:25:24 -06001222 "name": "pcie cable card temps",
Matt Spinler1006fe32022-01-10 14:06:22 -06001223 "interface": "xyz.openbmc_project.Sensor.Value",
1224 "property": { "name": "Value" }
1225 }
1226 ],
1227 "state": 65.0,
1228 "delta": 80
Matthew Barth6f63b2f2021-12-06 21:08:13 -06001229 }
Matthew Barthb6f10352021-12-02 17:42:49 -06001230 ]
Matthew Barthcf34be22021-12-08 22:53:48 -06001231 },
1232 {
1233 // Remove NVMe temperature objects from cache when they are removed from
1234 // dbus. There's no need to react to their removal.
1235 "name": "remove nvme objects",
1236 "groups": [
1237 {
1238 "name": "nvme temps",
1239 "interface": "xyz.openbmc_project.Sensor.Value",
1240 "property": { "name": "Value" }
1241 }
1242 ],
1243 "triggers": [
1244 {
1245 "class": "signal",
1246 "signal": "interfaces_removed"
1247 }
1248 ]
Matt Spinlerc02a8262022-01-05 15:12:10 -06001249 },
1250 {
1251 "name": "set pcie floor index",
1252 "groups": [
1253 {
1254 "name": "pcie slots",
1255 "interface": "xyz.openbmc_project.State.Decorator.PowerState",
1256 "property": {
1257 "name": "PowerState"
1258 }
1259 },
1260 {
1261 "name": "pcie cards",
1262 "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1263 "property": {
1264 "name": "Function0DeviceId"
1265 }
1266 },
1267 {
1268 "name": "pcie cards",
1269 "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1270 "property": {
1271 "name": "Function0VendorId"
1272 }
1273 },
1274 {
1275 "name": "pcie cards",
1276 "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1277 "property": {
1278 "name": "Function0SubsystemId"
1279 }
1280 },
1281 {
1282 "name": "pcie cards",
1283 "interface": "xyz.openbmc_project.Inventory.Item.PCIeDevice",
1284 "property": {
1285 "name": "Function0SubsystemVendorId"
1286 }
1287 }
1288 ],
1289 "triggers": [
1290 {
1291 "class": "init",
1292 "method": "get_properties"
1293 },
1294 {
1295 "class": "signal",
1296 "signal": "properties_changed"
1297 },
1298 {
1299 "class": "signal",
1300 "signal": "interfaces_added"
1301 }
1302 ],
1303 "actions": [
1304 {
1305 "name": "pcie_card_floors",
1306 "use_config_specific_files": true,
1307 "settle_time": 2
1308 }
1309 ]
1310 },
1311 {
1312 "name": "Fan floors",
1313 "groups": [
1314 {
1315 "name": "altitude",
1316 "interface": "xyz.openbmc_project.Sensor.Value",
1317 "property": { "name": "Value" }
1318 },
1319 {
1320 "name": "ambient temp",
1321 "interface": "xyz.openbmc_project.Sensor.Value",
1322 "property": { "name": "Value" }
1323 }
1324 ],
1325 "triggers": [
1326 {
1327 "class": "init",
1328 "method": "get_properties"
1329 },
1330 {
1331 "class": "signal",
1332 "signal": "properties_changed"
1333 },
1334 {
1335 "class": "signal",
1336 "signal": "interfaces_added"
Matt Spinler3a53f2c2022-02-18 09:24:05 -06001337 },
1338 {
1339 "class": "parameter",
1340 "parameter": "pcie_floor_index"
Matt Spinlerc02a8262022-01-05 15:12:10 -06001341 }
1342 ],
1343 "actions": [
1344 {
1345 "name": "mapped_floor",
1346 "key_group": "ambient temp",
1347 "fan_floors": [
1348 {
1349 // Entry valid for temps < 20
1350 "key": 20,
1351 "floors": [
1352 {
1353 "parameter": "pcie_floor_index",
1354 "floors": [
Matthew Bartheff46602022-02-11 14:10:58 -06001355 { "value": 1, "floor": 6700 },
1356 { "value": 2, "floor": 8000 },
Matt Spinlerc02a8262022-01-05 15:12:10 -06001357 { "value": 3, "floor": 9300 },
1358 { "value": 4, "floor": 9800 },
1359 { "value": 5, "floor": 11300 }
1360 ]
1361 },
1362 {
1363 "group": "altitude",
1364 "floors": [
Matthew Bartheff46602022-02-11 14:10:58 -06001365 { "value": 900, "floor": 6200 },
1366 { "value": 1800, "floor": 8500 },
1367 { "value": 3050, "floor": 10500 }
Matt Spinlerc02a8262022-01-05 15:12:10 -06001368 ]
1369 }
1370 ]
1371 },
1372 {
1373 // Entry valid for temps < 25
1374 "key": 25,
1375 "floors": [
1376 {
1377 "parameter": "pcie_floor_index",
1378 "floors": [
1379 { "value": 1, "floor": 8400 },
Matthew Bartheff46602022-02-11 14:10:58 -06001380 { "value": 2, "floor": 9500 },
1381 { "value": 3, "floor": 10600 },
Matt Spinlerc02a8262022-01-05 15:12:10 -06001382 { "value": 4, "floor": 13500 },
1383 { "value": 5, "floor": 14900 }
1384 ]
1385 },
1386 {
1387 "group": "altitude",
1388 "floors": [
Matthew Bartheff46602022-02-11 14:10:58 -06001389 { "value": 900, "floor": 7500 },
1390 { "value": 1800, "floor": 10000 },
1391 { "value": 3050, "floor": 12500 }
Matt Spinlerc02a8262022-01-05 15:12:10 -06001392 ]
1393 }
1394 ]
1395 },
1396 {
1397 // Entry valid for temps < 30
1398 "key": 30,
1399 "floors": [
1400 {
1401 "parameter": "pcie_floor_index",
1402 "floors": [
1403 { "value": 1, "floor": 10800 },
Matthew Bartheff46602022-02-11 14:10:58 -06001404 { "value": 2, "floor": 11400 },
1405 { "value": 3, "floor": 12000 },
1406 { "value": 4, "floor": 17300 },
1407 { "value": 5, "floor": 18000 }
Matt Spinlerc02a8262022-01-05 15:12:10 -06001408 ]
1409 },
1410 {
1411 "group": "altitude",
1412 "floors": [
Matthew Bartheff46602022-02-11 14:10:58 -06001413 { "value": 900, "floor": 10000 },
1414 { "value": 1800, "floor": 12500 },
1415 { "value": 3050, "floor": 15000 }
Matt Spinlerc02a8262022-01-05 15:12:10 -06001416 ]
1417 }
1418 ]
1419 },
1420 {
1421 // Entry valid for temps < 35
1422 "key": 35,
1423 "floors": [
1424 {
1425 "parameter": "pcie_floor_index",
1426 "floors": [
1427 { "value": 1, "floor": 13200 },
Matthew Bartheff46602022-02-11 14:10:58 -06001428 { "value": 2, "floor": 13400 },
1429 { "value": 3, "floor": 13600 },
1430 { "value": 4, "floor": 18000 },
1431 { "value": 5, "floor": 18000 }
Matt Spinlerc02a8262022-01-05 15:12:10 -06001432 ]
1433 },
1434 {
1435 "group": "altitude",
1436 "floors": [
Matthew Bartheff46602022-02-11 14:10:58 -06001437 { "value": 900, "floor": 12500 },
1438 { "value": 1800, "floor": 15000 },
1439 { "value": 3050, "floor": 18000 }
1440 ]
1441 }
1442 ]
1443 },
1444 {
1445 // Entry valid for temps < 40
1446 "key": 40,
1447 "floors": [
1448 {
1449 "parameter": "pcie_floor_index",
1450 "floors": [
1451 { "value": 1, "floor": 18000 },
1452 { "value": 2, "floor": 18000 },
1453 { "value": 3, "floor": 18000 },
1454 { "value": 4, "floor": 18000 },
1455 { "value": 5, "floor": 18000 }
1456 ]
1457 },
1458 {
1459 "group": "altitude",
1460 "floors": [
1461 { "value": 900, "floor": 15000 },
1462 { "value": 1800, "floor": 18000 },
1463 { "value": 3050, "floor": 18000 }
Matt Spinlerc02a8262022-01-05 15:12:10 -06001464 ]
1465 }
1466 ]
1467 }
1468 ]
1469 }
1470 ]
Matt Spinler323694a2021-11-11 16:03:18 -06001471 }
Matthew Barthf0f213c2021-10-19 13:32:31 -05001472]