eero-client


Nameeero-client JSON
Version 2.2.2 PyPI version JSON
download
home_pagehttps://github.com/EvanSchalton/eero-client
SummaryManage eero network devices
upload_time2024-08-19 04:23:53
maintainerNone
docs_urlNone
authorEvan Schalton
requires_python>=3.10
licenseMIT License
keywords eero
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Unofficial client for [Eero Mesh Routers](https://eero.com)


# SDK Design Considerations
The SDK leverages pydantic to return models for all supported endpoints, endpoints are created using a method factory and configurations in the [routes.py](/eero//client//routes/routes.py) file allowing for easy extension.

- `GET` Methods are exposed as class properties
- `POST` Methods are exposed as class methods with `**kwargs` for route params (if applicable).

As this is an undocumented API, I was only able to create models for the objects returned in my network, please consider contributing / updating models if your network has additional parameters.


# Usage Example
[example.ipynb](/example.ipynb)

## Authentication
```
from eero import Eero, FileSessionStorage

session = FileSessionStorage("session.cookie")
eero = Eero(session=session)

if not eero.is_authenticated:
    auth_source = input("Phone Number or Email: ")
    user_token = eero.login(auth_source)
    verification_code = input("verification key from email or SMS: ")
    eero.login_verify(verification_code, user_token)
```

## Routes
### Get Requests
[GET_RESOURCES](/eero//client/routes/routes.py) defines the get properties in the structure of `{property_name: tuple[url, response_model]}`

The following get properties are defined:
```
account
ac_compat
device_blacklist
devices
diagnostics
eeros
forwards
ouicheck
guestnetwork
profiles
reservations
speedtest
updates
support
insights
routing
thread
networks
```
### Post Requests
[POST_RESOURCES](/eero//client/routes/routes.py) defines the post methods in the structure of `{property_name: tuple[url, response_model]}`

The following get properties are defined:
```
burst_reporters
reboot
reboot_eero - takes in the id of the error to reboot, available from the client.eeros get endpoint. 
run_speedtest
```
# Inspiration
Thank you to `Max von Webel` for his original work, [eero-client](https://github.com/343max/eero-client), I hadn't considered accesssing my router's data until I saw his project and only opted to fork and rewrite to add more of my own opinionated design patterns.

# Future Plans
## Device Triangulation
I played with the idea of using the signal strength for each connected device captured while looping over the network turn off all but one eero at a time, and the relative 3D coordinates of the eero devices to create a 3D rendering of all of the devices in my home. This worked decently well for devices in a room with an eero, but for obstructed devices their positions there were too many intersection points with a mesh of four units. If I circle back to this in the future I may add code in a post. 

## Home Assistant Integration
My next goal is to expose the eeros & devices in Home Assistant through an integration, when I'm successful I'll post a link to that repo/HACS integration here my intent is to use this SDK as the foundation for that work.

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/EvanSchalton/eero-client",
    "name": "eero-client",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": null,
    "keywords": "eero",
    "author": "Evan Schalton",
    "author_email": "Evan.Schalton@Gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/e8/c5/b7fcac00ba07b2cb31423aa132d19696e072a99f2ce1eadf4f655e2045b8/eero-client-2.2.2.tar.gz",
    "platform": null,
    "description": "# Unofficial client for [Eero Mesh Routers](https://eero.com)\n\n\n# SDK Design Considerations\nThe SDK leverages pydantic to return models for all supported endpoints, endpoints are created using a method factory and configurations in the [routes.py](/eero//client//routes/routes.py) file allowing for easy extension.\n\n- `GET` Methods are exposed as class properties\n- `POST` Methods are exposed as class methods with `**kwargs` for route params (if applicable).\n\nAs this is an undocumented API, I was only able to create models for the objects returned in my network, please consider contributing / updating models if your network has additional parameters.\n\n\n# Usage Example\n[example.ipynb](/example.ipynb)\n\n## Authentication\n```\nfrom eero import Eero, FileSessionStorage\n\nsession = FileSessionStorage(\"session.cookie\")\neero = Eero(session=session)\n\nif not eero.is_authenticated:\n    auth_source = input(\"Phone Number or Email: \")\n    user_token = eero.login(auth_source)\n    verification_code = input(\"verification key from email or SMS: \")\n    eero.login_verify(verification_code, user_token)\n```\n\n## Routes\n### Get Requests\n[GET_RESOURCES](/eero//client/routes/routes.py) defines the get properties in the structure of `{property_name: tuple[url, response_model]}`\n\nThe following get properties are defined:\n```\naccount\nac_compat\ndevice_blacklist\ndevices\ndiagnostics\neeros\nforwards\nouicheck\nguestnetwork\nprofiles\nreservations\nspeedtest\nupdates\nsupport\ninsights\nrouting\nthread\nnetworks\n```\n### Post Requests\n[POST_RESOURCES](/eero//client/routes/routes.py) defines the post methods in the structure of `{property_name: tuple[url, response_model]}`\n\nThe following get properties are defined:\n```\nburst_reporters\nreboot\nreboot_eero - takes in the id of the error to reboot, available from the client.eeros get endpoint. \nrun_speedtest\n```\n# Inspiration\nThank you to `Max von Webel` for his original work, [eero-client](https://github.com/343max/eero-client), I hadn't considered accesssing my router's data until I saw his project and only opted to fork and rewrite to add more of my own opinionated design patterns.\n\n# Future Plans\n## Device Triangulation\nI played with the idea of using the signal strength for each connected device captured while looping over the network turn off all but one eero at a time, and the relative 3D coordinates of the eero devices to create a 3D rendering of all of the devices in my home. This worked decently well for devices in a room with an eero, but for obstructed devices their positions there were too many intersection points with a mesh of four units. If I circle back to this in the future I may add code in a post. \n\n## Home Assistant Integration\nMy next goal is to expose the eeros & devices in Home Assistant through an integration, when I'm successful I'll post a link to that repo/HACS integration here my intent is to use this SDK as the foundation for that work.\n",
    "bugtrack_url": null,
    "license": "MIT License",
    "summary": "Manage eero network devices",
    "version": "2.2.2",
    "project_urls": {
        "Homepage": "https://github.com/EvanSchalton/eero-client"
    },
    "split_keywords": [
        "eero"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "2fea54ea35149ceb7efc688cb1f555bfdceb0f86c5555b9385680c915102f957",
                "md5": "57c3bc338125d681feb2bf98ab8b1908",
                "sha256": "c137d9e7d00ad51b3dee6dd97c712b8be5f1eb34d04f7372946e42e0ddd2a588"
            },
            "downloads": -1,
            "filename": "eero_client-2.2.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "57c3bc338125d681feb2bf98ab8b1908",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 22289,
            "upload_time": "2024-08-19T04:23:51",
            "upload_time_iso_8601": "2024-08-19T04:23:51.632128Z",
            "url": "https://files.pythonhosted.org/packages/2f/ea/54ea35149ceb7efc688cb1f555bfdceb0f86c5555b9385680c915102f957/eero_client-2.2.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "e8c5b7fcac00ba07b2cb31423aa132d19696e072a99f2ce1eadf4f655e2045b8",
                "md5": "2db0ba47cbc57cd3df02dad70608a493",
                "sha256": "cc2d8dc4e5f09349eeb61e1b2accdba6b714cfea7babb0cd802bbbea1ae9fb13"
            },
            "downloads": -1,
            "filename": "eero-client-2.2.2.tar.gz",
            "has_sig": false,
            "md5_digest": "2db0ba47cbc57cd3df02dad70608a493",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 16594,
            "upload_time": "2024-08-19T04:23:53",
            "upload_time_iso_8601": "2024-08-19T04:23:53.127751Z",
            "url": "https://files.pythonhosted.org/packages/e8/c5/b7fcac00ba07b2cb31423aa132d19696e072a99f2ce1eadf4f655e2045b8/eero-client-2.2.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-08-19 04:23:53",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "EvanSchalton",
    "github_project": "eero-client",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "requirements": [],
    "lcname": "eero-client"
}
        
Elapsed time: 0.41421s