text: """Support for monitoring an OpenEVSE Charger."""
  import logging
  
  from requests import RequestException
  import voluptuous as vol
  
  import homeassistant.helpers.config_validation as cv
  from homeassistant.components.sensor import PLATFORM_SCHEMA
  from homeassistant.const import (
      TEMP_CELSIUS,
      CONF_HOST,
      ENERGY_KILO_WATT_HOUR,
      CONF_MONITORED_VARIABLES,
  )
  from homeassistant.helpers.entity import Entity
  
  _LOGGER = logging.getLogger(__name__)
  
  SENSOR_TYPES = {
      "status": ["Charging Status", None],
      "charge_time": ["Charge Time Elapsed", "minutes"],
      "ambient_temp": ["Ambient Temperature", TEMP_CELSIUS],
      "ir_temp": ["IR Temperature", TEMP_CELSIUS],
      "rtc_temp": ["RTC Temperature", TEMP_CELSIUS],
      "usage_session": ["Usage this Session", ENERGY_KILO_WATT_HOUR],
      "usage_total": ["Total Usage", ENERGY_KILO_WATT_HOUR],
  }
  
  PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
      {
          vol.Required(CONF_HOST): cv.string,
          vol.Optional(CONF_MONITORED_VARIABLES, default=["status"]): vol.All(
              cv.ensure_list, [vol.In(SENSOR_TYPES)]
          ),
      }
  )
  
  
  def setup_platform(hass, config, add_entities, discovery_info=None):
      """Set up the OpenEVSE sensor."""
      import openevsewifi
  
      host = config.get(CONF_HOST)
      monitored_variables = config.get(CONF_MONITORED_VARIABLES)
  
      charger = openevsewifi.Charger(host)
  
      dev = []
      for variable in monitored_variables:
          dev.append(OpenEVSESensor(variable, charger))
  
      add_entities(dev, True)
  
  
  class OpenEVSESensor(Entity):
      """Implementation of an OpenEVSE sensor."""
  
      def __init__(self, sensor_type, charger):
          """Initialize the sensor."""
          self._name = SENSOR_TYPES[sensor_type][0]
          self.type = sensor_type
          self._state = None
          self.charger = charger
          self._unit_of_measurement = SENSOR_TYPES[sensor_type][1]
  
      @property
      def name(self):
          """Return the name of the sensor."""
          return self._name
  
      @property
      def state(self):
          """Return the state of the sensor."""
          return self._state
  
      @property
      def unit_of_measurement(self):
          """Return the unit of measurement of this sensor."""
          return self._unit_of_measurement
  
      def update(self):
          """Get the monitored data from the charger."""
          try:
              if self.type == "status":
                  self._state = self.charger.getStatus()
              elif self.type == "charge_time":
                  self._state = self.charger.getChargeTimeElapsed() / 60
              elif self.type == "ambient_temp":
                  self._state = self.charger.getAmbientTemperature()
              elif self.type == "ir_temp":
                  self._state = self.charger.getIRTemperature()
              elif self.type == "rtc_temp":
                  self._state = self.charger.getRTCTemperature()
              elif self.type == "usage_session":
                  self._state = float(self.charger.getUsageSession()) / 1000
              elif self.type == "usage_total":
                  self._state = float(self.charger.getUsageTotal()) / 1000
              else:
                  self._state = "Unknown"
          except (RequestException, ValueError, KeyError):
              _LOGGER.warning("Could not update status for %s", self.name)
  