Python package and CLI for configuring Axis devices via their HTTPS APIs: device info and health, snapshots, network details, MQTT clients, analytics publishers, API discovery, SSH users and more.
See also ax-devil-mqtt and ax-devil-rtsp for related tools.
pip install ax-devil-device-apiSet environment variables to avoid repeating credentials and broker details:
AX_DEVIL_TARGET_ADDR– Device IP or hostnameAX_DEVIL_TARGET_USER– Device usernameAX_DEVIL_TARGET_PASS– Device passwordAX_DEVIL_MQTT_BROKER_ADDR– MQTT broker addressAX_DEVIL_MQTT_BROKER_PASS– MQTT broker passwordAX_DEVIL_USAGE_CLI– Set tounsafeto allow--no-verify-sslwithout prompts (defaults tosafe)
- Device info & health – model/firmware, health, restart; CLI
device; Pythonclient.device - Network – interface details; CLI
network info; Pythonclient.network - Media – snapshots with resolution/compression; CLI
media snapshot; Pythonclient.media - MQTT client – configure/activate/deactivate/status/config; CLI
mqtt; Pythonclient.mqtt_client - Analytics MQTT publishers – list/create/remove; CLI
analytics; Pythonclient.analytics_mqtt - Analytics metadata producers – list/enable/disable/sample/versions; CLI
analytics-metadata; Pythonclient.analytics_metadata - API discovery – list APIs, inspect docs/models/openapi; CLI
discovery; Pythonclient.discovery - Feature flags – list/get/set; CLI
features; Pythonclient.feature_flags - Geocoordinates – location/orientation get/set/apply; CLI
geocoordinates; Pythonclient.geocoordinates - SSH users – add/list/show/modify/remove; CLI
ssh; Pythonclient.ssh - Debug – server/crash reports, network traces, pings, port checks, core dumps; CLI
debug; Pythonclient.device_debug
ax-devil-device-api --help lists all subcommands. Global options: --device-ip/-a, --device-username/-u, --device-password/-p, --protocol [http|https], --port, and --no-verify-ssl.
Common flows:
- Device checks and restart:
ax-devil-device-api device info \
--device-ip <device-ip> \
--device-username <username> \
--device-password <password>
ax-devil-device-api device health
ax-devil-device-api device restart --force- Capture a snapshot:
ax-devil-device-api media snapshot \
--device-ip <device-ip> \
--device-username <username> \
--device-password <password> \
--resolution 1920x1080 \
--output snapshot.jpg- Configure and inspect the device MQTT client:
ax-devil-device-api mqtt configure \
--device-ip <device-ip> \
--device-username <username> \
--device-password <password> \
--broker-address <broker-ip> \
--broker-port 1883 \
--use-tls
ax-devil-device-api mqtt status
ax-devil-device-api mqtt config- Network and geocoordinates:
ax-devil-device-api network info
ax-devil-device-api geocoordinates location set 59.3293 18.0686
ax-devil-device-api geocoordinates orientation set --heading 45 --tilt 5
ax-devil-device-api geocoordinates orientation apply- Manage analytics publishers:
ax-devil-device-api analytics sources
ax-devil-device-api analytics create pub-1 "com.axis.analytics_scene_description.v0.beta#1" "axis/events" --qos 1 --retain
ax-devil-device-api analytics list
ax-devil-device-api analytics remove pub-1- Manage analytics metadata producers:
ax-devil-device-api analytics-metadata list
ax-devil-device-api analytics-metadata enable metadata-producer --channel 1 --channel 2
ax-devil-device-api analytics-metadata sample metadata-producer --format json- Feature flags:
ax-devil-device-api features list
ax-devil-device-api features get my_flag other_flag
ax-devil-device-api features set my_flag=true other_flag=false --force- Inspect APIs exposed by the device:
ax-devil-device-api discovery list
ax-devil-device-api discovery info analytics-mqtt --docs-html-link- Manage SSH users or collect diagnostics:
ax-devil-device-api ssh add new-user password123 --comment "Service account"
ax-devil-device-api ssh list
ax-devil-device-api ssh modify new-user --password new-pass
ax-devil-device-api debug download-server-report report.tar.gz
ax-devil-device-api debug download-crash-report crash.tar.gz
ax-devil-device-api debug ping-test example.comimport json
from ax_devil_device_api import Client, DeviceConfig
config = DeviceConfig.https(
host="192.168.1.81",
username="root",
password="pass",
verify_ssl=False, # leave True in production
)
with Client(config) as client:
info = client.device.get_info()
print(json.dumps(info, indent=2))
snapshot = client.media.get_snapshot(resolution="1280x720")
mqtt_state = client.mqtt_client.get_state()python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
pytestThis project is an independent, community-driven implementation and is not affiliated with or endorsed by Axis Communications AB. For official APIs and development resources, see the Axis Developer Community.
MIT License - see LICENSE for details.