<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5">
<meta name="Generator" content="Microsoft Word 15 (filtered medium)">
<style><!--
/* Font Definitions */
@font-face
        {font-family:新細明體;
        panose-1:2 2 5 0 0 0 0 0 0 0;}
@font-face
        {font-family:"Cambria Math";
        panose-1:2 4 5 3 5 4 6 3 2 4;}
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"\@新細明體";
        panose-1:2 1 6 1 0 1 1 1 1 1;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Calibri",sans-serif;}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:#0563C1;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:#954F72;
        text-decoration:underline;}
p.MsoPlainText, li.MsoPlainText, div.MsoPlainText
        {mso-style-priority:99;
        mso-style-link:"純文字 字元";
        margin:0cm;
        margin-bottom:.0001pt;
        font-size:12.0pt;
        font-family:"Calibri",sans-serif;}
span.a
        {mso-style-name:"純文字 字元";
        mso-style-priority:99;
        mso-style-link:純文字;
        font-family:"Calibri",sans-serif;}
.MsoChpDefault
        {mso-style-type:export-only;
        font-family:"Calibri",sans-serif;}
/* Page Definitions */
@page WordSection1
        {size:612.0pt 792.0pt;
        margin:72.0pt 90.0pt 72.0pt 90.0pt;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]-->
</head>
<body lang="ZH-TW" link="#0563C1" vlink="#954F72" style="text-justify-trim:punctuation">
<div class="WordSection1">
<p class="MsoNormal"><span lang="EN-US">>I suspect this check and option needs to be moved into the individual sensors, so that we can differentiate between "should be settable in a test context" and "should be settable in a normal context".<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">1. Does you mean don't change the Intel definition and keep the origin code when compile time?  <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">2. What do you mean this option needs to be moved into the individual sensors so that we can differentiate between "should be settable in a test context" and "should be settable in a normal context".<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Please provide more details about your thinking.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>See above.  I suspect that the redfish code doesn't need to check the mutability of the sensor, the interface should just have the correct behavior.  The only place I would expect to need to know the >mutability of
 a sensor is in the IPMI sdr, where we will need to set the modifiable bit appropriately.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">For now, the function to set sensor in redfish code is to set the d-bus value directly (internally writable),  if we don't check the EM mutability in Redfish, follow the Add Mutable property to Sensor Value interface,
 we still need to check the sensor mutable property to know whether or not to write the d-bus value in redfish or we need other external services to know whether or not to grant write permission to their users like IPMI sensor. 
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>Doesn't this already work today?  I thought we had all that sorted a long time ago.  For some reason I thought we intentionally didn't expose the manual/automatic param, because that only applied to >the PID loops,
 and PWM sensor didn't expose that interface.  I need to go look at the code at some point.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Yes, ipmi-oem is work today. I agree it is not properly to show on redfish to let users can easily change the fan mode, the reason to change fan mode to the manual is for debugging. Maybe let users use ipmi-oem to
 replace show on Redfish URLs.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">-----Original Message-----<br>
From: Ed Tanous <edtanous@google.com> <br>
Sent: Saturday, March 13, 2021 1:40 AM<br>
To: Bruce Lee (</span><span style="font-family:"新細明體",serif">李昀峻</span><span lang="EN-US">) <Bruce_Lee@quantatw.com><br>
Cc: Nan Zhou <nanzhou@google.com>; rhanley@google.com; openbmc@lists.ozlabs.org<br>
Subject: Re: Fan PWM settings via Redfish</span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">On Thu, Mar 11, 2021 at 10:37 PM Bruce Lee (</span><span style="font-family:"新細明體",serif">李昀峻</span><span lang="EN-US">) <<a href="mailto:Bruce_Lee@quantatw.com"><span style="color:windowtext;text-decoration:none">Bruce_Lee@quantatw.com</span></a>>
 wrote:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Hi All,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> We are designing and implementing the Fan PWM settings via Redfish. The goal is that clients can set sensor value to bmc via Redfish.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> We divide the work into three phases.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Phase 1 is to remove the definition </span>
