This is a quick proof of concept based on this discussion that was had in the Eero forum. Eero added the ability to see the instantaneous usage per device on the network. This code attempts to aggregate those usage stats so a monthly total usage can be attributed to each device and the overall network.
PoC Goal: Integrate the instantaneous usage metric to form cumulative usage metric that can be represented in multiple timeframes.
TODO:
- Dump monitor info out console
- Dump Network details
- Expose SNMP traps
- Sanitize the API samples so they can be put in this repo
- Create a Postman collection for accessing Eero more easily
-
If you do not already have a session key you will need to generate one. This is a two step process:
-
Request verification code:
eeroMonitor --loginID=[email@example.com]
- This returns a session key and causes Eero to send a verification code via email
-
Verify code to activate session key:
eeroMonitor -verificationKey=123456 -sessionKey="6654321|232c2aoj93fvdes82eg99ase7e"
-
Monitor network usage:
eeroMonitor -sessionKey="6654321|232c2aoj93fvdes82eg99ase7e" -networkID=12345
-
-
Once the session key is is verified pass that as
-sessionKey
Login to Eero is a two stage process:
- Client sends their login id and Eero return a
hash
called auser_token
and emails a verification code to the user. - Client sets the the
user_token
as a Cookie and POSTs the verification code
Once Eero verifies the user_token
it is used in subsequent requests to access the account information.
Eero uses a REST API where the body of the requests and responses are formed in JSON. The API uses Cookie: s=[USER_TOKEN]
in each of the requests for access control.
- Base URL:
https://api-user.e2ro.com
- User-Agent:
eero-ios/2.16.0 (iPhone8,1; iOS 11.3)
- Authentication: HTTP Cookie
Name | URL | Description |
---|---|---|
Login | /2.2/login? |
Returns [USER_TOKEN], Set Cooke, send email with verification code |
/2.2/login/verify? |
Returns meta information and list of networks | |
/2.2/logout? |
Presumable un-verifies the [USER_TOKEN] | |
/2.2/log? |
||
/2.2/account? |
||
/2.2/networks/[NETWORK_ID]? |
||
/2.2/networks/[NETWORK_ID]/support? |
||
/2.2/networks/[NETWORK_ID]/burst_reporters? |
||
/2.2/networks/[NETWORK_ID]? |
||
/2.2/networks/[NETWORK_ID]/devices?thread=true |
<-- This is our target API here | |
/2.2/networks/[NETWORK_ID]/guestnetwork? |
||
/2.2/networks/[NETWORK_ID]/profiles? |
List of all devices and details about the device | |
/2.2/networks/[NETWORK_ID]/devices/[DEVICE_ID] |
It seems most responses from the Eero server has a meta dictionary that is used to determine the result of the API request. It seems to follow the HTTP status code.
"meta": {
"code": 200,
"server_time": "2020-09-21T23:00:01.123Z"
},
- Python 343max/eero-client