# Python Elmax API client
![Elmax Logo](docs/elmax-logo.png?raw=true "Elmax Logo")
Asynchronous Python API client for interacting with the Elmax Cloud services, via HTTP apis.
![Release Build Status](https://github.com/albertogeniola/elmax-api/workflows/Release/badge.svg?branch=main)
![Testing Status](https://github.com/albertogeniola/elmax-api/workflows/Testing/badge.svg?branch=main)
![Documentation](https://github.com/albertogeniola/elmax-api/workflows/Publish%20Documentation/badge.svg?branch=main)
## Installation
Use the package manager pip to install Python Elmax API client:
```bash
$ pip3 install elmax-api --user
```
or, to install it globally, use the following command
```bash
$ pip3 install elmax-api
```
## Usage
```python
import asyncio
from elmax_api.http import Elmax
from elmax_api.model.command import SwitchCommand
MY_USERNAME = 'TYPE_HERE_YOUR_ELMAX_EMAIL'
MY_PASSWORD = 'TYPE_HERE_YOUR_ELMAX_PASSWORD'
async def main():
# Instantiate the Elmax API client
client = Elmax(username=MY_USERNAME, password=MY_PASSWORD)
# List panels for your user
panels = await client.list_control_panels()
print(f"Found {len(panels)} panels for user {client.get_authenticated_username()}")
# Get online panels only
online_panels = []
for p in panels:
status = 'ONLINE' if p.online else 'OFFLINE'
print(f"+ {p.hash}: {status}")
if p.online:
online_panels.append(p)
if len(online_panels) == 0:
print("Sorry, no panel to work with. Exiting.")
exit(0)
# Fetch status of first panel
p = online_panels[0]
panel_status = await client.get_panel_status(control_panel_id=p.hash)
# Print some zone status
for z in panel_status.zones:
print(f"Zone '{z.name}' open: {z.opened}")
# Toggle some actuator
actuator = panel_status.actuators[0]
old_status = actuator.opened
print(f"Actuator {actuator.name} was {'ON' if old_status else 'OFF'}")
print(f"Switching {'OFF' if old_status else 'ON'} actuator {actuator.name}")
await client.execute_command(endpoint_id=actuator.endpoint_id, command=SwitchCommand.TURN_ON if not old_status else SwitchCommand.TURN_OFF)
print("Waiting a bit...")
await asyncio.sleep(5)
print("Reverting back original actuator status")
await client.execute_command(endpoint_id=actuator.endpoint_id,
command=SwitchCommand.TURN_ON if old_status else SwitchCommand.TURN_OFF)
print("Done!")
if __name__ == '__main__':
asyncio.run(main())
```
## Documentation
Full API documentation is available on GitHub pages, [here](https://albertogeniola.github.io/elmax-api/).
Raw data
{
"_id": null,
"home_page": "https://github.com/albertogeniola/elmax-api",
"name": "elmax-api",
"maintainer": "",
"docs_url": null,
"requires_python": ">=3.7",
"maintainer_email": "",
"keywords": "",
"author": "Alberto Geniola",
"author_email": "albertogeniola@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/a1/4e/8c357213cf83a0deaa52afec73c463165566e1c47fd442b29d0820aacf12/elmax_api-0.0.5.tar.gz",
"platform": null,
"description": "# Python Elmax API client\n\n![Elmax Logo](docs/elmax-logo.png?raw=true \"Elmax Logo\")\n\nAsynchronous Python API client for interacting with the Elmax Cloud services, via HTTP apis.\n\n![Release Build Status](https://github.com/albertogeniola/elmax-api/workflows/Release/badge.svg?branch=main)\n![Testing Status](https://github.com/albertogeniola/elmax-api/workflows/Testing/badge.svg?branch=main)\n![Documentation](https://github.com/albertogeniola/elmax-api/workflows/Publish%20Documentation/badge.svg?branch=main)\n\n## Installation\n\nUse the package manager pip to install Python Elmax API client:\n\n```bash\n$ pip3 install elmax-api --user\n```\n\nor, to install it globally, use the following command\n\n```bash\n$ pip3 install elmax-api\n```\n\n## Usage\n\n```python\nimport asyncio\n\nfrom elmax_api.http import Elmax\nfrom elmax_api.model.command import SwitchCommand\n\nMY_USERNAME = 'TYPE_HERE_YOUR_ELMAX_EMAIL'\nMY_PASSWORD = 'TYPE_HERE_YOUR_ELMAX_PASSWORD'\n\n\nasync def main():\n # Instantiate the Elmax API client\n client = Elmax(username=MY_USERNAME, password=MY_PASSWORD)\n\n # List panels for your user\n panels = await client.list_control_panels()\n print(f\"Found {len(panels)} panels for user {client.get_authenticated_username()}\")\n\n # Get online panels only\n online_panels = []\n for p in panels:\n status = 'ONLINE' if p.online else 'OFFLINE'\n print(f\"+ {p.hash}: {status}\")\n if p.online:\n online_panels.append(p)\n\n if len(online_panels) == 0:\n print(\"Sorry, no panel to work with. Exiting.\")\n exit(0)\n\n # Fetch status of first panel\n p = online_panels[0]\n panel_status = await client.get_panel_status(control_panel_id=p.hash)\n\n # Print some zone status\n for z in panel_status.zones:\n print(f\"Zone '{z.name}' open: {z.opened}\")\n\n # Toggle some actuator\n actuator = panel_status.actuators[0]\n old_status = actuator.opened\n print(f\"Actuator {actuator.name} was {'ON' if old_status else 'OFF'}\")\n print(f\"Switching {'OFF' if old_status else 'ON'} actuator {actuator.name}\")\n await client.execute_command(endpoint_id=actuator.endpoint_id, command=SwitchCommand.TURN_ON if not old_status else SwitchCommand.TURN_OFF)\n\n print(\"Waiting a bit...\")\n await asyncio.sleep(5)\n\n print(\"Reverting back original actuator status\")\n await client.execute_command(endpoint_id=actuator.endpoint_id,\n command=SwitchCommand.TURN_ON if old_status else SwitchCommand.TURN_OFF)\n print(\"Done!\")\n\nif __name__ == '__main__':\n asyncio.run(main())\n```\n\n## Documentation\nFull API documentation is available on GitHub pages, [here](https://albertogeniola.github.io/elmax-api/).\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "Asynchronous API Library to work with Elmax devices",
"version": "0.0.5",
"project_urls": {
"Documentation": "https://github.com/albertogeniola/elmax-api",
"Homepage": "https://github.com/albertogeniola/elmax-api",
"Source": "https://github.com/albertogeniola/elmax-api",
"Tracker": "https://github.com/albertogeniola/elmax-api"
},
"split_keywords": [],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "bed1eb59d0d1b8c9d08ec82c6b2b8562081ace2c472ad603ce1c83dc578cfa52",
"md5": "0a476747a751800cd8f792169f7af64c",
"sha256": "40ed5a900c0a1a1da842e586d0b57240e163d442794e276eda4bc5e2e785a3d9"
},
"downloads": -1,
"filename": "elmax_api-0.0.5-py3-none-any.whl",
"has_sig": false,
"md5_digest": "0a476747a751800cd8f792169f7af64c",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": ">=3.7",
"size": 18658,
"upload_time": "2023-10-08T17:24:29",
"upload_time_iso_8601": "2023-10-08T17:24:29.864501Z",
"url": "https://files.pythonhosted.org/packages/be/d1/eb59d0d1b8c9d08ec82c6b2b8562081ace2c472ad603ce1c83dc578cfa52/elmax_api-0.0.5-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "a14e8c357213cf83a0deaa52afec73c463165566e1c47fd442b29d0820aacf12",
"md5": "a0374ca5302eabe00825a47ec52f9ceb",
"sha256": "1934c60ba85f5b3aabc71eb6a0dae540b285afa1b8c441d58211cd7b13c1f09f"
},
"downloads": -1,
"filename": "elmax_api-0.0.5.tar.gz",
"has_sig": false,
"md5_digest": "a0374ca5302eabe00825a47ec52f9ceb",
"packagetype": "sdist",
"python_version": "source",
"requires_python": ">=3.7",
"size": 17853,
"upload_time": "2023-10-08T17:24:31",
"upload_time_iso_8601": "2023-10-08T17:24:31.742038Z",
"url": "https://files.pythonhosted.org/packages/a1/4e/8c357213cf83a0deaa52afec73c463165566e1c47fd442b29d0820aacf12/elmax_api-0.0.5.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2023-10-08 17:24:31",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "albertogeniola",
"github_project": "elmax-api",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"requirements": [],
"lcname": "elmax-api"
}