node-red-contrib-mqtt-gem 1.0.0
MQTT nodes with environment variables support for dynamic enable and parameters
node-red-contrib-mqtt-gem
Add little features to Standard MQTT nodes for Node-RED using environment variables support and dynamic configuration capabilities.
Library extension developed by GEM srl - Sant'Agata sul Santerno (RA), Italy derived from Original Node-red core library

๐ Features
node-red-contrib-mqtt-gem extends the standard Node-RED MQTT nodes with powerful dynamic configuration capabilities:
โ Dynamic Broker Control
- Enable/Disable connections dynamically via environment variable (use "Auto connect" to enable/disable)
 - Automatic connection management based on runtime configuration
 - Visual status indicators (disabled nodes show "disabled" in gray)
 
๐ Environment Variables Support
- Port Configuration: Use any environment variable for port numbers
 - Auto-Connect Control: Dynamic connection behavior via custom variable names
 - TLS Configuration: Runtime TLS enablement via any environment variable
 - Protocol Version: Support for custom MQTT protocol versions (3.1, 3.1.1, 5.0)
 - Complete Broker Settings: All broker parameters can be configured via any environment variable names
 
๐ง Enhanced Protocol Support
- MQTT v3.1 (legacy)
 - MQTT v3.1.1 (standard)
 - MQTT v5.0 (latest)
 - Custom Protocol Selection: Text input for environment variable-based protocol selection
 
๐ฏ Smart Node Behavior
- Disabled brokers prevent IN/OUT nodes from processing messages
 - Visual feedback with status indicators
 - Seamless integration with existing Node-RED flows
 - No conflicts with core MQTT nodes
 
๐ฆ Installation
Via Node-RED Palette Manager (Recommended)
- Open Node-RED editor
 - Go to Menu โ Manage palette
 - Select Install tab
 - Search for 
node-red-contrib-mqtt-gem - Click Install
 
Via npm
npm install node-red-contrib-mqtt-gem
Manual Installation
cd ~/.node-red
npm install node-red-contrib-mqtt-gem
๐ง Configuration
Environment Variables Setup

You can use ANY variable names you prefer. The examples below use common naming conventions:
# Example with standard names
export MQTT_HOST="broker.example.com"
export MQTT_PORT="1883"
export MQTT_AUTOCONNECT="true"
export MQTT_USETLS="false"
export MQTT_PROTOCOL="5"
# Example with custom names
export MY_BROKER_ADDRESS="broker.example.com"
export MY_BROKER_PORT="1883"
export ENABLE_MQTT="true"
export USE_SSL="false"
export MQTT_VERSION="5"
# Example with company-specific names
export COMPANY_MQTT_SERVER="internal.company.com"
export PRODUCTION_MQTT_PORT="8883"
export MQTT_CONNECTION_ENABLED="true"
# Start Node-RED
node-red
Docker Configuration
# Dockerfile
FROM nodered/node-red:latest
# Install the plugin
RUN npm install node-red-contrib-mqtt-gem
# Set environment variables (use any names you prefer)
ENV MY_MQTT_HOST=broker.example.com
ENV MY_MQTT_PORT=1883
ENV MQTT_ENABLED=true
ENV USE_TLS=false
ENV PROTOCOL_VERSION=5
Docker Compose
version: '3.8'
services:
  node-red:
    image: nodered/node-red:latest
    ports:
      - "1880:1880"
    environment:
      - MY_MQTT_HOST=broker.example.com
      - MY_MQTT_PORT=1883
      - MQTT_ENABLED=true
      - USE_TLS=false
      - PROTOCOL_VERSION=5
    volumes:
      - node-red-data:/data
    command: >
      bash -c "npm install node-red-contrib-mqtt-gem && 
               npm start -- --userDir /data"
volumes:
  node-red-data:
