How do I use Python to control the IO over Unix Domain Socket on the BB-400?


This FAQ will explain how Python can be used to retrieve/modify the BB-400 IO status over Unix Domain Socket.


Attach your BB-400 to the same network as the development PC using a wired or wireless connection.

Sample Python Program for BB-400

In this example program we are going to obtain and set the status of the output lines using Unix Domain Server on the BB-400.

The Unix Domain Socket file used to control the IO is located at: “/var/run/bb-io.sock”.
The script sends GET and POST requests using the request_unixsocket module.
Firstly, log into your BB-400 using PuTTY or a similar terminal emulator.

This example is based on Python version 3.72.

If you need to install missing header files, use the following command in the terminal window:

  • sudo pip3 import requests_unixsocket

Create a new python file and copy the following code into it:

import json
import requests_unixsocket

socket_name = "http+unix://%2Fvar%2Frun%2Fbb-io.sock"
session = requests_unixsocket.Session()

def getRequest(led):
    response = requests_unixsocket.get(socket_name+led)
    if response:
        return json.loads(response.text)
        return "Error occurred: " + str(response.status_code) + " " + str(response.text)

def postRequest(led, data):
    postresponse =, data=str(data))
    if postresponse:
        return postresponse
        return "Error occurred: " + str(postresponse.status_code) + " " + str(postresponse.text)

if __name__ == "__main__":

    io_lines = {
        "DIO0": "/io/outputs/0",
        "DIO1":  "/io/outputs/1",
        "DIO2": "/io/outputs/2",
        "DIO3": "/io/outputs/3",
        "DIO4": "/io/outputs/4",
        "DIO5": "/io/outputs/5",
        "DIO6":  "/io/outputs/6",
        "DIO7": "/io/outputs/7",
        "all_outputs":  "/io/outputs"

    # GET status of IO lines
    print("Current IO status is: ")
    response = getRequest(io_lines["all_outputs"])

    getresponseDIO0 = getRequest(io_lines["DIO0"])
    getresponseDIO1 = getRequest(io_lines["DIO1"])
    getresponseDIO2 = getRequest(io_lines["DIO2"])
    getresponseDIO3 = getRequest(io_lines["DIO3"])
    getresponseDIO4 = getRequest(io_lines["DIO4"])
    getresponseDIO5 = getRequest(io_lines["DIO5"])
    getresponseDIO6 = getRequest(io_lines["DIO6"])
    getresponseDIO7 = getRequest(io_lines["DIO7"])

    print("nSending POST request via Unix Domain Socket to change IO status to 0 or 1")
    # #POST Request to set the IO line states to 0 and 1
    postresponseDIO0 = postRequest(io_lines["DIO0"], 0)
    postresponseDIO1 = postRequest(io_lines["DIO1"], 1)
    postresponseDIO2 = postRequest(io_lines["DIO2"], 0)
    postresponseDIO3 = postRequest(io_lines["DIO3"], 1)
    postresponseDIO4 = postRequest(io_lines["DIO4"], 1)
    postresponseDIO5 = postRequest(io_lines["DIO5"], 0)
    postresponseDIO6 = postRequest(io_lines["DIO6"], 0)
    postresponseDIO7 = postRequest(io_lines["DIO7"], 1)

    print("nNew IO status is as follows: ")
    # Print new IO status
    response = getRequest(io_lines["all_outputs"])

To run the script on Linux:

  • sudo python3

The output looks as follows:

You can also check the status of the IO lines on the Web admin page of the BB-400: