Fleet Manager is a self-hosted service for managing fleets of Shelly Gen2+ (Plus, Pro, Mini) devices via outbound WebSocket from a single dashboard.
- Real-time device monitoring and control
- Device grouping and bulk operations
- Energy metering and consumption tracking
- OTA firmware updates
- Role-based access control (OIDC)
- Plugin system for custom extensions
- WebSocket and HTTP API
- Linux (Ubuntu/Debian, Raspberry Pi arm64, Arch) or macOS
- 4 GB RAM minimum, 8 GB recommended
- Docker and Docker Compose (auto-installed if missing)
- Bash 4.0+ (macOS ships 3.2 — run
brew install bash)
git clone https://github.com/ALLTERCO/fleet-management.git
cd fleet-management
./deploy/deploy-public.sh upOnce ready, the script prints access URLs and default credentials.
Default login: fm-admin / Admin123!.
-
Open the Shelly device's local web page
-
Navigate to Networks > Outbound WebSocket
-
Enable it and enter:
- without SSL:
ws://<your-ip>:7011/shelly - with SSL:
wss://<your-hostname-or-ip>/shelly
- without SSL:
-
For self-signed deployments (
--ssl selfsigned), configure device TLS:- Device Web UI > Settings > TLS Configuration > Custom CA PEM bundle > upload
deploy/state/tls/ca.crt - Outbound WebSocket > Connection type > select
User TLS - Server >
wss://<your-hostname-or-ip>/shelly
For Let's Encrypt or other publicly trusted certificates, leave SSL Connectivity on
ca.pem(the device's built-in CA bundle). - Device Web UI > Settings > TLS Configuration > Custom CA PEM bundle > upload
The device will appear in the Fleet Manager dashboard.
| Command | Description |
|---|---|
up |
Start Fleet Management (installs Docker if needed, bootstraps or restarts) |
upgrade |
Pull newer images from registry, then restart |
down |
Stop and keep data |
down --volumes |
Stop and delete all data (asks for confirmation; --yes to skip) |
status |
Show container and health status |
logs [service] |
Follow logs |
ip |
Show access URLs |
doctor |
Troubleshoot configuration |
help |
Show help |
All commands are run via ./deploy/deploy-public.sh <command>.
Image pull behavior: up never contacts the registry — it uses cached images
(Compose pulls automatically on first run when no images exist).
upgrade pulls all images, then runs up. Use upgrade when a new version is available.
Add --debug for raw shell trace and full output.
Add --logging to enable the Dozzle container log viewer on port 9999.
# Self-signed (local networks, IPs, .local)
./deploy/deploy-public.sh up --ssl selfsigned
# Let's Encrypt (public FQDN)
./deploy/deploy-public.sh up --ssl --domain your.domain.com
# Your own certificate
./deploy/deploy-public.sh up --ssl custom \
--domain your.domain.com \
--cert /path/fullchain.pem \
--key /path/privkey.pemSee the Deployment Guide for SSL mode details, certificate requirements, and configuration options.
Pre-built multi-arch images (amd64 + arm64):
docker pull shellygroup/fleet-management:latest- greetings - Hello-world plugin demonstrating the API
- metadata-demo - Device metadata storage and querying
See plugins/ for source code.
- Deployment Guide
- API Reference
- RPC and Components
- Events
- RPC Relay
- Entities
- Custom Permissions
- Zitadel Setup
- Plugins
- Backups
- Rollback
- Observability
- Developing
- Codebase
| Platform | Architecture | Status |
|---|---|---|
| Ubuntu 22.04+ | amd64/arm64 | Supported |
| Debian 12+ | amd64/arm64 | Supported |
| Raspberry Pi OS | arm64 | Supported |
| Arch Linux | amd64/arm64 | Supported |
| macOS | amd64/arm64 | Supported (Docker Desktop) |
Apache License 2.0 - see LICENSE.
Contributions are welcome via pull requests on GitHub.