Skip to content

Installing Infinitude on Raspberry PI (Raspbian)

John Lifsey edited this page Apr 7, 2026 · 13 revisions

This guide covers installation of Infinitude on a Raspberry Pi.

Docker Installation (Recommended)

The easiest way to run Infinitude on a Raspberry Pi is using the pre-built Docker image, which supports ARM architectures out of the box.

Install Docker

curl -fsSL https://get.docker.com | sh
sudo usermod -aG docker $USER
# Log out and back in for group change to take effect

Run Infinitude

# Create a directory for persistent state
mkdir -p ~/infinitude-state

# Run with serial port (if using USB RS485 adapter)
docker run -d \
  --name infinitude \
  --restart unless-stopped \
  -v ~/infinitude-state:/infinitude/state \
  -p 3000:3000 \
  -e APP_SECRET='your-secret-here' \
  -e PASS_REQS='1020' \
  -e SERIAL_TTY='/dev/ttyUSB0' \
  --device /dev/ttyUSB0:/dev/ttyUSB0 \
  nebulous/infinitude

# Run with network serial bridge (e.g., USR-TCP232)
docker run -d \
  --name infinitude \
  --restart unless-stopped \
  -v ~/infinitude-state:/infinitude/state \
  -p 3000:3000 \
  -e APP_SECRET='your-secret-here' \
  -e PASS_REQS='1020' \
  -e SERIAL_SOCKET='192.168.1.42:23' \
  nebulous/infinitude

Or use docker-compose with the included docker-compose.yaml:

git clone https://github.com/nebulous/infinitude.git
cd infinitude
docker-compose up -d

Configuration

Environment variables:

Variable Description
APP_SECRET Cookie signature string
PASS_REQS Min seconds between Carrier server requests (0 = never)
MODE production (default) or development
SERIAL_TTY RS485 device (e.g., /dev/ttyUSB0)
SERIAL_SOCKET TCP/RS485 bridge (e.g., 192.168.1.42:23)
LOGLEVEL Minimum log severity
SCAN_THERMOSTAT Enable continuous thermostat table scanning

Manual Installation

If you prefer to install from source without Docker, these are the basic requirements.

Install Dependencies

sudo apt-get update && sudo apt-get upgrade
sudo apt-get install cpanminus libchi-perl libmojolicious-perl libdatetime-perl \
  libxml-simple-perl libmoo-perl libjson-maybexs-perl libjson-perl \
  libhash-asobject-perl libdata-parsebinary-perl libdigest-crc-perl \
  libcache-perl libtest-longstring-perl libio-pty-perl
cpanm IO::Termios   # optional, for RS485 serial monitoring

Clone and Install

sudo apt-get install git
cd ~
git clone https://github.com/nebulous/infinitude.git
cd infinitude
chmod +x ./infinitude
cpanm --installdeps .

Initial Test Run

cd ~/infinitude
./infinitude daemon -m production

By default, Infinitude listens on port 3000. To change the port or interface:

./infinitude daemon -m production -l http://*:80

Stop with ctrl-c.

Configuration

Edit infinitude.json to set your serial device:

nano ~/infinitude/infinitude.json

For Pi UART: set "serial_tty": "/dev/ttyAMA0". If not using serial: set "serial_tty": "".

Run as a systemd Service

Create /etc/systemd/system/infinitude.service:

[Unit]
Description=Infinitude HVAC control
After=network-online.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/infinitude
ExecStart=/home/pi/infinitude/infinitude daemon -l http://:80
Restart=always
RestartSec=17

[Install]
WantedBy=multi-user.target

Enable and start:

sudo systemctl enable infinitude
sudo systemctl start infinitude

Over time, Infinitude can write a large number of log entries. Consider limiting journalctl by size or setting it to volatile storage. Logs appear in /var/log/daemon.log.

Using the UART with RS485

To connect directly to the Carrier ABCD bus from a Raspberry Pi, you need a UART-to-RS485 adapter. The pi485 project provides hardware designs for this.

Configure the UART

  1. Disable serial console:

    sudo raspi-config
    # Interface Options -> Serial Port -> No (login shell) -> Yes (hardware port enabled)
  2. Enable UART in /boot/config.txt:

    enable_uart=1
    
  3. Set baud rate (Carrier bus runs at 38400):

    stty < /dev/ttyAMA0 38400 -echo -opost -isig -icanon min 1

See Infinity Protocol Hardware for recommended RS485 adapters and wiring.

Thermostat Configuration

On your wall control, open the Wi-Fi menu and scroll to proxy settings:

  1. Set "Use Proxy Server" to Yes
  2. Set proxy server address to your Pi's IP address
  3. Set proxy server port to 3000 (or whatever port Infinitude is listening on)

Your thermostat and Pi must be on the same network. If using an IoT/VLAN setup, client device isolation must be disabled.

Firmware Compatibility

Infinitude is not compatible with thermostat firmware versions newer than 4.05. See issue #148 for details.

Clone this wiki locally