class LuciDeviceScanner(DeviceScanner):
    """This class scans for devices connected to an OpenWrt router."""
    def __init__(self, config):
        """Initialize the scanner."""

        self.router = OpenWrtRpc(
            config[CONF_HOST],
            config[CONF_USERNAME],
            config[CONF_PASSWORD],
            config[CONF_SSL],
            config[CONF_VERIFY_SSL],
        )

        self.last_results = {}
        self.success_init = self.router.is_logged_in()

    def scan_devices(self):
        """Scan for new devices and return a list with found device IDs."""
        self._update_info()

        return [device.mac for device in self.last_results]

    def get_device_name(self, device):
        """Return the name of the given device or None if we don't know."""
        name = next(
            (result.hostname
             for result in self.last_results if result.mac == device),
            None,
        )
        return name

    def get_extra_attributes(self, device):
        """
        Get extra attributes of a device.

        Some known extra attributes that may be returned in the device tuple
        include MAC address (mac), network device (dev), IP address
        (ip), reachable status (reachable), associated router
        (host), hostname if known (hostname) among others.
        """
        device = next(
            (result for result in self.last_results if result.mac == device),
            None)
        return device._asdict()

    def _update_info(self):
        """Check the Luci router for devices."""
        result = self.router.get_all_connected_devices(only_reachable=True)

        _LOGGER.debug("Luci get_all_connected_devices returned: %s", result)

        last_results = []
        for device in result:
            if (not hasattr(self.router.router.owrt_version, "release")
                    or not self.router.router.owrt_version.release
                    or self.router.router.owrt_version.release[0] < 19
                    or device.reachable):
                last_results.append(device)

        self.last_results = last_results
Exemple #2
0
    def __init__(self, config):
        """Initialize the scanner."""
        from openwrt_luci_rpc import OpenWrtRpc

        self.router = OpenWrtRpc(config[CONF_HOST], config[CONF_USERNAME],
                                 config[CONF_PASSWORD], config[CONF_SSL])

        self.last_results = {}
        self.success_init = self.router.is_logged_in()
Exemple #3
0
class LuciDeviceScanner(DeviceScanner):
    """This class scans for devices connected to an OpenWrt router."""

    def __init__(self, config):
        """Initialize the scanner."""
        from openwrt_luci_rpc import OpenWrtRpc

        self.router = OpenWrtRpc(config[CONF_HOST],
                                 config[CONF_USERNAME],
                                 config[CONF_PASSWORD],
                                 config[CONF_SSL])

        self.last_results = {}
        self.success_init = self.router.is_logged_in()

    def scan_devices(self):
        """Scan for new devices and return a list with found device IDs."""
        self._update_info()

        return [device.mac for device in self.last_results]

    def get_device_name(self, device):
        """Return the name of the given device or None if we don't know."""
        name = next((
            result.hostname for result in self.last_results
            if result.mac == device), None)
        return name

    def get_extra_attributes(self, device):
        """
        Get extra attributes of a device.

        Some known extra attributes that may be returned in the device tuple
        include Mac Address (mac), Network Device (dev), Ip Address
        (ip), reachable status (reachable), Associated router
        (host), Hostname if known (hostname) among others.
        """
        device = next((
            result for result in self.last_results
            if result.mac == device), None)
        return device._asdict()

    def _update_info(self):
        """Check the Luci router for devices."""
        result = self.router.get_all_connected_devices(
            only_reachable=True)

        _LOGGER.debug("Luci get_all_connected_devices returned:"
                      " %s", result)

        last_results = []
        for device in result:
            last_results.append(device)

        self.last_results = last_results
    def __init__(self, config):
        """Initialize the scanner."""

        self.router = OpenWrtRpc(
            config[CONF_HOST],
            config[CONF_USERNAME],
            config[CONF_PASSWORD],
            config[CONF_SSL],
            config[CONF_VERIFY_SSL],
        )

        self.last_results = {}
        self.success_init = self.router.is_logged_in()
    def __init__(self, config):
        """Initialize the scanner."""
        from openwrt_luci_rpc import OpenWrtRpc

        self.router = OpenWrtRpc(
            config[CONF_HOST], config[CONF_USERNAME], config[CONF_PASSWORD],
            config[CONF_SSL])

        self.last_results = {}
        self.success_init = self.router.is_logged_in()
    def test_defaults(self, mock_post):
        """Test defaults are in place."""

        json_result = {
            "id": "1",
            "result": "2e9f2c44d34a10e1321de7893123123221",
            "error": None
        }

        mock_post.return_value = Mock(ok=True)
        mock_post.return_value.status_code = 200
        mock_post.return_value.json.return_value = json_result

        runner = OpenWrtRpc()
        assert runner.router.host_api_url == '{}://{}'.format(
            "http", Constants.DEFAULT_LOCAL_HOST)
        assert runner.router.username == Constants.DEFAULT_USERNAME
        assert runner.router.password == Constants.DEFAULT_PASSWORD
 def test_empty_host(self):
     """Test invalid host raises exception."""
     with self.assertRaises(LuciConfigError):
         OpenWrtRpc("")
Exemple #8
0
env_name_password = "******"

if not os.getenv(env_name_ip_address):
    log.error("You need to set the router ip environment variable. e.g. ")
    log.error("export {}=<YOUR_ROUTER_IP>".format(env_name_ip_address))
    exit(1)


if not os.getenv(env_name_password):
    log.error("You need to set the router password environment variable. e.g. ")
    log.error("export {}=<YOUR_ROUTER_PASS>".format(env_name_password))
    exit(1)


print('test valid')
r = OpenWrtRpc(os.getenv(env_name_ip_address), 'root', os.getenv(env_name_password), False)

# print('test invalid')
# r = OpenWrtRpc()


r.get_all_connected_devices(only_reachable=False)

#import ipdb
#ipdb.set_trace()
#
# r.get_all_connected_devices(only_reachable=False)
#
# import ipdb
# ipdb.set_trace()
#