Hubitat Elevation MQTT Bridge
System to share and control Hubitat Elevation device states in MQTT.
Original Author: https://hub.docker.com/r/stjohnjohnson/hubitat-mqtt-bridge/
I highly recommend looking at the original github above as it may have more information that I have left out, or removed as it is not relevant. For the time being I have left the links to the docker images and setup to the original as they do work. As I rebuild and customize I will update this README.
This project was spawned by the desire to control hubitat and Hubitat Elevation from within Home Assistant. Since Home Assistant already supports MQTT. The original authors chose to go and build a bridge between hubitat and MQTT and I have borrowed their work.
Events about a device (power, level, switch) are sent to MQTT using the following format:
PREFACE is defined as "hubitat" by default in your configuration
For example, my Dimmer Z-Wave Switch is called "Family Room Lights" in Hubitat Elevation. The following topics are published:
# Brightness (0-99) hubitat/Family Room Lights/level # Switch State (on|off) hubitat/Family Room Lights/switch
The Bridge also subscribes to changes in these topics, so that you can update the device via MQTT.
$ mqtt pub -t 'hubitat/Family Room Lights/switch' -m 'off' # Light goes off in Hubitat Elevation
The bridge has one yaml file for configuration:
--- mqtt: # Specify your MQTT Broker URL here host: mqtt://localhost # Example from CloudMQTT # host: mqtt:///m10.cloudmqtt.com:19427 # Preface for the topics $PREFACE/$DEVICE_NAME/$PROPERTY preface: hubitat # The write and read suffixes need to be different to be able # to differentiate when state comes from Hubitat Elevation or # when its coming from the physical device/application # Suffix for the topics that receive state from Hubitat Elevation $PREFACE/$DEVICE_NAME/$PROPERTY/$STATE_READ_SUFFIX # Your physical device or application should subscribe to this topic to get updated status from Hubitat Elevation # state_read_suffix: state # Suffix for the topics to send state back to Hubitat Elevation $PREFACE/$DEVICE_NAME/$PROPERTY/$STATE_WRITE_SUFFIX # your physical device or application should write to this topic to update the state of Hubitat Elevation devices that support setStatus # state_write_suffix: set_state # Suffix for the command topics $PREFACE/$DEVICE_NAME/$PROPERTY/$COMMAND_SUFFIX # command_suffix: cmd # Other optional settings from https://www.npmjs.com/package/mqtt#mqttclientstreambuilder-options # username: AzureDiamond # password: hunter2 # MQTT retains state changes be default, retain mode can be disabled: # retain: false # Port number to listen on port: 8080
There are two ways to use this, Docker (self-contained) or NPM (can run on Raspberry Pi).
Docker will automatically download the image, but you can "install" it or "update" it via
$ docker pull jeubanks/hubitat-mqtt-bridge
To run it (using
/opt/mqtt-bridge as your config directory and
8080 as the port):
$ docker run \ -d \ --name="mqtt-bridge" \ -v /opt/mqtt-bridge:/config \ -p 8080:8080 \ jeubanks/hubitat-mqtt-bridge
To restart it:
$ docker restart mqtt-bridge
Customize the MQTT host
$ vi config.yml # Restart the service to get the latest changes
Install the Driver in the Hubitat Web Interface [Drivers Code] using "New Driver"
Add the "MQTT Device" device in the [Devices]. Enter MQTT Device (or whatever) for the name. Select "MQTT Bridge" for the type. The other values are up to you.
Configure the "MQTT Device" in the [Devices] with the IP Address, Port, and MAC Address of the machine running the Docker container
Install the App in [Apps Code] using "New App"
Enable the App in [Apps] using "Load New App" and select MQTT Bridge
Click MQTT Bridge in the list of Apps
At the top of notification (this is to be updated)
Configure the devices you want to send to the MQTT Bridge.
At the bottom select the MQTT Bridge to send events to.
If you want to bundle everything together, you can use Docker Compose.
Just create a file called
docker-compose.yml with this contents:
mqtt: image: matteocollina/mosca ports: - 1883:1883 mqttbridge: image: jeubanks/hubitat-mqtt-bridge volumes: - ./mqtt-bridge:/config ports: - 8080:8080 links: - mqtt homeassistant: image: balloob/home-assistant ports: - 80:80 volumes: - ./home-assistant:/config - /etc/localtime:/etc/localtime:ro links: - mqtt
This creates a directory called
./mqtt-bridge/ to store configuration for the bridge. It also creates a directory
./home-assistant to store configuration for HA.