<span lang="EN-US" style="font-family:"Courier New"">“</span><span lang="EN-US">BMCWEB_INSECURE_UNRESTRICTED_SENSOR_OVERRIDE</span><span lang="EN-US" style="font-family:"Courier New"">”</span><span lang="EN-US"> and use new definition to
</span><span lang="EN-US" style="font-family:"Courier New"">“</span><span lang="EN-US">BMCWEB_SPECIAL_MODE_SENSOR_OVERRIDE</span><span lang="EN-US" style="font-family:"Courier New"">”</span><span lang="EN-US">.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> The </span><span lang="EN-US" style="font-family:"Courier New"">“</span><span lang="EN-US">BMCWEB_INSECURE_UNRESTRICTED_SENSOR_OVERRIDE</span><span lang="EN-US" style="font-family:"Courier New"">”</span><span lang="EN-US">
 was added by Intel <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> group, please refer to <o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> <a href="https://apc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgerr">
<span style="color:windowtext;text-decoration:none">https://apc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgerr</span></a><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> it.openbmc-project.xyz%2Fc%2Fopenbmc%2Fbmcweb%2F%2B%2F30000&amp;data=0<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> 4%7C01%7CBruce_Lee%40quantatw.com%7C64a1153cd45b46eeca4008d8e57df35c%7<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> C179b032707fc4973ac738de7313561b2%7C1%7C0%7C637511676404227113%7CUnkno<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> wn%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiL<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> CJXVCI6Mn0%3D%7C1000&amp;sdata=f604Piz1vDfItDZ3docZOPfryJesavkbOwhKywJ<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> oXlU%3D&amp;reserved=0,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> The Intel solution has 4 conditions needs to match one of them and that can be work to override sensor but actually not all project needs those conditions, so we want to propose to remove the insecure definition
 and use new definition to include the intel solution and execute when compile. It would be no compile time with option for common project. And the insecure issue we will discuss in phase 2.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Example below:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> ----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> -------------------------------<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> [Before modified]<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> #ifdef BMCWEB_INSECURE_UNRESTRICTED_SENSOR_OVERRIDE<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> // Proceed with sensor override<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> setSensorsOverride(sensorAsyncResp, allCollections);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> return;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> #endif<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> doIntelSpecialModeManager code </span>
<span lang="EN-US" style="font-family:"Courier New"">…</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> ----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> -------------------------------<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> [After modified]<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> #ifdef BMCWEB_SPECIAL_MODE_SENSOR_OVERRIDE<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>       doIntelSpecialModeManager code
</span><span lang="EN-US" style="font-family:"Courier New"">…</span><span lang="EN-US"><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>       return;<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> #endif<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> //Proceed with sensor override<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> setSensorsOverride(sensorAsyncResp, allCollections);<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> ----------------------------------------------------------------------<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> -------------------------------<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">I suspect this check and option needs to be moved into the individual sensors, so that we can differentiate between "should be settable in a test context" and "should be settable in a normal context".<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Phase 2 is to add a condition to check the sensor name</span><span lang="EN-US" style="font-family:"Courier New"">’</span><span lang="EN-US">s Mutable value of EM if the value is true do the sensor override function
 else not do.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">I suspect this patchset needs to be moved forward if you're hoping to use the mutable param:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><a href="https://apc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgerrit.openbmc-project.xyz%2Fc%2Fopenbmc%2Fphosphor-dbus-interfaces%2F%2B%2F36333&amp;data=04%7C01%7CBruce_Lee%40quantatw.com%7C64a1153cd45b46eeca4008d8e57df35c%7C179b032707fc4973ac738de7313561b2%7C1%7C0%7C637511676404227113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=tdExxB%2BY7O1cKb%2FYMdvPGnw7YThW7J55jytDPh4YWYo%3D&amp;reserved=0"><span style="color:windowtext;text-decoration:none">https://apc01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fgerrit.openbmc-project.xyz%2Fc%2Fopenbmc%2Fphosphor-dbus-interfaces%2F%2B%2F36333&amp;data=04%7C01%7CBruce_Lee%40quantatw.com%7C64a1153cd45b46eeca4008d8e57df35c%7C179b032707fc4973ac738de7313561b2%7C1%7C0%7C637511676404227113%7CUnknown%7CTWFpbGZsb3d8eyJWIjoiMC4wLjAwMDAiLCJQIjoiV2luMzIiLCJBTiI6Ik1haWwiLCJXVCI6Mn0%3D%7C1000&amp;sdata=tdExxB%2BY7O1cKb%2FYMdvPGnw7YThW7J55jytDPh4YWYo%3D&amp;reserved=0</span></a><o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> The Mutable value can be set in the sensor configuration of Entity-Manage, when using the patch command to override the sensor, it needs to check the EntityManager subtree</span><span lang="EN-US" style="font-family:"Courier New"">’</span><span lang="EN-US">s
 sensor name and its interface </span><span lang="EN-US" style="font-family:"Courier New"">“</span><span lang="EN-US">xyz.openbmc_project.Configuration.I2CFan.Connector</span><span lang="EN-US" style="font-family:"Courier New"">”</span><span lang="EN-US"> to
 check the corresponding property name</span><span lang="EN-US" style="font-family:"Courier New"">’</span><span lang="EN-US">s mutable value to decide whether executing the override function.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">See above.  I suspect that the redfish code doesn't need to check the mutability of the sensor, the interface should just have the correct behavior.  The only place I would expect to need to know the mutability of
 a sensor is in the IPMI sdr, where we will need to set the modifiable bit appropriately.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> This achieves feature parity with the ipmi::sensor::Mutability
