Running OpenEMS Edge on a Raspberry PI
This guide explains how to:
-
Install and run OpenEMS Edge on a Raspberry Pi
-
Configure WebSocket + simulation
-
Run OpenEMS UI on a macOS machine (not on the Pi)
-
Connect the UI to the Edge over the internet
The structure is intentionally split into two clear parts:
-
PART A — Raspberry Pi (Edge)
-
PART B — macOS Machine (OpenEMS UI)
============================
PART A — Raspberry Pi (Edge)
============================
1. Raspberry Pi OS Setup (Headless)
Use Raspberry Pi Imager:
-
Device: Raspberry Pi 4
-
OS: Raspberry Pi OS Lite (64‑bit)
-
Configure:
-
Hostname
-
Username & password
-
Enable SSH
-
Configure Wi‑Fi
-
Enable Raspberry Pi Connect
-
Boot the Pi and connect via:
-
SSH
-
OR Raspberry Pi Connect
2. Install Java 21 (Temurin ARM64)
On the Pi:
sudo apt update
sudo apt install -y wget apt-transport-https gpg
wget -qO - https://packages.adoptium.net/artifactory/api/gpg/key/public \
| gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/adoptium.gpg > /dev/null
echo "deb https://packages.adoptium.net/artifactory/deb \
$(awk -F= '/^VERSION_CODENAME/{print $2}' /etc/os-release) main" \
| sudo tee /etc/apt/sources.list.d/adoptium.list
sudo apt update
sudo apt install -y temurin-21-jdk
Verify:
java -version
3. Install OpenEMS Edge
mkdir -p ~/downloads
cd ~/downloads
wget https://github.com/OpenEMS/openems/releases/download/2025.11.0/openems-edge.jar
sudo chmod +x openems-edge.jar
sudo mkdir -p /usr/lib/openems
sudo mv openems-edge.jar /usr/lib/openems/
sudo mkdir -p /etc/openems.d
4. Configure systemd Service
Create:
sudo nano /etc/systemd/system/openems.service
Paste:
[Unit]
Description=OpenEMS Edge
After=network.target
[Service]
User=root
Group=root
Type=notify
WorkingDirectory=/usr/lib/openems
ExecStart=/usr/bin/java -Dfelix.cm.dir=/etc/openems.d/ \
-jar /usr/lib/openems/openems-edge.jar
SuccessExitStatus=143
Restart=always
RestartSec=10
WatchdogSec=60
[Install]
WantedBy=multi-user.target
Enable & start:
sudo systemctl daemon-reload
sudo systemctl enable openems
sudo systemctl start openems
Check:
systemctl status openems
5. Access OpenEMS Config Manager
On the Pi, open:
http://localhost:8080/system/console/configMgr
6. Add Required Components
In Config Manager:
-
Add a Scheduler (any default scheduler)
-
Add Controller.Api.Websocket
-
Port: 8085
-
Enabled: true
-
Restart Edge:
sudo systemctl restart openems
Verify WebSocket is listening:
sudo ss -lntp | grep 8085
You should see Java listening on port 8085.
7. (Optional) Add Simulation Components
In Config Manager, add:
-
Simulator ESS
-
Simulator Grid Meter
-
Simulator PV
Save and restart OpenEMS.
=====================================
PART B — macOS Machine (OpenEMS UI)
=====================================
1. Install Docker Desktop
brew install --cask docker
open -a Docker
Wait until Docker reports "Docker is running".
Verify:
docker version
You must see both Client and Server.
2. Clone OpenEMS Source
git clone -b 2025.11.0 https://github.com/OpenEMS/openems
cd openems
3. Build OpenEMS UI Image
docker build . \
-t openems_ui \
-f tools/docker/ui/Dockerfile.edge
4. Run OpenEMS UI
Replace YOUR_PI_IP with:
-
Public IP
-
OR VPN IP
-
OR Public DNS
Example:
docker container run \
-e WEBSOCKET_HOST=YOUR_PI_IP \
-p 80:80 \
-p 443:443 \
--restart unless-stopped \
--name openems_ui_container \
openems_ui
5. Open the UI
On your Mac:
http://localhost/login
Default login:
-
Username: admin
-
Password: admin
If UI shows "disconnected":
-
Confirm port 8085 is listening on the Pi
-
Confirm WebSocket controller exists
-
Confirm WEBSOCKET_HOST is correct
Why UI Runs on macOS and Edge Runs on Pi
-
Edge interacts with hardware and benefits from native systemd management
-
UI behaves like a stateless web application and is ideal for containerization
-
Separating them improves stability and flexibility
Troubleshooting
-
UI loads but no connection → check port 8085
-
Nothing listening on 8085 → WebSocket not configured
-
Docker errors on Mac → ensure Docker Desktop is running
Security Notes
-
Prefer VPN/tunnel (Tailscale/WireGuard) over port forwarding
-
Use SSH key-based authentication
-
Do not expose ConfigMgr (8080) publicly
You now have:
-
OpenEMS Edge running on Raspberry Pi
-
WebSocket enabled
-
Optional simulation components
-
OpenEMS UI running on macOS
-
UI connected over internet

No comments to display
No comments to display