diff --git a/.coveragerc b/.coveragerc
index 6401a1dad1eac1bf318d369f447c77150d655000..792da89e4c6c2e57952dbfc6db61b143e5d765ae 100644
--- a/.coveragerc
+++ b/.coveragerc
@@ -121,6 +121,7 @@ omit =
     homeassistant/components/sensor/eliqonline.py
     homeassistant/components/sensor/forecast.py
     homeassistant/components/sensor/glances.py
+    homeassistant/components/sensor/mfi.py
     homeassistant/components/sensor/netatmo.py
     homeassistant/components/sensor/onewire.py
     homeassistant/components/sensor/openweathermap.py
diff --git a/homeassistant/components/sensor/mfi.py b/homeassistant/components/sensor/mfi.py
new file mode 100644
index 0000000000000000000000000000000000000000..8864809e1cb7a18f8f4102af80e82232fa82bac1
--- /dev/null
+++ b/homeassistant/components/sensor/mfi.py
@@ -0,0 +1,108 @@
+"""
+homeassistant.components.sensor.mfi
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+Support for Ubiquiti mFi Sensors.
+
+Configuration:
+
+sensor:
+  platform: mfi
+  host: ADDRESS
+  port: PORT
+  username: USERNAME
+  password: PASSWORD
+
+Variable:
+
+host
+*Required
+ADDRESS is the IP or hostname of your mFi controller.
+
+port
+*Optional
+PORT is the port of your mFi controller (usually 6443)
+
+username
+*Required
+USERNAME is the mFi admin username
+
+password
+*Required
+PASSWORD is the mFi admin user's password
+"""
+
+import logging
+
+from homeassistant.const import (CONF_USERNAME, CONF_PASSWORD,
+                                 TEMP_CELCIUS)
+from homeassistant.components.sensor import DOMAIN
+from homeassistant.helpers.entity import Entity
+from homeassistant.helpers import validate_config
+
+REQUIREMENTS = ['mficlient==0.2']
+
+_LOGGER = logging.getLogger(__name__)
+
+SENSOR_MODELS = [
+    'Ubiquiti mFi-THS',
+    'Ubiquiti mFi-CS',
+    'Outlet',
+]
+
+
+# pylint: disable=unused-variable
+def setup_platform(hass, config, add_devices, discovery_info=None):
+    """ Sets up mFi sensors. """
+
+    if not validate_config({DOMAIN: config},
+                           {DOMAIN: ['host',
+                                     CONF_USERNAME,
+                                     CONF_PASSWORD]},
+                           _LOGGER):
+        _LOGGER.error('A host, username, and password are required')
+        return False
+
+    host = config.get('host')
+    port = int(config.get('port', 6443))
+    username = config.get(CONF_USERNAME)
+    password = config.get(CONF_PASSWORD)
+
+    from mficlient.client import MFiClient
+
+    try:
+        client = MFiClient(host, username, password, port=port)
+    except client.FailedToLogin as ex:
+        _LOGGER.error('Unable to connect to mFi: %s', str(ex))
+        return False
+
+    add_devices(MfiSensor(port, hass)
+                for device in client.get_devices()
+                for port in device.ports.values()
+                if port.model in SENSOR_MODELS)
+
+
+class MfiSensor(Entity):
+    """ An mFi sensor that exposes tag=value. """
+
+    def __init__(self, port, hass):
+        self._port = port
+        self._hass = hass
+
+    @property
+    def name(self):
+        return self._port.label
+
+    @property
+    def state(self):
+        return self._port.value
+
+    @property
+    def unit_of_measurement(self):
+        if self._port.tag == 'temperature':
+            return TEMP_CELCIUS
+        elif self._port.tag == 'active_pwr':
+            return 'Watts'
+        return self._port.tag
+
+    def update(self):
+        self._port.refresh()
diff --git a/requirements_all.txt b/requirements_all.txt
index 23a758240a576ab4ca480f8409692648e7643cf1..d83adfa82a2752c5b66050d5733b39bc01d24764 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -105,6 +105,9 @@ liffylights==0.9.4
 # homeassistant.components.light.limitlessled
 limitlessled==1.0.0
 
+# homeassistant.components.sensor.mfi
+mficlient==0.2
+
 # homeassistant.components.discovery
 netdisco==0.5.2