Giter VIP home page Giter VIP logo

asusrouter's Introduction

Hello there,

I am Yevhenii and I am randomly doing something. This something includes a few open-source projects to integrate devices into smart homes ๐Ÿ ๐ŸŒ

P.S. I am also writing about something I am doing. Check it out here: How I was deciphering PDF417 without any manual. The full list can be found in this repository.

Buy Me A Coffee

asusrouter's People

Contributors

dependabot[bot] avatar imarkus avatar thecjw avatar vaskivskyi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

asusrouter's Issues

How do you use this?

How to use this? there are no examples or README has very limited information

[DEVICES] New devices have different WAN traffic limit

Newer devices (e.g. RT-AX88U) have a different limit on traffic count than 4 GB, as it was before (e.g. RT-AC66U)

Either a list of known devices should be implemented, or this data should be fetched from the device automatically

If not implemented, this will result in large spikes in the calculated speeds when the value overflows

Get CPU temperature working in Netgear R6300V2 running Merlin 380.70

CPU temperature is not working on Netgear R6300V2 router running Merlin 380.70

"cpu": ['curr_cpuTemp="([0-9.]+)"'],

^Above does not match what I have from my router's /ajax_coretmp.asp:

curr_coreTmp_2_raw = "44°C";
curr_coreTmp_2 = (curr_coreTmp_2_raw.indexOf("disabled") > 0 ? 0 : curr_coreTmp_2_raw.replace("°C", ""));
curr_coreTmp_5_raw = "47°C";
curr_coreTmp_5 = (curr_coreTmp_5_raw.indexOf("disabled") > 0 ? 0 : curr_coreTmp_5_raw.replace("°C", ""));
curr_coreTmp_cpu = "58";

It's actually curr_coreTmp_cpu rather than curr_cpuTemp

I have not checked whether this applies to: (a) stock Asus, or (b) Merlin specific or (c) customization specifically made for Netgear devices. Although (c) seems highly unlikely.

Thanks for your awesome ha integration anyway!

No support for `chpass.cgi` endpoint

I was looking for a way to post a change to the router login with this API and saw there is not support for submitting a GET to chpass.cgi which allows for changing username and password for the router login.

"Enable block all devices" toggle

Hi,

Thank you for this wonderful library. I tried running the example script and enabling/disabling parental controls, and everything worked like a charm with my Asus-Merlin AXE-16000.

I am trying to toggle internet access to the whole network and there is a setting for it in parental controls, called 'Enable block all devices", however, I do not see any way of toggling it through this project. Is there a way this functionality can be supported?

image

AsusData.CLIENTS is not serialiazble when trying to convert to JSON

Hello @Vaskivskyi,
I really like your library, as I want to do some automation with it (specifically switching back 5GHz Channels to DSF >100 if Radar-Detection swaps it with something like 36 / 40 and the like).

However I think I bumped into an error
data= loop.run_until_complete(router.async_get_data(AsusData.CLIENTS)
if I do the following

json.dumps(data)


Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python3.11/json/__init__.py", line 231, in dumps
    return _default_encoder.encode(obj)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 200, in encode
    chunks = self.iterencode(o, _one_shot=True)
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 258, in iterencode
    return _iterencode(o, 0)
           ^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/json/encoder.py", line 180, in default
    raise TypeError(f'Object of type {o.__class__.__name__} '
TypeError: Object of type AsusClient is not JSON serializable

Any clues? Did I miss something?
Thank you,
Joachim

aiohttp.ClientSession is unclosed after disconnect calls

Hello!

I noticed when running examples from the documentation, that after calling router.async_disconnect(), there is a message printed to stdout:

async def gather_data(host, username, password, use_ssl):
    """Method to gether the known data"""
    # async with aiohttp.ClientSession() as session:
        # Initialize
    router = AsusRouter(
        hostname=host, username=username, password=password,
        use_ssl=use_ssl,
    )

    # Connect
    await router.async_connect()

    # Get the client list
    clients = await router.async_get_data(AsusData.CLIENTS)
    for client in clients.items():
        print(client)

    # Disconnect
    await router.async_disconnect()



if __name__ == '__main__':
    _host = "asusrouter.com"
    _username = "USERNAME"
    _passwsord = "PASSWORD"
    _use_ssl = False
    loop = asyncio.new_event_loop()
    loop.run_until_complete(gather_data(_host, _username, _password, _use_ssl))


>> Unclosed client session
>> client_session: <aiohttp.client.ClientSession object at 0x10ae37990>

Digging into it, it does not look like aiohttp.client.ClientSessions created by asusrouter.connection.Connectionfunctions are ever expressly closed.

This could be fine if the API required the user to explicitly create a new Session themselves in a context manager and pass that reference to the AsusRouter constructor, but the signature for AsusRouter shows session as being Optional with a default of None.

This also crops up if a user defined ClientSession is passed and then closed before another API call is made. For example, in Connection._make_post_request a new ClientSession is created if none exists or is closed,

        # Check if a session is available
        if self._session is None or self._session.closed:
            # If no session is available, we cannot be connected to the device
            _LOGGER.debug("No session available. Creating a new one")
            # We will create a new session and retry the request
            self.reset_connection()
            self._session = self._new_session()
            # Reconnect
            await self.async_connect()
            # Retry the request
            return await self._make_post_request(endpoint, payload, headers)

but this Session is outside of a user's control to close themselves and Connection does not close that session.

I might have missed some function that makes this a non-issue, in which case I would just ask that the documentation reflect this as an example :)

Traffic analyzer info

Hi,

Is there a way to use this to fetch usage information? This is the type of things in the "Traffic Analyzer" section of the webui:

image

Right now I'm doing some sketchy logic where I ssh to the router, fetch the /jffs/.sys/TrafficAnalyzer/TrafficAnalyzer.db file then locally fudge with it. Though was wondering if a more legit API exists.

Thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.