Installation Guide¶
Complete installation instructions for DSMR Reader Docker.
Prerequisites¶
Required¶
- Docker 24.0.0 or newer (or Podman)
- Docker Compose 2.0.0 or newer
- 2GB RAM minimum (4GB recommended)
- 10GB disk space minimum
- USB serial port or network-connected smart meter
Operating Systems¶
- Linux (Ubuntu, Debian, Raspbian, etc.)
- macOS (Intel or Apple Silicon)
- Windows (via WSL2 or Docker Desktop)
Quick Installation¶
Step 1: Install Docker¶
Ubuntu/Debian:
sudo apt-get update
sudo apt-get install docker.io docker-compose-plugin
sudo systemctl enable docker
sudo systemctl start docker
Other platforms: See Docker installation docs
Step 2: Configure User Permissions¶
# Add user to docker group
sudo usermod -aG docker $USER
# Add user to dialout group (for serial access)
sudo usermod -aG dialout $USER
# Log out and back in for groups to take effect
Step 3: Create Project Directory¶
Step 4: Create docker-compose.yaml¶
Create docker-compose.yaml with this content:
version: '3.8'
volumes:
dsmrdb_data:
services:
dsmrdb:
image: postgres:17-alpine
container_name: dsmrdb
restart: always
volumes:
- dsmrdb_data:/var/lib/postgresql/data
environment:
POSTGRES_USER: dsmrreader
POSTGRES_PASSWORD: dsmrreader
POSTGRES_DB: dsmrreader
dsmr:
image: xirixiz/dsmr-reader-docker:latest
container_name: dsmr
restart: always
depends_on:
- dsmrdb
ports:
- "80:80"
devices:
- /dev/ttyUSB0:/dev/ttyUSB0
environment:
# Database
DJANGO_DATABASE_HOST: dsmrdb
DJANGO_DATABASE_NAME: dsmrreader
DJANGO_DATABASE_USER: dsmrreader
DJANGO_DATABASE_PASSWORD: dsmrreader
# Application
CONTAINER_RUN_MODE: standalone
DJANGO_TIME_ZONE: Europe/Amsterdam
DJANGO_SECRET_KEY: change-me-to-random-string
DSMRREADER_ADMIN_USER: admin
DSMRREADER_ADMIN_PASSWORD: admin
Step 5: Start Services¶
Step 6: Access Web Interface¶
Open browser to: http://localhost
Login with: - Username: admin - Password: admin
Step 7: Configure DSMR Version¶
- Navigate to: Configuration → Datalogger
- Set your DSMR version (e.g. 4/5, 2/3, Fluvius, etc)
- Save changes
Detailed Setup¶
Serial Device Setup¶
Find Your Device¶
# List USB serial devices
ls -l /dev/ttyUSB* /dev/ttyACM*
# Monitor device detection
dmesg | tail -20
Create Stable Symlink (Recommended)¶
Use the symlink script for stable device names:
# Download script
wget https://raw.githubusercontent.com/xirixiz/dsmr-reader-docker/main/container_host_scripts/host_dev_setup.sh
# Make executable
chmod +x host_dev_setup.sh
# Create symlink
sudo ./host_dev_setup.sh
# This creates /dev/dsmr_p1 → /dev/ttyUSB0
Update your docker-compose.yaml:
Manual Permissions (Alternative)¶
# Temporary fix
sudo chmod 666 /dev/ttyUSB0
# Permanent fix - add user to dialout group
sudo usermod -aG dialout $USER
# Log out and back in
Network Smart Meter Setup¶
This uses remote input (pull). It does NOT require remote_datalogger mode. For network-connected smart meters example configuration:
services:
dsmr:
image: xirixiz/dsmr-reader-docker:latest
environment:
CONTAINER_RUN_MODE: standalone
DSMRREADER_REMOTE_DATALOGGER_INPUT_METHOD: ipv4
DSMRREADER_REMOTE_DATALOGGER_NETWORK_HOST: 192.168.1.100
DSMRREADER_REMOTE_DATALOGGER_NETWORK_PORT: 23
# ... other configuration ...
Configuration Options¶
Generate Secure Secret Key¶
# Generate random secret key
python3 -c 'from django.core.management.utils import get_random_secret_key; print(get_random_secret_key())'
Use this in DJANGO_SECRET_KEY.
Set Timezone¶
Find your timezone:
Common timezones: - Europe/Amsterdam - Europe/Brussels - Europe/Berlin - America/New_York - America/Los_Angeles
Change Default Password¶
After first login: 1. Navigate to: Settings → Users 2. Click on admin user 3. Change password 4. Save
Or via environment variable:
Post-Installation¶
Verify Installation¶
Check containers are running:
Expected output:
Check logs:
Should see: - No errors - "Server started" messages - Telegram processing messages
Test web interface:
Should return HTTP 200.
Configure Smart Meter¶
- Access web interface:
http://localhost - Login with admin credentials
- Navigate to: Configuration → Datalogger
- Configure:
- DSMR version (4.x or 5.x)
- Serial port:
/dev/ttyUSB0or/dev/dsmr_p1 - Baud rate:
115200(DSMR 4/5) or9600(DSMR 2/3) - Save changes
- Restart container:
docker compose restart dsmr
Verify Data Collection¶
Check dashboard: - Navigate to Dashboard - Should see graphs within 10 seconds - Data updates every 10 seconds
Check database:
docker exec dsmrdb psql -U dsmrreader -d dsmrreader -c "SELECT COUNT(*) FROM dsmr_reading_dsmrreading;"
Should show increasing count.
Upgrade¶
Backup First¶
Database backup:
Configuration backup:
Pull New Image¶
# Stop services
docker compose down
# Pull latest image
docker compose pull
# Start services
docker compose up -d
# Check logs
docker compose logs -f
Upgrade to Specific Version¶
Then:
Uninstallation¶
Remove Containers and Volumes¶
# Stop and remove containers
docker compose down
# Remove with volumes (deletes all data!)
docker compose down -v
# Remove images
docker rmi xirixiz/dsmr-reader-docker:latest
docker rmi postgres:17-alpine
Remove Project Files¶
Remove User Permissions¶
# Remove from docker group
sudo gpasswd -d $USER docker
# Remove from dialout group
sudo gpasswd -d $USER dialout
Troubleshooting Installation¶
Docker Won't Start¶
Check Docker is running:
Start Docker:
Permission Denied¶
Not in docker group:
Port Already in Use¶
You may change the external port (left side) freely, for example 7777:80.
Change port in docker-compose.yaml:
Container Won't Start¶
Check logs:
Enable debug mode:
Serial Device Not Found¶
Check device exists:
Check permissions:
Verify in container: