Skip to main content

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

Project description

ax-devil-mqtt

Python 3.10+ License: MIT Type Hints

Python package for retrieving analytics data from Axis devices over MQTT.

See also: ax-devil-device-api for device API integration.


📋 Contents


🔍 Feature Overview

Feature Description Python API CLI Tool
🔌 Device Setup Configure Axis devices for analytics MQTT publishing RawMQTTManager ax-devil-mqtt device monitor
📊 Analytics Streaming Stream analytics data from Axis devices with automated setup AnalyticsManager ax-devil-mqtt device monitor
💾 Data Recording Record analytics MQTT data for later replay and analysis manager.start(recording_file) ax-devil-mqtt device monitor --record
⏯️ Replay Replay recorded MQTT data for testing and development ReplayManager ax-devil-mqtt replay

🚀 Quick Start

Installation

pip install ax-devil-mqtt

Environment Variables

For an easier experience, you can set the following environment variables:

export AX_DEVIL_TARGET_ADDR=<device-ip>
export AX_DEVIL_TARGET_USER=<username>
export AX_DEVIL_TARGET_PASS=<password>
export AX_DEVIL_USAGE_CLI="safe" # Set to "unsafe" to skip SSL certificate verification for CLI calls

💻 Usage Examples

Python API Usage

🔌 MQTT Connection and Analytics Streaming

import time
from ax_devil_mqtt import AnalyticsManager
from ax_devil_mqtt.core.types import Message
from ax_devil_device_api import DeviceConfig

# Configure device
device_config = DeviceConfig.http(
    host="192.168.1.200",
    username="root",
    password="pass"
)

def message_callback(message: Message):
    print(f"Topic: {message.topic}")
    print(f"Payload: {message.payload}")
    print(f"Timestamp: {message.timestamp}")

# Create analytics manager
manager = AnalyticsManager(
    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=message_callback
)

manager.start()
# or manager.start(recording_file="recordings/some_file_name.jsonl")
time.sleep(10)
manager.stop()

⏯️ Replay

import time
from ax_devil_mqtt import ReplayManager
from ax_devil_mqtt.core.types import Message, ReplayStats

def message_callback(message: Message):
    print(f"Topic: {message.topic}")
    print(f"Payload: {message.payload}")
    print(f"Timestamp: {message.timestamp}")

def on_replay_complete(stats: ReplayStats):
    print(f"Replay completed!")
    print(f"  Total messages: {stats.message_count}")
    print(f"  Average drift: {stats.avg_drift:.2f}ms")
    print(f"  Max drift: {stats.max_drift:.2f}ms")

# Create a replay manager
manager = ReplayManager(
    recording_file="recordings/device_recording.jsonl",
    message_callback=message_callback,
    on_replay_complete=on_replay_complete
)

# Start the manager
manager.start()
time.sleep(10)
manager.stop()

CLI Usage Examples

🔍 Discover Available Analytics Streams

Using ax-devil-device-api:

ax-devil-device-api-analytics-mqtt sources

Or discover and list with ax-devil-mqtt:

ax-devil-mqtt device list-sources --device-ip <device-ip> --username <username> --password <password>

📊 Streaming Analytics Data Source

ax-devil-mqtt device monitor \
    --device-ip <device-ip> \
    --username <username> \
    --password <password> \
    --broker <broker-ip> \
    --port 1883 \
    --stream "com.axis.analytics_scene_description.v0.beta#1" \
    --duration 3600

💾 Recording MQTT Data

ax-devil-mqtt device monitor \
    --device-ip <device-ip> \
    --username <username> \
    --password <password> \
    --broker <broker-ip> \
    --port 1883 \
    --stream "com.axis.analytics_scene_description.v0.beta#1" \
    --record \
    --duration 3600

⏯️ Replaying Recorded Data

ax-devil-mqtt replay recordings/device_recording.jsonl

Example Scripts

Analytics Monitor Example

python src/ax_devil_mqtt/examples/analytics_monitor.py --host <broker-ip>

Replay Example

python src/ax_devil_mqtt/examples/replay.py recordings/device_recording.jsonl

Note: For more examples, check the examples directory in the source code.


⚠️ 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, please refer to Axis Developer Community.

📄 License

MIT License - See LICENSE file 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.3.0.tar.gz (17.5 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.3.0-py3-none-any.whl (15.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ax_devil_mqtt-0.3.0.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for ax_devil_mqtt-0.3.0.tar.gz
Algorithm Hash digest
SHA256 03cd23ceefda796233c26ec0b00e3d15f4b4f64a09a9cd8b2b6d03d52d90ca18
MD5 814e7aa29e83b04c19787aa8f21524d9
BLAKE2b-256 86ccbcf286ac473c958a796193065192545c1addb34638678958b10ffa987aa4

See more details on using hashes here.

File details

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

File metadata

  • Download URL: ax_devil_mqtt-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 15.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.13

File hashes

Hashes for ax_devil_mqtt-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 d71399811311b98c5e03990a3da02642524a8eeda2dd9d4ce9fa9ea896a95794
MD5 cc53085d80b4953c8ac6417e790ecfeb
BLAKE2b-256 dc7a711fceb75c233b8dc01b9f53a1fd01b01c2a7bd38e99dd26d03678135ecb

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