Esempio n. 1
0
def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the Uptime Robot binary_sensors."""
    from pyuptimerobot import UptimeRobot

    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)
Esempio n. 2
0
    async def _validate_input(
        self,
        data: dict[str,
                   Any]) -> tuple[dict[str, str], UptimeRobotAccount | None]:
        """Validate the user input allows us to connect."""
        errors: dict[str, str] = {}
        response: UptimeRobotApiResponse | UptimeRobotApiError | None = None
        key: str = data[CONF_API_KEY]
        if key.startswith("ur") or key.startswith("m"):
            LOGGER.error("Wrong API key type detected, use the 'main' API key")
            errors["base"] = "not_main_key"
            return errors, None
        uptime_robot_api = UptimeRobot(key, async_get_clientsession(self.hass))

        try:
            response = await uptime_robot_api.async_get_account_details()
        except UptimeRobotAuthenticationException as exception:
            LOGGER.error(exception)
            errors["base"] = "invalid_api_key"
        except UptimeRobotException as exception:
            LOGGER.error(exception)
            errors["base"] = "cannot_connect"
        except Exception as exception:  # pylint: disable=broad-except
            LOGGER.exception(exception)
            errors["base"] = "unknown"
        else:
            if response.status != API_ATTR_OK:
                errors["base"] = "unknown"
                LOGGER.error(response.error.message)

        account: UptimeRobotAccount | None = (
            response.data
            if response and response.data and response.data.email else None)

        return errors, account
Esempio n. 3
0
def setup_platform(hass, config, add_devices, discovery_info=None):
    """Set up the Uptime Robot binary_sensors."""
    from pyuptimerobot import UptimeRobot

    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_devices(devices, True)
Esempio n. 4
0
def setup_platform(hass, config, add_entities, discovery_info=None):
    """Set up the Uptime Robot binary_sensors."""
    from pyuptimerobot import UptimeRobot

    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)
Esempio n. 5
0
def setup_platform(hass, config, add_devices, discovery_info=None):
    """Set up the Uptime Robot sensors."""
    from pyuptimerobot import UptimeRobot

    up_robot = UptimeRobot()
    apikey = config.get(CONF_API_KEY)
    monitors = up_robot.getMonitors(apikey)

    devices = []
    if not monitors or monitors.get('stat') != 'ok':
        error = monitors.get('error', {})
        _LOGGER.error(error.get('message', 'Something terrible happend :('))
        return False

    for monitor in monitors['monitors']:
        devices.append(UptimeRobotSensor(
            apikey, up_robot, monitorid=monitor['id'],
            name=monitor['friendly_name'], target=monitor['url']))

    add_devices(devices, True)
    return True
Esempio n. 6
0
async def async_setup_platform(hass: HomeAssistant,
                               config,
                               async_add_entities,
                               discovery_info=None):
    """Set up the Uptime Robot binary_sensors."""
    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."""
        async with async_timeout.timeout(10):
            monitors = await hass.async_add_executor_job(api_wrapper)
            if not monitors or monitors.get("stat") != "ok":
                raise UpdateFailed("Error communicating with Uptime Robot API")
            return monitors

    coordinator = DataUpdateCoordinator(
        hass,
        _LOGGER,
        name="uptimerobot",
        update_method=async_update_data,
        update_interval=timedelta(seconds=60),
    )

    await coordinator.async_refresh()

    if not coordinator.data or coordinator.data.get("stat") != "ok":
        _LOGGER.error("Error connecting to Uptime Robot")
        raise PlatformNotReady()

    async_add_entities([
        UptimeRobotBinarySensor(
            coordinator,
            BinarySensorEntityDescription(
                key=monitor["id"],
                name=monitor["friendly_name"],
                device_class=DEVICE_CLASS_CONNECTIVITY,
            ),
            target=monitor["url"],
        ) for monitor in coordinator.data["monitors"]
    ], )
Esempio n. 7
0
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
    """Set up Uptime Robot from a config entry."""
    hass.data.setdefault(DOMAIN, {})
    uptime_robot_api = UptimeRobot(
        entry.data[CONF_API_KEY], async_get_clientsession(hass)
    )
    dev_reg = await async_get_registry(hass)

    hass.data[DOMAIN][entry.entry_id] = coordinator = UptimeRobotDataUpdateCoordinator(
        hass,
        config_entry_id=entry.entry_id,
        dev_reg=dev_reg,
        api=uptime_robot_api,
    )

    await coordinator.async_config_entry_first_refresh()

    hass.config_entries.async_setup_platforms(entry, PLATFORMS)

    return True
Esempio n. 8
0
async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
    """Set up UptimeRobot from a config entry."""
    hass.data.setdefault(DOMAIN, {})
    key: str = entry.data[CONF_API_KEY]
    if key.startswith("ur") or key.startswith("m"):
        raise ConfigEntryAuthFailed(
            "Wrong API key type detected, use the 'main' API key")
    uptime_robot_api = UptimeRobot(key, async_get_clientsession(hass))
    dev_reg = dr.async_get(hass)

    hass.data[DOMAIN][
        entry.entry_id] = coordinator = UptimeRobotDataUpdateCoordinator(
            hass,
            config_entry_id=entry.entry_id,
            dev_reg=dev_reg,
            api=uptime_robot_api,
        )

    await coordinator.async_config_entry_first_refresh()

    hass.config_entries.async_setup_platforms(entry, PLATFORMS)

    return True