Skip to main content

Python package for setting up and retrieving data from Axis devices using MQTT

Project description

ax-devil-mqtt

Python package for easy configuration and consumption of an Axis devices analytics data over MQTT.

See also: ax-devil-device-api and ax-devil-rtsp.


Install

pip install ax-devil-mqtt

Configure (optional)

Set environment variables to avoid repeating credentials and broker details:

  • AX_DEVIL_TARGET_ADDR – Device IP or hostname
  • AX_DEVIL_TARGET_USER – Device username
  • AX_DEVIL_TARGET_PASS – Device password
  • AX_DEVIL_MQTT_BROKER_ADDR – MQTT broker address
  • AX_DEVIL_MQTT_BROKER_PASS – MQTT broker password

CLI

Run ax-devil-mqtt --help or ax-devil-mqtt help <command> for full details. Common flows:

  • Discover analytics data sources:
ax-devil-mqtt list-sources \
  --device-ip <device-ip> \
  --device-username <username> \
  --device-password <password>
  • Monitor an analytics stream (use your IP instead of localhost for the broker):
ax-devil-mqtt monitor \
  --device-ip <device-ip> \
  --device-username <username> \
  --device-password <password> \
  --broker-address <broker-ip> \
  --broker-port 1883 \
  --stream "com.axis.analytics_scene_description.v0.beta#1" \
  --duration 3600       # 0 to run continuously
  • Subscribe to an existing MQTT topic without configuring the device:
ax-devil-mqtt subscribe \
  --broker-address <broker-ip> \
  --broker-port 1883 \
  --topic "some/topic"
  • Inspect or clean analytics publishers configured on the device:
ax-devil-mqtt list-publishers \
  --device-ip <device-ip> \
  --device-username <username> \
  --device-password <password>

ax-devil-mqtt clean \
  --device-ip <device-ip> \
  --device-username <username> \
  --device-password <password>
  • Open the device’s Analytics MQTT API UI in your browser:
ax-devil-mqtt open-api \
  --device-ip <device-ip> \
  --device-username <username> \
  --device-password <password>

Python API

import time
from ax_devil_mqtt import AxisAnalyticsMqttClient, RawMqttClient, MqttMessage
from ax_devil_device_api import DeviceConfig

# Subscribe to an existing topic
client = RawMqttClient(
    broker_host="192.168.1.100",
    broker_port=1883,
    topics=["some/topic"],
    message_callback=lambda message: print(message.payload),
    worker_threads=1,  # dispatch callbacks on a background thread
)
client.start()
time.sleep(5)
client.stop()

# Or configure the device to publish analytics and subscribe automatically
device_config = DeviceConfig.http(host="192.168.1.200", username="root", password="pass")

analytics_client = AxisAnalyticsMqttClient(
    broker_host="192.168.1.100",
    broker_port=1883,
    device_config=device_config,
    analytics_data_source_key="com.axis.analytics_scene_description.v0.beta#1",
    message_callback=lambda message: print(message.payload),
    worker_threads=1,
)
analytics_client.start()
time.sleep(5)
analytics_client.stop()

Development

python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"

pytest
mypy src tests

Disclaimer

This 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.

License

MIT License - see LICENSE for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ax_devil_mqtt-0.4.0.tar.gz (12.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ax_devil_mqtt-0.4.0-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file ax_devil_mqtt-0.4.0.tar.gz.

File metadata

  • Download URL: ax_devil_mqtt-0.4.0.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for ax_devil_mqtt-0.4.0.tar.gz
Algorithm Hash digest
SHA256 a25658b23ba0113c0fb30cc6802afdc77f631304405b90f867fb404c914177e1
MD5 efe426003d4c96b36eaaf32e91e6aa1f
BLAKE2b-256 06e6846e9b09d26d6d87bb8024347cf3e3f767d31aa9c60a4996314e15803ed8

See more details on using hashes here.

File details

Details for the file ax_devil_mqtt-0.4.0-py3-none-any.whl.

File metadata

  • Download URL: ax_devil_mqtt-0.4.0-py3-none-any.whl
  • Upload date:
  • Size: 11.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.11.14

File hashes

Hashes for ax_devil_mqtt-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 609d3dce0a61636157a34fcaeeaff5e37c55ccb40bccf66b81118e2c01f53cc2
MD5 aa4f0250fc35490fa052aed3760fa592
BLAKE2b-256 6cb4fca85533b2e4a5763b19f1209067f8de7d64edeba5374b8b6113d329aa65

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page