diff --git a/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp b/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
new file mode 100644
index 0000000..8737eba
--- /dev/null
+++ b/phosphor-regulators/src/actions/pmbus_read_sensor_action.hpp
@@ -0,0 +1,179 @@
+/**
+ * Copyright © 2020 IBM Corporation
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#pragma once
+
+#include "action_environment.hpp"
+#include "i2c_action.hpp"
+#include "i2c_interface.hpp"
+#include "pmbus_utils.hpp"
+
+#include <cstdint>
+#include <optional>
+#include <stdexcept>
+#include <string>
+
+namespace phosphor::power::regulators
+{
+
+/**
+ * @class PMBusReadSensorAction
+ *
+ * Reads one sensor for a PMBus regulator rail. Communicates with the device
+ * directly using the I2C interface.
+ *
+ * Implements the pmbus_read_sensor action in the JSON config file.
+ *
+ * Currently supports the linear_11 and linear_16 sensor data formats.
+ *
+ * The linear_16 data format requires an exponent value.  The exponent value
+ * can be specified in the constructor.  Otherwise the exponent value will be
+ * obtained from the PMBus VOUT_MODE command.  Note that some PMBus devices do
+ * not support the VOUT_MODE command.  The exponent value for a device is often
+ * found in the device documentation (data sheet).
+ */
+class PMBusReadSensorAction : public I2CAction
+{
+  public:
+    // Specify which compiler-generated methods we want
+    PMBusReadSensorAction() = delete;
+    PMBusReadSensorAction(const PMBusReadSensorAction&) = delete;
+    PMBusReadSensorAction(PMBusReadSensorAction&&) = delete;
+    PMBusReadSensorAction& operator=(const PMBusReadSensorAction&) = delete;
+    PMBusReadSensorAction& operator=(PMBusReadSensorAction&&) = delete;
+    virtual ~PMBusReadSensorAction() = default;
+
+    /**
+     * Constructor.
+     *
+     * @param type Sensor value type.
+     * @param command PMBus command code.
+     * @param format Data format of the sensor value returned by the device.
+     * @param exponent Exponent value for linear_16 data format.
+     *                 Can be positive or negative. If not specified, the
+     *                 exponent value will be read from VOUT_MODE.
+     *                 Should not be specified if the data format is linear_11.
+     */
+    explicit PMBusReadSensorAction(pmbus_utils::SensorValueType type,
+                                   uint8_t command,
+                                   pmbus_utils::SensorDataFormat format,
+                                   std::optional<int8_t> exponent) :
+        type{type},
+        command{command}, format{format}, exponent{exponent}
+    {
+    }
+
+    /**
+     * Executes this action.
+     *
+     * TODO: Not implemented yet
+     *
+     * @param environment Action execution environment.
+     * @return true
+     */
+    virtual bool execute(ActionEnvironment& /* environment */) override
+    {
+        // TODO: Not implemented yet
+        return true;
+    }
+
+    /**
+     * Returns the PMBus command code.
+     *
+     * @return command
+     */
+    uint8_t getCommand() const
+    {
+        return command;
+    }
+
+    /**
+     * Returns the optional exponent value for linear_16 data format.
+     *
+     * @return optional exponent value
+     */
+    std::optional<int8_t> getExponent() const
+    {
+        return exponent;
+    }
+
+    /**
+     * Returns the data format of the sensor value returned by the device.
+     *
+     * @return data format
+     */
+    pmbus_utils::SensorDataFormat getFormat() const
+    {
+        return format;
+    }
+
+    /**
+     * Returns the sensor value type.
+     *
+     * @return sensor value type.
+     */
+    pmbus_utils::SensorValueType getType() const
+    {
+        return type;
+    }
+
+    /**
+     * Returns a string description of this action.
+     *
+     * @return description of action
+     */
+    virtual std::string toString() const override
+    {
+        std::ostringstream ss;
+        ss << "pmbus_read_sensor: { ";
+        ss << "type: " << pmbus_utils::toString(type) << ", " << std::hex
+           << std::uppercase;
+        ss << "command: 0x" << static_cast<uint16_t>(command) << ", "
+           << std::dec << std::nouppercase;
+        ss << "format: " << pmbus_utils::toString(format);
+
+        if (exponent.has_value())
+        {
+            ss << ", exponent: " << static_cast<int16_t>(exponent.value());
+        }
+
+        ss << " }";
+
+        return ss.str();
+    }
+
+  private:
+    /**
+     * Sensor value type.
+     */
+    const pmbus_utils::SensorValueType type{};
+
+    /**
+     * PMBus command code.
+     */
+    const uint8_t command{};
+
+    /**
+     * Data format of the sensor value returned by the device.
+     */
+    const pmbus_utils::SensorDataFormat format{};
+
+    /**
+     * Optional exponent value for linear_16 data format.
+     */
+    const std::optional<int8_t> exponent{};
+};
+
+} // namespace phosphor::power::regulators
diff --git a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
index 238e2f2..2a245a9 100644
--- a/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
+++ b/phosphor-regulators/src/actions/pmbus_write_vout_command_action.cpp
@@ -81,8 +81,7 @@
         ss << "volts: " << volts.value() << ", ";
     }
 
