diff --git a/homeassistant/components/smartthings/sensor.py b/homeassistant/components/smartthings/sensor.py
index 2c5a8b7ef39..4b78e8f40ff 100644
--- a/homeassistant/components/smartthings/sensor.py
+++ b/homeassistant/components/smartthings/sensor.py
@@ -125,6 +125,8 @@ CAPABILITY_TO_SENSORS = {
     'thermostatSetpoint': [
         Map('thermostatSetpoint', "Thermostat Setpoint", TEMP_CELSIUS,
             DEVICE_CLASS_TEMPERATURE)],
+    'threeAxis': [
+        Map('threeAxis', "Three Axis", None, None)],
     'tvChannel': [
         Map('tvChannel', "Tv Channel", None, None)],
     'tvocMeasurement': [
@@ -147,6 +149,8 @@ UNITS = {
     'F': TEMP_FAHRENHEIT
 }
 
+THREE_AXIS_NAMES = ['X Coordinate', 'Y Coordinate', 'Z Coordinate']
+
 
 async def async_setup_platform(
         hass, config, async_add_entities, discovery_info=None):
@@ -156,16 +160,22 @@ async def async_setup_platform(
 
 async def async_setup_entry(hass, config_entry, async_add_entities):
     """Add binary sensors for a config entry."""
+    from pysmartthings import Capability
     broker = hass.data[DOMAIN][DATA_BROKERS][config_entry.entry_id]
     sensors = []
     for device in broker.devices.values():
         for capability in broker.get_assigned(device.device_id, 'sensor'):
-            maps = CAPABILITY_TO_SENSORS[capability]
-            sensors.extend([
-                SmartThingsSensor(
-                    device, m.attribute, m.name, m.default_unit,
-                    m.device_class)
-                for m in maps])
+            if capability == Capability.three_axis:
+                sensors.extend(
+                    [SmartThingsThreeAxisSensor(device, index)
+                     for index in range(len(THREE_AXIS_NAMES))])
+            else:
+                maps = CAPABILITY_TO_SENSORS[capability]
+                sensors.extend([
+                    SmartThingsSensor(
+                        device, m.attribute, m.name, m.default_unit,
+                        m.device_class)
+                    for m in maps])
     async_add_entities(sensors)
 
 
@@ -176,7 +186,7 @@ def get_capabilities(capabilities: Sequence[str]) -> Optional[Sequence[str]]:
 
 
 class SmartThingsSensor(SmartThingsEntity):
-    """Define a SmartThings Binary Sensor."""
+    """Define a SmartThings Sensor."""
 
     def __init__(self, device, attribute: str, name: str,
                  default_unit: str, device_class: str):
@@ -212,3 +222,34 @@ class SmartThingsSensor(SmartThingsEntity):
         """Return the unit this state is expressed in."""
         unit = self._device.status.attributes[self._attribute].unit
         return UNITS.get(unit, unit) if unit else self._default_unit
+
+
+class SmartThingsThreeAxisSensor(SmartThingsEntity):
+    """Define a SmartThings Three Axis Sensor."""
+
+    def __init__(self, device, index):
+        """Init the class."""
+        super().__init__(device)
+        self._index = index
+
+    @property
+    def name(self) -> str:
+        """Return the name of the binary sensor."""
+        return '{} {}'.format(
+            self._device.label, THREE_AXIS_NAMES[self._index])
+
+    @property
+    def unique_id(self) -> str:
+        """Return a unique ID."""
+        return '{}.{}'.format(
+            self._device.device_id, THREE_AXIS_NAMES[self._index])
+
+    @property
+    def state(self):
+        """Return the state of the sensor."""
+        from pysmartthings import Attribute
+        three_axis = self._device.status.attributes[Attribute.three_axis].value
+        try:
+            return three_axis[self._index]
+        except (TypeError, IndexError):
+            return None
diff --git a/tests/components/smartthings/test_sensor.py b/tests/components/smartthings/test_sensor.py
index 879aae1994d..1ae9c0e9e73 100644
--- a/tests/components/smartthings/test_sensor.py
+++ b/tests/components/smartthings/test_sensor.py
@@ -11,7 +11,8 @@ from homeassistant.components.sensor import (
 from homeassistant.components.smartthings import sensor
 from homeassistant.components.smartthings.const import (
     DOMAIN, SIGNAL_SMARTTHINGS_UPDATE)
-from homeassistant.const import ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT
+from homeassistant.const import (
+    ATTR_FRIENDLY_NAME, ATTR_UNIT_OF_MEASUREMENT, STATE_UNKNOWN)
 from homeassistant.helpers.dispatcher import async_dispatcher_send
 
 from .conftest import setup_platform
@@ -34,7 +35,7 @@ async def test_async_setup_platform():
 
 
 async def test_entity_state(hass, device_factory):
-    """Tests the state attributes properly match the light types."""
+    """Tests the state attributes properly match the sensor types."""
     device = device_factory('Sensor 1', [Capability.battery],
                             {Attribute.battery: 100})
     await setup_platform(hass, SENSOR_DOMAIN, devices=[device])
@@ -45,6 +46,38 @@ async def test_entity_state(hass, device_factory):
         device.label + " Battery"
 
 
+async def test_entity_three_axis_state(hass, device_factory):
+    """Tests the state attributes properly match the three axis types."""
+    device = device_factory('Three Axis', [Capability.three_axis],
+                            {Attribute.three_axis: [100, 75, 25]})
+    await setup_platform(hass, SENSOR_DOMAIN, devices=[device])
+    state = hass.states.get('sensor.three_axis_x_coordinate')
+    assert state.state == '100'
+    assert state.attributes[ATTR_FRIENDLY_NAME] ==\
+        device.label + " X Coordinate"
+    state = hass.states.get('sensor.three_axis_y_coordinate')
+    assert state.state == '75'
+    assert state.attributes[ATTR_FRIENDLY_NAME] ==\
+        device.label + " Y Coordinate"
+    state = hass.states.get('sensor.three_axis_z_coordinate')
+    assert state.state == '25'
+    assert state.attributes[ATTR_FRIENDLY_NAME] ==\
+        device.label + " Z Coordinate"
+
+
+async def test_entity_three_axis_invalid_state(hass, device_factory):
+    """Tests the state attributes properly match the three axis types."""
+    device = device_factory('Three Axis', [Capability.three_axis],
+                            {Attribute.three_axis: []})
+    await setup_platform(hass, SENSOR_DOMAIN, devices=[device])
+    state = hass.states.get('sensor.three_axis_x_coordinate')
+    assert state.state == STATE_UNKNOWN
+    state = hass.states.get('sensor.three_axis_y_coordinate')
+    assert state.state == STATE_UNKNOWN
+    state = hass.states.get('sensor.three_axis_z_coordinate')
+    assert state.state == STATE_UNKNOWN
+
+
 async def test_entity_and_device_attributes(hass, device_factory):
     """Test the attributes of the entity are correct."""
     # Arrange