Skip to main content

BigClown USB Gateway

Project description

HARDWARIO Logo

Hub Service for HARDWARIO USB Gateway

Travis Release License PyPI Twitter

This repository contains CLI service for HARDWARIO USB Gateway.

Introduction

The service connects to a serial port where HARDWARIO USB Gateway is connected. It converts messages from serial port to MQTT broker and vice versa. Run with --help parameter to see the available options. It works with Python 2.7+ and Python 3.5+ environments and it has been tested under Linux, macOS and Windows.

Setup

pip3 install -U bcg

Install as a system-wide local Python package.

git clone https://github.com/bigclownlabs/bch-gateway.git
cd bch-gateway
sudo pip3 install -e .

Note: Parameter -e instructs to install files as symlinks, so changes to the source files will be immediately available to other users of the package on the host.

MQTT

  • Get info about all connected gateway

    mosquitto_pub -t 'gateway/all/info/get' -n
    

    response:

    gateway/{name}/info {"id": "836d19839c3b", "firmware": "bcf-gateway-...."}
    
  • List of paired nodes

    mosquitto_pub -t 'gateway/{name}/nodes/get' -n
    

    response:

    gateway/{name}/nodes ["{id-node-0}", "{id-node-id1}", "{id-node-id2}"]
    
  • Pairing mode

    • Start

      mosquitto_pub -t 'gateway/{name}/pairing-mode/start' -n
      

      LED on gateway start blink

      response:

      gateway/{name}/pairing-mode "start"
      

      Gateway is waiting to pair node. To pare node, long press the button on Core Module.

      response when the node is successfully added:

      gateway/{name}/attach "{id-node-0}"
      gateway/{name}/attach "{id-node-1}"
      ...
      

      Error response if there is not enough space:

      gateway/{name}/attach-failure "{id-node-1}"
      
    • Stop

      mosquitto_pub -t 'gateway/{name}/pairing-mode/stop' -n
      

      LED on gateway turns off

      response:

      gateway/{name}/pairing-mode "stop"
      
  • Purge all nodes

    mosquitto_pub -t 'gateway/{name}/nodes/purge' -n
    

    response:

    gateway/{name}/nodes []
    
  • Manual Add/Pair node

    mosquitto_pub -t 'gateway/{name}/nodes/add' -m '"{id-node}"'
    

    response:

    gateway/{name}/attach "{id-node}"
    

    Error response if there is not enough space:

    gateway/{name}/attach-failure "{id-node-1}"
    
  • Manual Remove/Unpair node

    mosquitto_pub -t 'gateway/{name}/nodes/remove' -m '"{id-node}"'
    

    response:

    gateway/{name}/detach "{id-node}"
    
  • Set node alias

    mosquitto_pub -t 'gateway/usb-dongle/alias/set' -m '{"id": "id-node", "alias": "new-alias"}'
    

    respose:

    gateway/usb-dongle/alias/set/ok {"id": "id-node", "alias": "new-alias"}
    
  • Remove node alias

    mosquitto_pub -t 'gateway/usb-dongle/alias/remove' -m '"{id-node}"'
    
    mosquitto_pub -t 'gateway/usb-dongle/alias/set' -m '{"id": "id-node", "alias": null}'
    
  • Scan Start

    • Start

      mosquitto_pub -t 'gateway/{name}/scan/start' -n
      

      response:

      gateway/{name}/scan "start"
      

      response for unknown node

      gateway/{name}/found "{id-node-0}"
      gateway/{name}/found "{id-node-1}"
      gateway/{name}/found "{id-node-2}"
      ...
      
    • Stop

      mosquitto_pub -t 'gateway/{name}/scan/stop' -n
      

      response:

      gateway/{name}/scan "stop"
      
  • Automatic pairing of all visible nodes

    !!! This is experimental features do not all work

    • Start

      mosquitto_pub -t 'gateway/{name}/automatic-pairing/start' -n
      

      LED on gateway start blink

      response:

      gateway/{name}/automatic-pairing "start"
      

      response when the node is successfully added:

      gateway/{name}/attach "{id-node-0}"
      gateway/{name}/attach "{id-node-1}"
      ...
      
    • Stop

      mosquitto_pub -t 'gateway/{name}/automatic-pairing/stop' -n
      
      LED on gateway turns off
      
      response:
      ```
      gateway/{name}/automatic-pairing "stop"
      ```
      

Configuration file

Configuration file is in yaml format

  • device: string

    example: /dev/ttyUSB0

  • name: string

    support variables:

    • {ip} - ip address
    • {id} - the id of the connected usb-dongle or core-module

    default: null - automatic detect name from gateway firmware

    example: "{ip}-ttyUSB0"

  • mqtt: object

    • host: string

      default: 127.0.0.1

    • port: int

      defualt: 1883

    • username: string

    • password: string

    • cafile: string

    • certfile: string

    • keyfile: string

  • retain_node_messages: bool

    default: False

  • qos_node_messages: int

    default: 1

  • base_topic_prefix: string

    example: home-

  • automatic_remove_kit_from_names: bool

    default: True

  • automatic_rename_kit_nodes: bool

    default: True

  • automatic_rename_generic_nodes: bool

    default: True

  • automatic_rename_nodes: bool

    default: True

  • rename: object

Node-Red buttons