-    // Only linear format is currently supported
-    ss << "format: linear";
+    ss << "format: " << pmbus_utils::toString(format);
 
     if (exponent.has_value())
     {
diff --git a/phosphor-regulators/src/pmbus_utils.cpp b/phosphor-regulators/src/pmbus_utils.cpp
index 87a91b6..eb9e117 100644
--- a/phosphor-regulators/src/pmbus_utils.cpp
+++ b/phosphor-regulators/src/pmbus_utils.cpp
@@ -58,4 +58,76 @@
     parameter = static_cast<int8_t>(parameterField);
 }
 
+std::string toString(SensorDataFormat format)
+{
+    std::string returnValue{};
+    switch (format)
+    {
+        case SensorDataFormat::linear_11:
+            returnValue = "linear_11";
+            break;
+        case SensorDataFormat::linear_16:
+            returnValue = "linear_16";
+            break;
+    }
+    return returnValue;
+}
+
+std::string toString(SensorValueType type)
+{
+    std::string returnValue{};
+    switch (type)
+    {
+        case SensorValueType::iout:
+            returnValue = "iout";
+            break;
+        case SensorValueType::iout_peak:
+            returnValue = "iout_peak";
+            break;
+        case SensorValueType::iout_valley:
+            returnValue = "iout_valley";
+            break;
+        case SensorValueType::pout:
+            returnValue = "pout";
+            break;
+        case SensorValueType::temperature:
+            returnValue = "temperature";
+            break;
+        case SensorValueType::temperature_peak:
+            returnValue = "temperature_peak";
+            break;
+        case SensorValueType::vout:
+            returnValue = "vout";
+            break;
+        case SensorValueType::vout_peak:
+            returnValue = "vout_peak";
+            break;
+        case SensorValueType::vout_valley:
+            returnValue = "vout_valley";
+            break;
+    }
+    return returnValue;
+}
+
+std::string toString(VoutDataFormat format)
+{
+    std::string returnValue{};
+    switch (format)
+    {
+        case VoutDataFormat::linear:
+            returnValue = "linear";
+            break;
+        case VoutDataFormat::vid:
+            returnValue = "vid";
+            break;
+        case VoutDataFormat::direct:
+            returnValue = "direct";
+            break;
+        case VoutDataFormat::ieee:
+            returnValue = "ieee";
+            break;
+    }
+    return returnValue;
+}
+
 } // namespace phosphor::power::regulators::pmbus_utils
diff --git a/phosphor-regulators/src/pmbus_utils.hpp b/phosphor-regulators/src/pmbus_utils.hpp
index 599c236..5e2e270 100644
--- a/phosphor-regulators/src/pmbus_utils.hpp
+++ b/phosphor-regulators/src/pmbus_utils.hpp
@@ -17,6 +17,7 @@
 
 #include <cmath>
 #include <cstdint>
+#include <string>
 
 /**
  * @namespace pmbus_utils
@@ -38,6 +39,78 @@
 const uint8_t VOUT_COMMAND{0x21u};
 
 /**
+ * Sensor data format.
+ */
+enum class SensorDataFormat
+{
+    /**
+     * Linear data format used for values not related to voltage output, such
+     * as output current, input voltage, and temperature. Two byte value with
+     * an 11-bit, two's complement mantissa and a 5-bit, two's complement
+     * exponent.
+     */
+    linear_11,
+
+    /**
+     * Linear data format used for values related to voltage output. Two
+     * byte (16-bit), unsigned integer that is raised to the power of an
+     * exponent. The exponent is not stored within the two bytes.
+     */
+    linear_16
+};
+
+/**
+ * Sensor Value Type.
+ */
+enum class SensorValueType
+{
+    /**
+     * Output current.
+     */
+    iout,
+
+    /**
+     * Highest output current.
+     */
+    iout_peak,
+
+    /**
+     * Lowest output current.
+     */
+    iout_valley,
+
+    /**
+     * Output power.
+     */
+    pout,
+
+    /**
+     * Temperature.
+     */
+    temperature,
+
+    /**
+     * Highest temperature.
+     */
+    temperature_peak,
+
+    /**
+     * Output voltage.
+     */
+    vout,
+
+    /**
+     * Highest output voltage.
+     */
+    vout_peak,
+
+    /**
+     * Lowest output voltage.
+     */
+    vout_valley
+};
+
+/**
  * Data formats for output voltage.
  *
  * These formats are used for commanding and reading output voltage and related
@@ -88,6 +161,30 @@
                    int8_t& parameter);
 
 /**
+ * Converts the specified SensorDataFormat value to a string.
+ *
+ * @param format SensorDataFormat value
+ * @return string corresponding to the enum value
+ */
+std::string toString(SensorDataFormat format);
+
+/**
+ * Converts the specified SensorValueType value to string.
+ *
+ * @param type SensorValueType type
+ * @return string corresponding to the enum value
+ */
+std::string toString(SensorValueType type);
+
+/**
+ * Converts the specified VoutDataFormat value to string.
+ *
+ * @param format VoutDataFormat format
+ * @return string corresponding to the enum value
+ */
+std::string toString(VoutDataFormat format);
+
+/**
  * Converts a volts value to the linear data format for output voltage.
  *
  * This data format consists of the following:
