Skip to main content

MQTT integration plugin for NEMO tool usage events

Project description

NEMO_mqtt_bridge

PyPI version Python Support License: MIT

Knowing a tool’s status (interlock enabled or disabled) is critical in most labs using NEMO, but many setups only indicate this via NEMO itself or a simple LED. This project enables NEMO to send MQTT messages to displays on each tool, providing detailed, real-time status information such as current user, start time, and previous user.

The hardware, firmware, and broker code associated with this project can be found at: https://github.com/alexanderenrique/NEMO-Tool-Display

This is a Django plugin that publishes NEMO tool usage events to MQTT (tool enable/disable, tool saves). Uses Redis as a buffer and a separate bridge process to keep broker connections out of Django.

Architecture

┌─────────────────┐    ┌──────────────┐    ┌──────────────────┐    ┌─────────────┐
│   Django NEMO   │───▶│    Redis     │───▶│ Redis–MQTT Bridge │───▶│ MQTT Broker │
│  (signals)      │    │  db=1        │    │  (standalone)     │    │             │
└─────────────────┘    └──────────────┘    └──────────────────┘    └─────────────┘
  • Django: Signal handlers (Tool save, UsageEvent) publish JSON to Redis list nemo_mqtt_events (Redis DB 1).
  • Bridge: Separate process runs python -m NEMO_mqtt_bridge.redis_mqtt_bridge; it consumes from Redis and publishes to the MQTT broker with QoS 1.
  • Topics: nemo/tools/{id}/enabled, nemo/tools/{id}/disabled

Configuration is stored in Django (e.g. /customization/mqtt/) and loaded by the bridge on each connection.

Installation

Prerequisites: Python 3.8+, Django 3.2+, NEMO-CE 4.0+, MQTT broker (e.g. Mosquitto). Redis is embedded via redislite; no separate Redis server required.

Simplified deployment: The plugin package is NEMO_mqtt_bridge. Add 'NEMO_mqtt_bridge' to INSTALLED_APPS, then run python manage.py setup_nemo_integration (use --write-urls to add the URL include to NEMO/urls.py) and python manage.py migrate NEMO_mqtt_bridge.

From PyPI (recommended)

pip install nemo-mqtt-bridge
cd /path/to/your/nemo-ce
# Add 'NEMO_mqtt_bridge' to INSTALLED_APPS in your settings (see Manual below).
python manage.py setup_nemo_integration
python manage.py migrate NEMO_mqtt_bridge

Local / testing: The command above only prints integration steps (no file changes). Add NEMO_mqtt_bridge to INSTALLED_APPS and any logging config yourself. Use --write-urls to add the MQTT URL include to NEMO/urls.py.

Production with GitLab/Ansible: If your config is in version control and deployed by GitLab or Ansible, run with --gitlab so no files are changed on the server; the command will print the snippets to add to your repo:

python manage.py setup_nemo_integration --gitlab
# Add the printed snippets to your repo (INSTALLED_APPS and URLs; configure logging as needed for your environment), commit, and deploy. Then on the server:
python manage.py migrate NEMO_mqtt_bridge

Manual

  1. pip install nemo-mqtt-bridge
  2. Add 'NEMO_mqtt_bridge' to INSTALLED_APPS in your settings.
  3. (Optional) If you use Django’s LOGGING setting, add a NEMO_mqtt_bridge logger with your preferred level and handlers (e.g. DEBUG in dev/test, INFO or WARNING in production). What and how you log is installation-dependent.
  4. run python manage.py setup_nemo_integration to print integration steps, or add path("mqtt/", include("NEMO_mqtt_bridge.urls")) to NEMO/urls.py yourself. Use --write-urls to have the command add the URL include.
  5. Run python manage.py migrate NEMO_mqtt_bridge.

After install

  1. Configure: Open /customization/mqtt/ in NEMO, set broker host/port (and auth if needed), enable the config.
  2. Start NEMO (e.g. python manage.py runserver). With the default AUTO mode, the plugin uses embedded Redis (redislite) and the Redis–MQTT bridge (and a local Mosquitto broker for development).

Production: Use EXTERNAL mode so the plugin does not start or kill brokers: set RedisMQTTBridge(auto_start=False) in NEMO_mqtt_bridge/apps.py. Then start the MQTT broker yourself, and run the bridge separately (e.g. python -m NEMO_mqtt_bridge.redis_mqtt_bridge or as a systemd service). Embedded Redis runs in-process; no Redis sidecar needed.


  • Monitoring: Event stream at /mqtt/monitor/; CLI tools in NEMO_mqtt_bridge.monitoring (see src/NEMO_mqtt_bridge/monitoring/README.md).
  • HMAC: Optional payload signing
  • License: MIT. Issues · Discussions

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

nemo_mqtt_bridge-1.0.3.tar.gz (58.7 kB view details)

Uploaded Source

Built Distribution

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

nemo_mqtt_bridge-1.0.3-py3-none-any.whl (55.6 kB view details)

Uploaded Python 3

File details

Details for the file nemo_mqtt_bridge-1.0.3.tar.gz.

File metadata

  • Download URL: nemo_mqtt_bridge-1.0.3.tar.gz
  • Upload date:
  • Size: 58.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for nemo_mqtt_bridge-1.0.3.tar.gz
Algorithm Hash digest
SHA256 fc9cb7fa3959dc3921d99ef9b2c690e145150cdeaf69f12406676b9a9daa35bd
MD5 c10684a04e2eefdaa8f85c50efe42b05
BLAKE2b-256 ff4c3dc6ad8ae3d4c7d50473dc36d002bf41bc6cf0f667ea657aad7dd523fed2

See more details on using hashes here.

File details

Details for the file nemo_mqtt_bridge-1.0.3-py3-none-any.whl.

File metadata

File hashes

Hashes for nemo_mqtt_bridge-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 223f06da6317b9298c177022991173830f1fcd6e5b53c26405fbcac94d7b1ad2
MD5 587979803704d82e361f479cb867f39b
BLAKE2b-256 dd5458882d8d268c75bb3681fbfebadb02f534669aa946b6c6e9c3833a48e407

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