{"id":26721050,"url":"https://github.com/rasmusrynell/ax-devil-device-api","last_synced_at":"2025-07-09T06:05:16.386Z","repository":{"id":281729992,"uuid":"933890589","full_name":"RasmusRynell/ax-devil-device-api","owner":"RasmusRynell","description":"A Python library for interacting with Axis device APIs. Provides a type-safe interface with tools for device management, configuration, and integration.","archived":false,"fork":false,"pushed_at":"2025-06-26T15:56:36.000Z","size":319,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-07-09T06:03:06.373Z","etag":null,"topics":["api","ax-devil","axis","axis-communications","axis-scene-description","axis-scene-metadata","camera","cli","device-apis","library","metadata","python","python3"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RasmusRynell.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-02-16T22:54:23.000Z","updated_at":"2025-06-26T15:56:17.000Z","dependencies_parsed_at":"2025-03-10T21:31:11.488Z","dependency_job_id":"bb15ef97-e3f5-426d-ad5a-ec5d1e216cdf","html_url":"https://github.com/RasmusRynell/ax-devil-device-api","commit_stats":null,"previous_names":["rasmusrynell/ax-devil-device-api"],"tags_count":14,"template":false,"template_full_name":null,"purl":"pkg:github/RasmusRynell/ax-devil-device-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RasmusRynell%2Fax-devil-device-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RasmusRynell%2Fax-devil-device-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RasmusRynell%2Fax-devil-device-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RasmusRynell%2Fax-devil-device-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RasmusRynell","download_url":"https://codeload.github.com/RasmusRynell/ax-devil-device-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RasmusRynell%2Fax-devil-device-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":264403746,"owners_count":23602616,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["api","ax-devil","axis","axis-communications","axis-scene-description","axis-scene-metadata","camera","cli","device-apis","library","metadata","python","python3"],"created_at":"2025-03-27T19:36:31.096Z","updated_at":"2025-07-09T06:05:16.364Z","avatar_url":"https://github.com/RasmusRynell.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ax-devil-device-api\n\n\u003cdiv align=\"center\"\u003e\n\n[![Python 3.8+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://www.python.org/downloads/)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![Type Hints](https://img.shields.io/badge/Type%20Hints-Strict-brightgreen.svg)](https://www.python.org/dev/peps/pep-0484/)\n\nA Python library for interacting with Axis device APIs. Provides a type-safe interface with tools for device management, configuration, and integration.\n\nSee also: [ax-devil-mqtt](https://github.com/rasmusrynell/ax-devil-mqtt) for using MQTT with an Axis device.\n\n\u003c/div\u003e\n\n---\n\n## 📋 Contents\n\n- [Feature Overview](#-feature-overview)\n- [Quick Start](#-quick-start)\n- [Usage Examples](#-usage-examples)\n- [Disclaimer](#-disclaimer)\n- [License](#-license)\n\n---\n\n## 🔍 Feature Overview\n\n\u003ctable\u003e\n  \u003cthead\u003e\n    \u003ctr\u003e\n      \u003cth\u003eFeature\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth align=\"center\"\u003ePython API\u003c/th\u003e\n      \u003cth align=\"center\"\u003eCLI Tool\u003c/th\u003e\n    \u003c/tr\u003e\n  \u003c/thead\u003e\n  \u003ctbody\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e📱 Device Information\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eGet device details, check health status, and restart device\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.device\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#device-info-cli\"\u003eax-devil-device-api-device-info\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e🔧 Device Debugging\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eDownload server reports, crash reports, and run diagnostics\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.device_debug\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#device-debug-cli\"\u003eax-devil-device-api-device-debug\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e📷 Media Operations\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eCapture snapshots from device cameras\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.media\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#media-cli\"\u003eax-devil-device-api-media\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e🔐 SSH Management\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eAdd, list, modify, and remove SSH users\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.ssh\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#ssh-cli\"\u003eax-devil-device-api-ssh\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e📡 MQTT Client\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eConfigure, activate, deactivate, and check MQTT client status\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.mqtt_client\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#mqtt-client-cli\"\u003eax-devil-device-api-mqtt-client\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e📊 Analytics MQTT\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eManage analytics data sources and publishers for MQTT\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.analytics_mqtt\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#analytics-mqtt-cli\"\u003eax-devil-device-api-analytics-mqtt\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e🔎 API Discovery\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eList and inspect available APIs on the device\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.discovery\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#api-discovery-cli\"\u003eax-devil-device-api-discovery\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e🌍 Geocoordinates\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eGet and set device location and orientation\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.geocoordinates\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#geocoordinates-cli\"\u003eax-devil-device-api-geocoordinates\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e🚩 Feature Flags\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eList, get, and set device feature flags\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.feature_flags\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#feature-flags-cli\"\u003eax-devil-device-api-feature-flags\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n    \u003ctr\u003e\n      \u003ctd\u003e\u003cb\u003e🌐 Network\u003c/b\u003e\u003c/td\u003e\n      \u003ctd\u003eGet network interface information\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ccode\u003eclient.network\u003c/code\u003e\u003c/td\u003e\n      \u003ctd align=\"center\"\u003e\u003ca href=\"#network-cli\"\u003eax-devil-device-api-network\u003c/a\u003e\u003c/td\u003e\n    \u003c/tr\u003e\n  \u003c/tbody\u003e\n\u003c/table\u003e\n\n---\n\n## 🚀 Quick Start\n\n### Installation\n\n```bash\npip install ax-devil-device-api\n```\n\n### Environment Variables\nFor an easier experience, you can set the following environment variables:\n```bash\nexport AX_DEVIL_TARGET_ADDR=\u003cdevice-ip\u003e\nexport AX_DEVIL_TARGET_USER=\u003cusername\u003e\nexport AX_DEVIL_TARGET_PASS=\u003cpassword\u003e\nexport AX_DEVIL_USAGE_CLI=\"safe\" # Set to \"unsafe\" to skip SSL certificate verification for CLI calls\n```\n\n---\n\n## 💻 Usage Examples\n\n### Python API Usage\n\n```python\nimport json\nfrom ax_devil_device_api import Client, DeviceConfig\n\n# Initialize client (recommended way using context manager)\nconfig = DeviceConfig.https(\"192.168.1.81\", \"root\", \"pass\", verify_ssl=False)\nwith Client(config) as client:\n    device_info = client.device.get_info()\n    print(json.dumps(device_info, indent=4))\n\n# Alternative: Manual resource management (not recommended)\nclient = Client(config)\ntry:\n    device_info = client.mqtt_client.get_state()\n    print(json.dumps(device_info, indent=4))\nfinally:\n    client.close()  # Always close the client when done\n```\n\n### CLI Usage Examples\n\n\u003cdetails open\u003e\n\u003csummary\u003e\u003ca name=\"device-info-cli\"\u003e\u003c/a\u003e\u003cb\u003e📱 Device Information\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# Get device information\nax-devil-device-api-device-info --device-ip 192.168.1.10 --username admin --password secret info\n\n# Check device health\nax-devil-device-api-device-info --device-ip 192.168.1.10 --username admin --password secret health\n\n# Restart device\nax-devil-device-api-device-info --device-ip 192.168.1.10 --username admin --password secret restart\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca name=\"device-debug-cli\"\u003e\u003c/a\u003e\u003cb\u003e🔧 Device Debugging\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# Download server report\nax-devil-device-api-device-debug --device-ip 192.168.1.10 --username admin --password secret download_server_report report.tar.gz\n\n# Download crash report\nax-devil-device-api-device-debug --device-ip 192.168.1.10 --username admin --password secret download_crash_report crash.tar.gz\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca name=\"media-cli\"\u003e\u003c/a\u003e\u003cb\u003e📷 Media Operations\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# Capture snapshot\nax-devil-device-api-media --device-ip 192.168.1.10 --username admin --password secret --output image.jpg snapshot\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca name=\"ssh-cli\"\u003e\u003c/a\u003e\u003cb\u003e🔐 SSH Management\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# List SSH users\nax-devil-device-api-ssh --device-ip 192.168.1.10 --username admin --password secret list\n\n# Add SSH user\nax-devil-device-api-ssh --device-ip 192.168.1.10 --username admin --password secret add new-user password123\n\n# Remove SSH user\nax-devil-device-api-ssh --device-ip 192.168.1.10 --username admin --password secret remove user123\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca name=\"mqtt-client-cli\"\u003e\u003c/a\u003e\u003cb\u003e📡 MQTT Client\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# Activate MQTT client\nax-devil-device-api-mqtt-client --device-ip 192.168.1.10 --username admin --password secret activate\n\n# Deactivate MQTT client\nax-devil-device-api-mqtt-client --device-ip 192.168.1.10 --username admin --password secret deactivate\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca name=\"analytics-mqtt-cli\"\u003e\u003c/a\u003e\u003cb\u003e📊 Analytics MQTT\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# List available analytics data sources\nax-devil-device-api-analytics-mqtt --device-ip 192.168.1.10 --username admin --password secret sources\n\n# List configured publishers\nax-devil-device-api-analytics-mqtt --device-ip 192.168.1.10 --username admin --password secret list\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca name=\"api-discovery-cli\"\u003e\u003c/a\u003e\u003cb\u003e🔎 API Discovery\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# List available APIs\nax-devil-device-api-discovery --device-ip 192.168.1.10 --username admin --password secret list\n\n# Get API info\nax-devil-device-api-discovery --device-ip 192.168.1.10 --username admin --password secret info vapix\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca name=\"geocoordinates-cli\"\u003e\u003c/a\u003e\u003cb\u003e🌍 Geocoordinates\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# Get current location coordinates\nax-devil-device-api-geocoordinates --device-ip 192.168.1.10 --username admin --password secret location get\n\n# Set location coordinates\nax-devil-device-api-geocoordinates --device-ip 192.168.1.10 --username admin --password secret location set 59.3293 18.0686\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca name=\"feature-flags-cli\"\u003e\u003c/a\u003e\u003cb\u003e🚩 Feature Flags\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# List all feature flags\nax-devil-device-api-feature-flags --device-ip 192.168.1.10 --username admin --password secret list\n\n# Set feature flags\nax-devil-device-api-feature-flags --device-ip 192.168.1.10 --username admin --password secret set feature_name=true\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003cdetails\u003e\n\u003csummary\u003e\u003ca name=\"network-cli\"\u003e\u003c/a\u003e\u003cb\u003e🌐 Network\u003c/b\u003e\u003c/summary\u003e\n\u003cp\u003e\n\n```bash\n# Get network interface information\nax-devil-device-api-network --device-ip 192.168.1.10 --username admin --password secret info\n```\n\u003c/p\u003e\n\u003c/details\u003e\n\n\u003e **Note:** For more CLI examples, check the [examples directory](src/ax_devil_device_api/examples) in the source code.\n\n---\n\n## ⚠️ Disclaimer\n\nThis project is an independent, community-driven implementation and is **not** affiliated with or endorsed by Axis Communications AB. For official APIs and development resources, please refer to [Axis Developer Community](https://www.axis.com/en-us/developer).\n\n## 📄 License\n\nMIT License - See LICENSE file for details.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frasmusrynell%2Fax-devil-device-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frasmusrynell%2Fax-devil-device-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frasmusrynell%2Fax-devil-device-api/lists"}