diff --git a/src/storagecommands.cpp b/src/storagecommands.cpp
index d38008e..3c11372 100644
--- a/src/storagecommands.cpp
+++ b/src/storagecommands.cpp
@@ -860,6 +860,37 @@
     return 0;
 }
 
+const static boost::container::flat_map<const char *, std::string, CmpStr>
+    sensorUnitStr{{{"temperature", "C"},
+                   {"voltage", "V"},
+                   {"current", "mA"},
+                   {"fan_tach", "RPM"},
+                   {"fan_pwm", "RPM"},
+                   {"power", "W"}}};
+
+int getSensorUnit(std::string &name, std::string &unit)
+{
+    std::string connection;
+    std::string path;
+    int ret = -1;
+
+    ret = getSensorConnectionByName(name, connection, path);
+    if (ret < 0)
+    {
+        return ret;
+    }
+
+    std::string sensorTypeStr = getSensorTypeStringFromPath(path);
+    auto findSensor = sensorUnitStr.find(sensorTypeStr.c_str());
+    if (findSensor != sensorUnitStr.end())
+    {
+        unit = findSensor->second;
+        return 0;
+    }
+    else
+        return -1;
+}
+
 void registerStorageFunctions()
 {
     // <READ FRU Data>
diff --git a/src/usb-dbg.cpp b/src/usb-dbg.cpp
index 9fa0553..6a3e1ad 100644
--- a/src/usb-dbg.cpp
+++ b/src/usb-dbg.cpp
@@ -69,7 +69,8 @@
 namespace storage
 {
 int getSensorValue(std::string &, double &);
-}
+int getSensorUnit(std::string &, std::string &);
+} // namespace storage
 
 typedef struct _sensor_desc
 {
@@ -805,6 +806,12 @@
                     senStr = senName;
 
                 senStr += ss.str();
+
+                /* Get unit string for sensor and append in output */
+                std::string unitStr;
+                if (ipmi::storage::getSensorUnit(senName, unitStr) == 0)
+                    senStr += unitStr;
+
                 frame_snr.append(senStr.c_str(), 0);
             }
             else
