Exposes general purpose inputs and outputs (GPIO), hardware sensors and serial devices to an MQTT server. Ideal for single-board computers such as the Raspberry Pi.
Visit the documentation for more detailed information.
Hardware support is provided by specific GPIO, Sensor and Stream modules. It's easy to add support for new hardware and the list is growing fast.
beaglebone
)gpiod
)gpiozero
)mcp23017
)orangepi
)pcf8574
)pcf8575
)piface2
)raspberrypi
)xl9535
)ads1x15
)adxl345
)aht20
)as3935
)bh1750
)bme280
)bme680
)dht22
)ds18b
)ens160
)flowsensor
)frequencycounterr
)hcsr04
)ina219
)lm75
)mcp3008
)pms5003
)sht4x
)tsl2561
)veml7700
)yfs201
)serial
)pn532
)Requires Python 3.6+
pip3 install mqtt-io
python3 -m mqtt_io config.yml
Some configuration parameters can be passed as environment variables:
MQTT_IO_HOST
- Host name or IP address of the MQTT server.MQTT_IO_PORT
- Port number to connect to on the MQTT server.MQTT_IO_USER
- Username to authenticate with on the MQTT server.MQTT_IO_PASSWORD
- Password to authenticate with on the MQTT server.MQTT_IO_PROTOCOL
- Version of the MQTT protocol to use.Environment variables take precedence over configuration files.
Configuration is written in a YAML file which is passed as an argument to the server on startup.
See the full configuration documentation for details.
The following example will configure the software to do the following:
home/input/doorbell
topic when the doorbell is pushed and released.home/output/port_light/set
and change the output when messages are received on it.home/sensor/porch_temperature
./dev/ttyUSB0
serial port to the MQTT topic home/serial/alarm_system
.home/serial/alarm_system/send
and send any data received on that topic to the serial port.mqtt:
host: localhost
topic_prefix: home
# GPIO
gpio_modules:
# Use the Raspberry Pi built-in GPIO
- name: rpi
module: raspberrypi
digital_inputs:
# Pin 0 is an input connected to a doorbell button
- name: doorbell
module: rpi
pin: 0
digital_outputs:
# Pin 1 is an output connected to a light
- name: porch_light
module: rpi
pin: 1
# Sensors
sensor_modules:
# An LM75 sensor attached to the I2C bus
- name: lm75_sensor
module: lm75
i2c_bus_num: 1
chip_addr: 0x48
# An INA219 sensor attached to the I2C bus
- name: ina219_sensor
module: ina219
i2c_bus_num: 1
chip_addr: 0x43
sensor_inputs:
# lm75 - The configuration of the specific sensor value to use (LM75 only has temperature)
- name: porch_temperature
module: lm75_sensor
# ina219 - The configuration of the specific sensor value to use (4 options for the ina219 sensor)
- name: power
type: power
module: ina219_sensor
- name: bus_voltage
type: bus_voltage
module: ina219_sensor
- name: current
type: current
module: ina219_sensor
- name: shunt_voltage
type: shunt_voltage
module: ina219_sensor
# Streams
stream_modules:
# A serial port to communicate with the house alarm system
- name: alarm_system
module: serial
device: /dev/ttyUSB0
baud: 9600