text: """A platform that to monitor Uptime Robot monitors."""
  import logging
  
  from pyuptimerobot import UptimeRobot
  import voluptuous as vol
  
  from homeassistant.components.binary_sensor import PLATFORM_SCHEMA, BinarySensorDevice
  from homeassistant.const import ATTR_ATTRIBUTION, CONF_API_KEY
  import homeassistant.helpers.config_validation as cv
  
  _LOGGER = logging.getLogger(__name__)
  
  ATTR_TARGET = "target"
  
  ATTRIBUTION = "Data provided by Uptime Robot"
  
  PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({vol.Required(CONF_API_KEY): cv.string})
  
  
  def setup_platform(hass, config, add_entities, discovery_info=None):
      """Set up the Uptime Robot binary_sensors."""
  
      up_robot = UptimeRobot()
      api_key = config.get(CONF_API_KEY)
      monitors = up_robot.getMonitors(api_key)
  
      devices = []
      if not monitors or monitors.get("stat") != "ok":
          _LOGGER.error("Error connecting to Uptime Robot")
          return
  
      for monitor in monitors["monitors"]:
          devices.append(
              UptimeRobotBinarySensor(
                  api_key,
                  up_robot,
                  monitor["id"],
                  monitor["friendly_name"],
                  monitor["url"],
              )
          )
  
      add_entities(devices, True)
  
  
  class UptimeRobotBinarySensor(BinarySensorDevice):
      """Representation of a Uptime Robot binary sensor."""
  
      def __init__(self, api_key, up_robot, monitor_id, name, target):
          """Initialize Uptime Robot the binary sensor."""
          self._api_key = api_key
          self._monitor_id = str(monitor_id)
          self._name = name
          self._target = target
          self._up_robot = up_robot
          self._state = None
  
      @property
      def name(self):
          """Return the name of the binary sensor."""
          return self._name
  
      @property
      def is_on(self):
          """Return the state of the binary sensor."""
          return self._state
  
      @property
      def device_class(self):
          """Return the class of this device, from component DEVICE_CLASSES."""
          return "connectivity"
  
      @property
      def device_state_attributes(self):
          """Return the state attributes of the binary sensor."""
          return {ATTR_ATTRIBUTION: ATTRIBUTION, ATTR_TARGET: self._target}
  
      def update(self):
          """Get the latest state of the binary sensor."""
          monitor = self._up_robot.getMonitors(self._api_key, self._monitor_id)
          if not monitor or monitor.get("stat") != "ok":
              _LOGGER.warning("Failed to get new state")
              return
          status = monitor["monitors"][0]["status"]
          self._state = 1 if status == 2 else 0
  