<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> parameter of the old hardcoded YAML configuration files<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Not sure what you're referring to.  That may have been something done in a fork.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Execute steps:<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> 1.       Patch command to override sensor.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> 2.       Check the EM of sensor</span><span lang="EN-US" style="font-family:"Courier New"">’</span><span lang="EN-US">s Mutable value<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> 3.       If Mutable value is true do sensor override action else not do.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Phase 3 is to add a new get command to get the Zone_$id</span><span lang="EN-US" style="font-family:"Courier New"">’</span><span lang="EN-US">s "Manual" value and patch command to change the fan mode from auto to
 manual mode ("Manual":true).<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Because the fan control is use package phosphor-pid-control, when we need to set fan pwm, it needs to set the fan mode from auto mode to manual mode, for now, the phosphor-pid-control has already provided ipmi-oem
 command to achieve this feature, so we need to implement this fan mode change via redfish command.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">Doesn't this already work today?  I thought we had all that sorted a long time ago.  For some reason I thought we intentionally didn't expose the manual/automatic param, because that only applied to the PID loops,
 and PWM sensor didn't expose that interface.  I need to go look at the code at some point.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Example URLs                            |Method     |Example Payload<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> --------------------------------------- |-------------- |--<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> /redfish/v1/Managers/bmc      |GET           |"Oem": {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |         Fan": {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                      |                   |                    "FanZones": {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                              "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanZones",<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                              "@odata.type": "#OemManager.FanZones",<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                              "Zone_0": {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                                         "@odata.id": "/redfish/v1/Managers/bmc#/Oem/OpenBmc/Fan/FanZones/Zone_0",<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                                         "@odata.type": "#OemManager.FanZone",<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                                         "Chassis": {<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                                                    "@odata.id": "/redfish/v1/Chassis/GSZ_EVT"<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                                         },<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                                         "FailSafePercent": 100.0,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                                         "MinThermalOutput": 0.0,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                                         "ZoneIndex": 0.0,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                                         "Manual":false<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                              },<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |                   },<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                       |                   |         },<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">>                                                      |                   |}<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> --------------------------------------- |-------------- |----<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> /redfish/v1/Managers/bmc    | PATCH      |"Oem": { "Fan": { "FanZones": { "Zone_0": { "Manual":true } } }<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">It should be noted, this schema needs some serious cleanup to make it proper resources, paths, and collections, and should version the schema files appropriately.  If you're planning on extending it, I would expect
 _some_ effort to be put into cleanup.  There's several github bugs that have more details, and I will leave it up to you to decide how much you'd like to do as part of this work, but please plan on some.<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US"><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> If any thoughts on this topic, feel free to give your comments. Thanks!<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Sincerely,<o:p></o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">><o:p> </o:p></span></p>
<p class="MsoPlainText"><span lang="EN-US">> Bruce<o:p></o:p></span></p>
</div>
</body>
</html>