diff --git a/homeassistant/components/uptimerobot/binary_sensor.py b/homeassistant/components/uptimerobot/binary_sensor.py index dd7254fb1ca..e1684d64924 100644 --- a/homeassistant/components/uptimerobot/binary_sensor.py +++ b/homeassistant/components/uptimerobot/binary_sensor.py @@ -1,5 +1,4 @@ """A platform that to monitor Uptime Robot monitors.""" -from dataclasses import dataclass from datetime import timedelta import logging @@ -32,13 +31,6 @@ ATTRIBUTION = "Data provided by Uptime Robot" PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend({vol.Required(CONF_API_KEY): cv.string}) -@dataclass -class UptimeRobotBinarySensorEntityDescription(BinarySensorEntityDescription): - """Entity description for UptimeRobotBinarySensor.""" - - target: str = "" - - async def async_setup_platform( hass: HomeAssistant, config, async_add_entities, discovery_info=None ): @@ -46,12 +38,11 @@ async def async_setup_platform( uptime_robot_api = UptimeRobot() api_key = config[CONF_API_KEY] + def api_wrapper(): + return uptime_robot_api.getMonitors(api_key) + async def async_update_data(): """Fetch data from API UptimeRobot API.""" - - def api_wrapper(): - return uptime_robot_api.getMonitors(api_key) - async with async_timeout.timeout(10): monitors = await hass.async_add_executor_job(api_wrapper) if not monitors or monitors.get("stat") != "ok": @@ -76,16 +67,15 @@ async def async_setup_platform( [ UptimeRobotBinarySensor( coordinator, - UptimeRobotBinarySensorEntityDescription( + BinarySensorEntityDescription( key=monitor["id"], name=monitor["friendly_name"], - target=monitor["url"], device_class=DEVICE_CLASS_CONNECTIVITY, ), + target=monitor["url"], ) for monitor in coordinator.data["monitors"] ], - True, ) @@ -95,28 +85,28 @@ class UptimeRobotBinarySensor(BinarySensorEntity, CoordinatorEntity): def __init__( self, coordinator: DataUpdateCoordinator, - description: UptimeRobotBinarySensorEntityDescription, + description: BinarySensorEntityDescription, + target: str, ) -> None: """Initialize Uptime Robot the binary sensor.""" super().__init__(coordinator) - self.coordinator = coordinator self.entity_description = description + self._target = target self._attr_extra_state_attributes = { ATTR_ATTRIBUTION: ATTRIBUTION, - ATTR_TARGET: self.entity_description.target, + ATTR_TARGET: self._target, } - async def async_update(self): - """Get the latest state of the binary sensor.""" - if monitor := get_monitor_by_id( - self.coordinator.data.get("monitors", []), self.entity_description.key + @property + def is_on(self) -> bool: + """Return True if the entity is on.""" + if monitor := next( + ( + monitor + for monitor in self.coordinator.data.get("monitors", []) + if monitor["id"] == self.entity_description.key + ), + None, ): - self._attr_is_on = monitor["status"] == 2 - - -def get_monitor_by_id(monitors, monitor_id): - """Return the monitor object matching the id.""" - filtered = [monitor for monitor in monitors if monitor["id"] == monitor_id] - if len(filtered) == 0: - return - return filtered[0] + return monitor["status"] == 2 + return False