If you use Node-Red, you can import text below to create buttons in your flow. You can list, pair and delete nodes with a click of the mouse.

  • For bcf-gateway-usb-dongle

    [{"id":"83c6c60c.209d78","type":"mqtt in","z":"97027127.a55f7","name":"","topic":"#","qos":"2","broker":"de273190.7f6f2","x":610,"y":80,"wires":[["454a64bc.50f77c"]]},{"id":"454a64bc.50f77c","type":"debug","z":"97027127.a55f7","name":"","active":true,"console":"false","complete":"false","x":790,"y":80,"wires":[]},{"id":"9e87ab30.a50be8","type":"inject","z":"97027127.a55f7","name":"All gateway info","topic":"gateway/all/info/get","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":639,"y":172,"wires":[["504dd396.bb5b4c"]]},{"id":"504dd396.bb5b4c","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"de273190.7f6f2","x":824,"y":173,"wires":[]},{"id":"f447966d.ed0cb8","type":"inject","z":"97027127.a55f7","name":"Pairing mode start","topic":"gateway/usb-dongle/pairing-mode/start","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":660,"y":280,"wires":[["ae043e16.df77c"]]},{"id":"ae043e16.df77c","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"de273190.7f6f2","x":825,"y":281,"wires":[]},{"id":"80092576.c83998","type":"inject","z":"97027127.a55f7","name":"Pairing mode stop","topic":"gateway/usb-dongle/pairing-mode/stop","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":660,"y":320,"wires":[["86c93689.7d0e58"]]},{"id":"86c93689.7d0e58","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"de273190.7f6f2","x":825,"y":321,"wires":[]},{"id":"8f7b14c7.898c38","type":"inject","z":"97027127.a55f7","name":"List of paired nodes","topic":"gateway/usb-dongle/nodes/get","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":650,"y":220,"wires":[["75f5e8db.ed19a8"]]},{"id":"75f5e8db.ed19a8","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"de273190.7f6f2","x":825,"y":221,"wires":[]},{"id":"ed3cfe08.3321b","type":"inject","z":"97027127.a55f7","name":"purge all nodes","topic":"gateway/usb-dongle/nodes/purge","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":640,"y":380,"wires":[["2acde0de.0d9de"]]},{"id":"2acde0de.0d9de","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"de273190.7f6f2","x":825,"y":381,"wires":[]},{"id":"de273190.7f6f2","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]
    
  • For bcf-gateway-core-module

    [{"id":"47ab49a8.0a88f8","type":"mqtt in","z":"97027127.a55f7","name":"","topic":"#","qos":"2","broker":"deefb40d.51f818","x":370,"y":100,"wires":[["7208a9c6.a8d3e8"]]},{"id":"7208a9c6.a8d3e8","type":"debug","z":"97027127.a55f7","name":"","active":true,"console":"false","complete":"false","x":550,"y":100,"wires":[]},{"id":"3e634a0c.8e15e6","type":"inject","z":"97027127.a55f7","name":"All gateway info","topic":"gateway/all/info/get","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":399,"y":192,"wires":[["84e9ef97.a81d5"]]},{"id":"84e9ef97.a81d5","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"deefb40d.51f818","x":584,"y":193,"wires":[]},{"id":"6d1a6395.7b49ac","type":"inject","z":"97027127.a55f7","name":"Pairing mode start","topic":"gateway/core-module/pairing-mode/start","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":400,"y":320,"wires":[["6bb142ef.da565c"]]},{"id":"6bb142ef.da565c","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"deefb40d.51f818","x":585,"y":321,"wires":[]},{"id":"191cf80e.901568","type":"inject","z":"97027127.a55f7","name":"Pairing mode stop","topic":"gateway/core-module/pairing-mode/stop","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":400,"y":360,"wires":[["11669b55.138775"]]},{"id":"11669b55.138775","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"deefb40d.51f818","x":585,"y":361,"wires":[]},{"id":"de1bca38.1214f8","type":"inject","z":"97027127.a55f7","name":"List of paired nodes","topic":"gateway/core-module/nodes/get","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":410,"y":240,"wires":[["7cb77d25.465514"]]},{"id":"7cb77d25.465514","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"deefb40d.51f818","x":585,"y":241,"wires":[]},{"id":"ec929b66.dddbb8","type":"inject","z":"97027127.a55f7","name":"purge all nodes","topic":"gateway/core-module/nodes/purge","payload":"","payloadType":"str","repeat":"","crontab":"","once":false,"x":400,"y":420,"wires":[["afe70282.f5ead"]]},{"id":"afe70282.f5ead","type":"mqtt out","z":"97027127.a55f7","name":"","topic":"","qos":"","retain":"","broker":"deefb40d.51f818","x":585,"y":421,"wires":[]},{"id":"deefb40d.51f818","type":"mqtt-broker","z":"","broker":"localhost","port":"1883","clientid":"","usetls":false,"compatmode":true,"keepalive":"60","cleansession":true,"willTopic":"","willQos":"0","willPayload":"","birthTopic":"","birthQos":"0","birthPayload":""}]
    

License

This project is licensed under the MIT License - see the LICENSE file for details.


Made with ❤  by HARDWARIO s.r.o. in the heart of Europe.

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

bcg-1.17.0.tar.gz (12.3 kB view details)

Uploaded Source

File details

Details for the file bcg-1.17.0.tar.gz.

File metadata

  • Download URL: bcg-1.17.0.tar.gz
  • Upload date:
  • Size: 12.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.1 importlib_metadata/3.10.0 pkginfo/1.7.0 requests/2.25.1 requests-toolbelt/0.9.1 tqdm/4.59.0 CPython/3.6.7

File hashes

Hashes for bcg-1.17.0.tar.gz
Algorithm Hash digest
SHA256 38a423952160e8cd468157af4a1fecec9f9c903de3309da277164ac14a421c58
MD5 1599186523de1aacc0e3e42a6bd5fa8e
BLAKE2b-256 e2070debeb0306797cb6abba349172bd5ca79ca267f32a778b22677836db921a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page