Skip to content

Installation

Requirements

  • Python 3.10+
  • Django 4.2+

Install

pip install django-devicehub

Optional extras

Extra What it adds Install command
mqtt MQTT broker support (paho-mqtt) pip install django-devicehub[mqtt]
drf REST API (Django REST Framework) pip install django-devicehub[drf]
timescale TimescaleDB storage backend pip install django-devicehub[timescale]
influxdb InfluxDB 2.x storage backend pip install django-devicehub[influxdb]
channels WebSocket realtime (Django Channels) pip install django-devicehub[channels]
all Everything above pip install django-devicehub[all]

Configuration

1. Add to INSTALLED_APPS

INSTALLED_APPS = [
    ...
    "django_devicehub",
    "myapp",  # your app with devices.py
]

2. Configure settings

DJANGO_DEVICEHUB = {
    "BROKERS": {
        "default": {
            "ENGINE": "django_devicehub.brokers.mqtt.MQTTBroker",
            "HOST": "localhost",
            "PORT": 1883,
            "USERNAME": "",
            "PASSWORD": "",
            "CLIENT_ID": "",
            "KEEPALIVE": 60,
            "USE_TLS": False,
            "CA_CERTS": "",
            "CERTFILE": "",
            "KEYFILE": "",
            "USE_SHARED_SUBSCRIPTIONS": True,
            "SHARE_GROUP": "django-devicehub",
            "AUTH_BACKEND": False,
        }
    },
    "STORAGE": {
        "ENGINE": "django_devicehub.storage.django_orm.DjangoORMStorage",
    },
    "TOPIC_PREFIX": "myproject",
    "AUTO_API": True,
    "AUTO_ADMIN": True,
}

Most settings have sensible defaults. The minimum configuration is:

DJANGO_DEVICEHUB = {
    "BROKERS": {
        "default": {
            "HOST": "localhost",
            "PORT": 1883,
        }
    },
    "TOPIC_PREFIX": "myproject",
}

3. Add URLs

# urls.py
from django.urls import path, include
from django_devicehub.generators.urls import get_iot_urlpatterns

urlpatterns = [
    ...
    path("iot/", include("django_devicehub.urls")),  # broker auth + realtime
    *get_iot_urlpatterns("api"),  # auto-generated REST API
]

4. Verify

python manage.py shell -c "from django_devicehub import DeviceType; print('OK')"