diff --git a/leiyu/obmc-utils/README.md b/leiyu/obmc-utils/README.md
index ee7dbb4..161a29f 100644
--- a/leiyu/obmc-utils/README.md
+++ b/leiyu/obmc-utils/README.md
@@ -24,3 +24,7 @@
    ```
    sensor_yaml_config.py -i <sample.yaml> -o <sensor_map.yaml> -g
    ```
+   * To generate a DCMI sensor json config, which is used by phosphor-ipmi-config:
+   ```
+   sensor_yaml_config.py -i <input.yaml> -o <output.json> -d
+   ```
diff --git a/leiyu/obmc-utils/sensor_yaml_config.py b/leiyu/obmc-utils/sensor_yaml_config.py
index 65a0a3b..8db1303 100755
--- a/leiyu/obmc-utils/sensor_yaml_config.py
+++ b/leiyu/obmc-utils/sensor_yaml_config.py
@@ -72,6 +72,11 @@
     'serviceInterface': 'org.freedesktop.DBus.Properties',
     'unit': 'xyz.openbmc_project.Sensor.Value.Unit.DegreesC'
 }
+sampleDcmiSensor = {
+    "instance": 1,
+    "dbus": "/xyz/openbmc_project/sensors/temperature/p0_core0_temp",
+    "record_id": 91
+}
 
 
 def openYaml(f):
@@ -162,6 +167,32 @@
     return r
 
 
+def isCoreTemp(p):
+    import re
+    m = re.search(r'p\d+_core\d+_temp', p)
+    return m is not None
+
+
+def getDcmiSensor(i, sensor):
+    import re
+    path = sensor['path']
+    name = path.split('/')[-1]
+    m = re.findall(r'\d+', name)
+    socket, core = int(m[0]), int(m[1])
+    instance = socket * 24 + core + 1
+    r = sampleDcmiSensor.copy()
+    r['instance'] = instance
+    r['dbus'] = path
+    r['record_id'] = i
+    return r
+
+
+def saveJson(data, f):
+    import json
+    with open(f, 'w') as outfile:
+        json.dump(data, outfile, indent=4)
+
+
 def main():
     parser = argparse.ArgumentParser(
         description='Yaml tool for updating ipmi sensor yaml config')
@@ -175,8 +206,16 @@
                         help='The .rpt file generated by op-build')
     parser.add_argument('-f', '--fix', action='store_true',
                         help='Fix entities and sensorNamePattern')
-    parser.add_argument('-g', '--generate', action='store_true',
-                        help='Generate maps for entityID and sensorNamePattern')
+
+    # -g expects output as yaml for mapping of entityID/sensorNamePattern
+    # -d expects output as json config for dcmi sensors
+    # Do not mess the output by enforcing only one argument is passed
+    # TODO: -f and -r could be used together, and they are conflicted with -g or -d
+    group = parser.add_mutually_exclusive_group()
+    group.add_argument('-g', '--generate', action='store_true',
+                       help='Generate maps for entityID and sensorNamePattern')
+    group.add_argument('-d', '--dcmi', action='store_true',
+                       help='Generate dcmi sensors json config')
 
     args = parser.parse_args()
     args = vars(args)
@@ -229,8 +268,17 @@
                                 'sensorNamePattern': sensorNamePattern}
         y = m
 
-    safe = False if args['generate'] else True
+    if args['dcmi']:
+        d = []
+        for i in y:
+            if isCoreTemp(y[i]['path']):
+                s = getDcmiSensor(i, y[i])
+                d.append(s)
+                print(s)
+        saveJson(d, args['output'])
+        return
 
+    safe = False if args['generate'] else True
     saveYaml(y, args['output'], safe)
 
 