๐ฎ Usage Examples
Basic Broker Configuration
Static Configuration:
Server: broker.example.com
Port: 1883
Auto Connect: true
Use TLS: false
Protocol: MQTT V3.1.1
Dynamic Configuration with Environment Variables (use any variable names):
Server: ${MY_BROKER_HOST}
Port: ${MY_BROKER_PORT}
Auto Connect: ${MQTT_ENABLED}
Use TLS: ${USE_SSL_CONNECTION}
Protocol: Custom โ ${MQTT_VERSION}
Conditional MQTT Publishing
// In a Function node before mqtt-gem out
if (env.get("MY_MQTT_ENABLED") === "true") {
    return msg; // Send message
} else {
    return null; // Block message
}
Multi-Environment Setup
# Development Environment
export DEV_MQTT_HOST="dev-broker.internal"
export DEV_MQTT_PORT="1883"
export DEV_MQTT_ENABLED="true"
# Production Environment
export PROD_MQTT_HOST="prod-broker.company.com"
export PROD_MQTT_PORT="8883"
export PROD_MQTT_ENABLED="true"
export PROD_USE_TLS="true"
# Staging Environment
export STAGING_BROKER="staging.company.com"
export STAGING_PORT="1883"
export STAGING_CONNECTION="false"  # Disabled in staging
Protocol Version Examples
# MQTT v3.1 (legacy)
export MY_PROTOCOL="3"
# MQTT v3.1.1 (standard)  
export BROKER_PROTOCOL="4"
# MQTT v5.0 (latest)
export MQTT_VERSION="5"
๐ Node Types
mqtt-gem-broker (Configuration Node)
Enhanced broker configuration with environment variable support for all parameters.
mqtt-gem in (Input Node)
MQTT subscriber with dynamic broker configuration. Shows "disabled" status when broker is disabled.
mqtt-gem out (Output Node)
MQTT publisher with dynamic broker configuration. Blocks messages when broker is disabled.
๐ Environment Variables Reference
Important: You can use any variable names you prefer. The table below shows common examples, but you have complete freedom in naming:
| Example Variable | Description | Default | Example Values | 
|---|---|---|---|
MY_MQTT_HOST | 
Broker hostname/IP | localhost | broker.example.com | 
BROKER_PORT | 
Broker port | 1883 | 1883, 8883 | 
MQTT_ENABLED | 
Auto-connect on startup (enable/disable connection and nodes) | true | true, false | 
USE_SSL | 
Enable TLS/SSL | false | true, false | 
PROTOCOL_VERSION | 
MQTT protocol version | 4 | 3, 4, 5 | 
Configuration Examples:
# Company-specific naming
export COMPANY_MQTT_BROKER="internal.company.com"
export COMPANY_MQTT_PORT="1883"
# Project-specific naming  
export PROJECT_A_BROKER="project-a.broker.com"
export PROJECT_A_ENABLED="true"
# Environment-specific naming
export PROD_MQTT_HOST="prod-broker.com"
export DEV_MQTT_HOST="dev-broker.com"
๐งช Testing
Test Flow Example
Create test brokers:
- Active broker with 
MY_MQTT_ENABLED=true - Disabled broker with 
MQTT_CONNECTION=false 
- Active broker with 
 Add MQTT nodes:
- Input nodes for both brokers
 - Output nodes for both brokers
 
Verify behavior:
- Active broker: nodes work normally
 - Disabled broker: nodes show "disabled" status and don't process messages
 
Environment Variables Test
# Set test variables (use any names you prefer)
export TEST_MQTT_HOST="test.mosquitto.org"
export TEST_MQTT_PORT="1883" 
export TEST_CONNECTION_ENABLED="true"
export TEST_PROTOCOL_VERSION="5"
# Start Node-RED and verify configuration
node-red
๐ง Development
Local Development Setup
# Clone repository
git clone https://github.com/lucagem/node-red-contrib-mqtt-gem.git
cd node-red-contrib-mqtt-gem
# Install dependencies
npm install
# Setup development environment
npm run dev-setup
# Start development Node-RED instance
npm run dev
Development Commands
# Start development server
npm run dev
# Debug mode
npm run dev-debug
# Run tests (when available)
npm test
๐ Migration from Standard MQTT Nodes
Replace node types in your flows:
mqtt inโmqtt-gem inmqtt outโmqtt-gem outmqtt-brokerโmqtt-gem-broker
Update broker configurations to use environment variables:
- Replace static values with 
${VARIABLE_NAME} - Set corresponding environment variables
 
- Replace static values with 
 Deploy and test the updated flow
โ Troubleshooting
Common Issues
Q: Nodes show "disabled" status
A: Check that your auto-connect variable (e.g., MY_MQTT_ENABLED) is set to "true" (as string)
Q: Environment variables not resolving
A: Ensure variables are set before starting Node-RED and use correct syntax: ${YOUR_VARIABLE_NAME}
Q: Protocol version not working
A: For custom protocols, select "Custom..." in dropdown and enter ${YOUR_PROTOCOL_VAR} in text field
Q: TLS connection failing
A: Verify your TLS variable (e.g., USE_TLS="true") and correct port (usually 8883 for TLS)
Debug Mode
Enable Node-RED debug logging:
DEBUG=mqtt-gem* node-red
๐ค Contributing
Contributions are welcome! Please:
- Fork the repository
 - Create a feature branch
 - Make your changes
 - Add tests if applicable
 - Submit a pull request
 
๐ License
MIT License - see LICENSE file for details.
๐ Links
- Repository: https://github.com/lucagem/node-red-contrib-mqtt-gem
 - Issues: https://github.com/lucagem/node-red-contrib-mqtt-gem/issues
 - Node-RED: https://nodered.org
 - MQTT.org: https://mqtt.org
 
๐ Compatibility
- Node-RED: >= 2.0.0
 - Node.js: >= 14.0.0
 - MQTT: Versions 3.1, 3.1.1, 5.0
 
Developed by GEM srl - Sant'Agata sul Santerno (RA), Italy
Author: Luca Tralli