Installing and updating pyLCI

git clone
cd pyLCI/
./ #Install main dependencies and create a install directory
./ #Install dependencies for your input&output devices
nano config.json #Describe your input&outputdevices (if you have a supported shield, previous step will edit this for you)
sudo python #Start the system to test your configuration - do screen and buttons work OK?
#Once configured:
./ #Transfer the working system to your install directory


Behind the scenes:

When you run ./, pyLCI is copied to /opt/pylci, this is done to make autorun code easier and allow experimentation while making it harder to lock you out of the system if pyLCI is your main control interface. /opt/pylci will be referred to as “install directory”, while the directory you cloned the repository to will be referred to as “download directory”. ./, when run from download directory, will transfer the changes from the download directory (and GitHub) to the install directory.

Setup is the first script to be run after installation. It checks if you have python and python-pip installed and installs them if they aren’t (using apt-get), then creates the install directory, copies all the files to it and installs a systemd unit file for system to run at boot. Perfect for Raspbian and Debian Jessie, TODO: add support for other systems.


The system typically runs as root, and therefore is to be run as sudo/root user. Curious about the reasons? It’s explained in the FAQ.

Installing dependencies for hardware is the script that installs all the necessary packages and python libraries, depending on which hardware you’re using. It will also set proper config.json contents if you’re using a shield which has a pyLCI driver.

Configuring input and output devices

config.json is the file currently responsible for input and output hardware module configuration. It’s JSON, so if you launch the system manually and see JSONError exceptions in the output, you know you have misspelled something.


Generally, you won’t need to edit config.json if you’re using any shields recognised by because the configuration will be done automatically.

Its format is as follows:

    "args":[ "value1", "value2", "value3"...]
    "kwargs":{ "key":"value", "key2":"value2"}

Documentation for input and output drivers have sample config.json for each driver. "args" and "kwargs" get passed directly to drivers’ __init__ method, so you can read the driver documentation/files to see if there are any options you could tweak.

Systemctl commands

  • systemctl start pylci.service
  • systemctl stop pylci.service


This document refers to two pyLCI directories. First is “download directory”, this is the directory which has been created by running git clone command. Second is “install directory”, which is where pyLCI has been copied over by the script.

Directory separation is good for being able to experiment with configuration options without breaking the current install, as well as for developing applications for the system while not cluttering your install version.

Launching the system manually

For testing configuration or development, you will want to launch the system directly so that you’ll see system exception logs and will be able to stop it with a simple Ctrl^C. In that case, just run the system like python from your download/install directory.


If system refuses to shut down (happens due to input subsystem threads not finishing sometimes), feel free to find its PID using ps ax|grep "python" and do a kill -KILL $PID on it.

After you’re done configuring/developing on the system, you can use to transfer your changes to the install directory.

Updating is for updating your pyLCI install, pulling new commits from GitHub and copying all the new files from download directory to the install directory. This is useful to make your installed system up-to-date if there have been new commits or if you made some changes and want to transfer them to pyLCI install directory.

Note automatically pulls all the GitHub commits - just comment the corresponding line out if you don’t want it. It also runs systemctl start pylci.service.