This multi-platform Python tool connects USB gateway to the MQTT. USB gateway is communicating over virtual USB serial port with JSONs.

Gateway can be run in command line or by pm2 service manager.

Install & Upgrade

sudo pip3 install --upgrade --no-cache-dir bcg

Usage examples

Usually the bcg is run with pm2 process manager. This direct command line command is more for testing purporses if the service does not run correctly.


bcg --device /dev/ttyUSB0

Start with debug

bcg --device /dev/ttyUSB0 --debug

bcg –help

 1$ bcg --help
 2Usage: bcg [OPTIONS] COMMAND [ARGS]...
 4HARDWARIO gateway between USB serial port and MQTT broker
 7-c, --config FILENAME  configuration file (YAML format).
 8-d, --device TEXT      device
 9-H, --mqtt-host TEXT   MQTT host to connect to (default is
10-P, --mqtt-port TEXT   MQTT port to connect to (default is 1883)
11--no-wait              no wait on connect or reconnect serial port
12--mqtt-username TEXT   MQTT username
13--mqtt-password TEXT   MQTT password
14--mqtt-cafile TEXT     MQTT cafile
15--mqtt-certfile TEXT   MQTT certfile
16--mqtt-keyfile TEXT    MQTT keyfile
17-v, --verbosity LVL    Either CRITICAL, ERROR, WARNING, INFO or DEBUG
18-D, --debug            Print debug messages, same as --verbosity DEBUG.
19--version              Show the version and exit.
20--help                 Show this message and exit.
23devices  Print available devices.
24help     Show help.

Udev rules

If you would like permanent alias in /dev/, then apply these rules.

For Radio Dongle

echo 'SUBSYSTEMS=="usb", ACTION=="add", KERNEL=="ttyUSB*", ATTRS{idVendor}=="0403", ATTRS{idProduct}=="6015", ATTRS{serial}=="bc-usb-dongle*", SYMLINK+="bcUD%n", TAG+="systemd", ENV{SYSTEMD_ALIAS}="/dev/bcUD%n"'  | sudo tee --append /etc/udev/rules.d/58-hio-usb-dongle.rules

For Gateway with Core Module

echo 'SUBSYSTEMS=="usb", ACTION=="add", KERNEL=="ttyACM*", ATTRS{idVendor}=="0483", ATTRS{idProduct}=="5740", SYMLINK+="bcCM%n", TAG+="systemd", ENV{SYSTEMD_ALIAS}="/dev/bcCM%n"' | sudo tee --append /etc/udev/rules.d/59-hio-core-module.rules

Config files

In case you would like have configuration of bcg separate and not permanent in the pm2, create a config file and pass the file with -c parameter to bcg.

Step 1: Create folder for configuration file

sudo mkdir -p /etc/hardwario

Step 2: Configuration file for Gateway Radio Dongle

Open file

sudo nano /etc/hardwario/bcg-ud.yml

Insert this

1device: /dev/bcUD0
2name: "usb-dongle"
4    host: localhost
5    port: 1883

Step 3: Run service for Gateway Radio Dongle

pm2 start /usr/bin/python3 --name "bcg-ud" -- /usr/local/bin/bcg -c /etc/hardwario/bcg-ud.yml
pm2 save

Configuration file for Gateway Core module

Open file

sudo nano /etc/hardwario/bcg-cm.yml

Insert this

1device: /dev/bcCM0
2name: "core-module"
4    host: localhost
5    port: 1883

Run service for Gateway Core module

pm2 start /usr/bin/python3 --name "bcg-cm" -- /usr/local/bin/bcg -c /etc/hardwario/bcg-cm.yml
pm2 save

Bash autocomplete for bcf

register-python-argcomplete bcf >> ~/.bashrc
source ~/.bashrc