Installation¶
This library can be easily installed via the Pypi packet manager.
pip3 install elmax-api --user
or, to install it globally:
pip3 install elmax-api
Quick Start¶
The following code snippet illustrates how to login to the Elmax Cloud API, fetch the current zone status and toggle some actuator
import asyncio import os from elmax_api.http import Elmax from elmax_api.model.command import SwitchCommand MY_USERNAME = os.getenv('ELMAX_USERNAME') or 'TYPE_HERE_YOUR_USERNAME' MY_PASSWORD = os.getenv('ELMAX_PASSWORD') or 'TYPE_HERE_YOUR_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())
Listen for push notifications¶
In order to listen for push notification events, it is just necessary to register a callback coroutine using a PushNotificationHandler helper object.
The following example shows how to to so.
import asyncio import ssl from elmax_api.http import ElmaxLocal from elmax_api.model.panel import PanelStatus from elmax_api.push.push import PushNotificationHandler PANEL_ENDPOINT="https://192.168.7.249/api/v2" PUSH_ENDPOINT="wss://192.168.7.249/api/v2/push" async def main(): context = ssl.create_default_context() context.check_hostname = False context.verify_mode = ssl.VerifyMode(ssl.CERT_NONE) client = ElmaxLocal(panel_api_url=PANEL_ENDPOINT, panel_code="000000", ssl_context=context) handler = PushNotificationHandler(PUSH_ENDPOINT, client, context) async def _panel_updated(status: PanelStatus): print("An event has occurred!") print(status) handler.register_push_notification_handler(_panel_updated) handler.start(asyncio.get_event_loop()) for i in range(60): await asyncio.sleep(1) print("Slept!") handler.unregister_push_notification_handler(_panel_updated) handler.stop() if __name__ == '__main__': asyncio.run(main())