Skip to Content
🚀 We just launched! Please star us on Github!

All-in-One Installation

This guide walks you through installing both the server (backend + admin) and the display app on a single device — typically a Raspberry Pi with a touchscreen.

This is the simplest setup: one device that acts as both the brain and the face of your smart panel.


Prerequisites

  • A Raspberry Pi (3B+, 4, or Zero 2W) with Raspberry Pi OS Lite installed
  • A connected display (HDMI or DSI touchscreen)
  • Network connectivity (Wi-Fi or Ethernet)
  • SSH access or a local terminal

Haven’t set up your Raspberry Pi yet? Start with the Preparation guide first.


Quick Install

The fastest way to get everything running is to use both install scripts in sequence.

Connect to Your Pi

ssh pi@smart-panel.local
💡

Default password: raspberry. If .local domains don’t resolve, use the Pi’s IP address instead.

Update Your System

sudo apt update && sudo apt upgrade -y

Install the Server

curl -fsSL https://get.smart-panel.fastybird.com | sudo bash

This installs Node.js (if needed), the Smart Panel backend and admin interface, and configures a systemd service that starts automatically on boot.

The server will be accessible at http://smart-panel.local:3000 once installed.

Install the Display App

curl -fsSL https://get.smart-panel.fastybird.com/panel | sudo bash \ -s -- --backend http://localhost:3000 --kiosk

This installs flutter-pi (if needed), downloads the pre-built display app, and sets up a systemd service that launches the panel UI on boot.

The --backend http://localhost:3000 flag tells the display app to connect to the server running on the same device. The --kiosk flag starts the display automatically on boot.

That’s it! Both services are now running and will start automatically on boot. Skip to Post-Installation below.


Manual Installation

If you prefer full control, follow these detailed steps.

Connect and Update

ssh pi@smart-panel.local sudo apt update && sudo apt upgrade -y

Install Node.js

curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash - sudo apt install -y nodejs

Install Git

sudo apt install git -y

Install flutter-pi

Install dependencies

sudo apt install cmake libgl1-mesa-dev libgles2-mesa-dev libegl1-mesa-dev \ libdrm-dev libgbm-dev ttf-mscorefonts-installer fontconfig libsystemd-dev \ libinput-dev libudev-dev libxkbcommon-dev -y

Update system fonts:

sudo fc-cache

Build flutter-pi

sudo mkdir -p /opt/flutter-pi sudo chown -R ${USER}: /opt/flutter-pi git clone --depth 1 https://github.com/ardera/flutter-pi.git /opt/flutter-pi cd /opt/flutter-pi mkdir build && cd build cmake .. make -j$(nproc) sudo make install

Configure GPU access

sudo usermod -a -G render pi
⚠️

If you prefer not to grant GPU access to the pi user, run the display service as root instead.

Enable KMS/DRM

sudo nano /boot/firmware/config.txt

Make sure this line is present and not commented out:

dtoverlay=vc4-kms-v3d

Remove or comment out dtoverlay=vc4-fkms-v3d if present.

Reboot:

sudo reboot

Install InfluxDB (Optional)

For time-series data like temperature history and energy usage:

wget -qO- https://repos.influxdata.com/influxdata-archive_compat.key | sudo tee /etc/apt/trusted.gpg.d/influxdata.asc echo "deb https://repos.influxdata.com/debian bookworm stable" | sudo tee /etc/apt/sources.list.d/influxdata.list sudo apt update sudo apt install influxdb=1.8.10-1 -y sudo systemctl enable influxdb sudo systemctl start influxdb
⚠️

Make sure you install InfluxDB v1.8. InfluxDB 2.x is not compatible.

Allow Reboot & Power Off

To let the backend control system power:

sudo visudo

Add this line at the bottom:

pi ALL=(ALL) NOPASSWD: /sbin/reboot, /sbin/poweroff

Download the Smart Panel Release

sudo mkdir -p /opt/smart-panel sudo chown -R ${USER}:${USER} /opt/smart-panel sudo mkdir -p /var/smart-panel sudo chown -R ${USER}:${USER} /var/smart-panel cd /opt/smart-panel
curl --http1.1 -L -C - -o smart-panel.tar.gz \ https://github.com/FastyBird/smart-panel/releases/latest/download/smart-panel.tar.gz tar -xzf smart-panel.tar.gz -C . rm smart-panel.tar.gz

On a Raspberry Pi Zero 2W, downloads may be slow or interrupted. The -C - flag tells curl to resume where it left off — just re-run the same command if it drops.

⚠️

Make sure you have at least 300 MB of free space before downloading.

Optional: Verify download integrity

curl -LO https://github.com/FastyBird/smart-panel/releases/latest/download/smart-panel.sha256 sha256sum -c smart-panel.sha256

Run database migrations

npm run migration:run

Set Up Backend Service

sudo nano /etc/systemd/system/smart-panel-backend.service
[Unit] Description=Smart Panel Backend & Admin Service After=network.target [Service] User=pi WorkingDirectory=/opt/smart-panel ExecStart=npm start Restart=always Environment=NODE_ENV=production [Install] WantedBy=multi-user.target
sudo systemctl enable smart-panel-backend sudo systemctl start smart-panel-backend

The admin interface is bundled with the backend — no separate setup needed.

Set Up Display Service

sudo nano /etc/systemd/system/smart-panel-display.service
[Unit] Description=Smart Panel Display App After=network.target Requires=smart-panel-backend.service [Service] User=pi WorkingDirectory=/opt/smart-panel/display ExecStart=/usr/local/bin/flutter-pi --release . Restart=always [Install] WantedBy=multi-user.target
💡

Want to rotate the display? Add the -r flag to ExecStart:

ExecStart=/usr/local/bin/flutter-pi -r 270 --release .

Valid values: 0, 90, 180, 270

sudo systemctl enable smart-panel-display sudo systemctl start smart-panel-display

Post-Installation

Verify Both Services

sudo systemctl status smart-panel-backend sudo systemctl status smart-panel-display

Both should show active (running).

Access the Admin Interface

From another device on the same network, open a browser:

http://smart-panel.local:3000

View Logs

# Backend logs sudo journalctl -u smart-panel-backend -f # Display logs sudo journalctl -u smart-panel-display -f

Service Management

# Restart everything sudo systemctl restart smart-panel-backend sudo systemctl restart smart-panel-display # Stop the display only sudo systemctl stop smart-panel-display # Check status sudo systemctl status smart-panel-backend smart-panel-display

Troubleshooting

Display shows a black screen

  1. Check that KMS/DRM is enabled in /boot/firmware/config.txt
  2. Verify the pi user is in the render group: groups pi
  3. Check display logs: sudo journalctl -u smart-panel-display -n 50

Backend won’t start

  1. Check Node.js version: node --version (must be 20+)
  2. Verify the database exists: ls /var/smart-panel/
  3. Check backend logs: sudo journalctl -u smart-panel-backend -n 50

Display can’t connect to backend

When running on the same device, the display should connect to http://localhost:3000. If using the manual installation, verify the backend is running before starting the display service (the Requires= directive in the service file handles this).


What’s Next?

Your Smart Panel is fully running — backend, admin interface, and display.

Head over to Onboarding to create your admin account, pair your devices, and start customizing your dashboard.

Last updated on