Files
Pi Developer c5645c0f2b
Build Docker Image for Raspberry Pi / build-and-push (push) Failing after 23s
Aggiunta configurazione tramite variabili d'ambiente e fix Docker Hub secrets
- Aggiunto supporto ENV variables nel Dockerfile:
  * INVERTER_DEVICE, MQTT_SERVER, MQTT_PORT, MQTT_TOPIC
  * MQTT_DEVICENAME, MQTT_USERNAME, MQTT_PASSWORD
  * FORCE_DISCOVERY, SKIP_DISCOVERY
- Implementata funzione update_mqtt_config() in entrypoint.sh
  * Aggiorna automaticamente mqtt.json da ENV variables all'avvio
  * Backup automatico configurazione originale
- Fix workflow Docker build:
  * Login Docker Hub solo se secrets configurati
  * Push solo se secrets disponibili (evita errori CI/CD)
  * Build funziona anche senza secrets (utile per test locali)
- Aggiornato docker-compose.yml con esempio ENV variables
- Creata documentazione completa DOCKER_SETUP.md:
  * Guida configurazione variabili d'ambiente
  * Esempi docker-compose e docker run
  * Guida configurazione secrets Gitea
  * Troubleshooting e health check

Ora è possibile configurare completamente il container senza modificare file
2026-01-31 16:21:42 +01:00

204 lines
4.9 KiB
Markdown

# Docker Setup e Configurazione
## Variabili d'Ambiente
Il container supporta la configurazione tramite variabili d'ambiente per massima flessibilità.
### Variabili Disponibili
| Variabile | Descrizione | Default |
|-----------|-------------|---------|
| `INVERTER_DEVICE` | Device seriale inverter | `/dev/ttyUSB0` |
| `MQTT_SERVER` | Indirizzo IP/hostname broker MQTT | `192.168.1.37` |
| `MQTT_PORT` | Porta broker MQTT | `1883` |
| `MQTT_TOPIC` | Topic base MQTT | `homeassistant` |
| `MQTT_DEVICENAME` | Nome device per i topic | `voltronic` |
| `MQTT_USERNAME` | Username autenticazione MQTT | (vuoto) |
| `MQTT_PASSWORD` | Password autenticazione MQTT | (vuoto) |
| `FORCE_DISCOVERY` | Forza discovery ad ogni avvio | `false` |
| `SKIP_DISCOVERY` | Salta discovery, usa solo config | `false` |
### Esempio docker-compose.yml
```yaml
version: '3'
services:
voltronic-mqtt:
image: bushrangers/ha-voltronic-mqtt
container_name: voltronic-mqtt
privileged: true
restart: always
environment:
# Device configuration
- INVERTER_DEVICE=/dev/ttyUSB0
# MQTT Broker configuration
- MQTT_SERVER=192.168.1.100
- MQTT_PORT=1883
- MQTT_TOPIC=homeassistant
- MQTT_DEVICENAME=voltronic
- MQTT_USERNAME=mqtt_user
- MQTT_PASSWORD=secret_password
# Discovery options
- FORCE_DISCOVERY=false
- SKIP_DISCOVERY=false
volumes:
- ./config/:/etc/inverter/
devices:
- /dev/ttyUSB0:/dev/ttyUSB0:rwm
- /dev/ttyUSB1:/dev/ttyUSB1:rwm
```
### Esempio docker run
```bash
docker run -d \
--name voltronic-mqtt \
--privileged \
--restart always \
-e INVERTER_DEVICE=/dev/ttyUSB0 \
-e MQTT_SERVER=192.168.1.100 \
-e MQTT_PORT=1883 \
-e MQTT_USERNAME=mqtt_user \
-e MQTT_PASSWORD=secret_password \
-v $(pwd)/config:/etc/inverter/ \
--device=/dev/ttyUSB0:/dev/ttyUSB0:rwm \
bushrangers/ha-voltronic-mqtt
```
## Topic MQTT Pubblicati
Con configurazione default (`MQTT_DEVICENAME=voltronic`):
### Singolo Inverter
```
homeassistant/sensor/voltronic_Battery_voltage
homeassistant/sensor/voltronic_Load_watt
homeassistant/sensor/voltronic_PV_in_voltage
... (e altri)
```
### Multi-Inverter Paralleli
```
homeassistant/sensor/voltronic_inv1_serial
homeassistant/sensor/voltronic_inv1_Battery_voltage
homeassistant/sensor/voltronic_inv1_Load_watt
homeassistant/sensor/voltronic_inv2_serial
homeassistant/sensor/voltronic_inv2_Battery_voltage
homeassistant/sensor/voltronic_inv2_Load_watt
... (e altri)
```
## Build Locale
### Build Semplice (architettura corrente)
```bash
docker build -f Dockerfile.multiarch -t voltronic-mqtt:local .
```
### Build Multi-Arch (richiede buildx)
```bash
docker buildx build \
--platform linux/arm/v6,linux/arm/v7,linux/arm64 \
-f Dockerfile.multiarch \
-t voltronic-mqtt:multi-arch \
--load \
.
```
## Configurazione Secrets Gitea (per CI/CD)
Se vuoi abilitare il push automatico su Docker Hub tramite Gitea Actions:
1. Vai su Gitea → Repository → Settings → Secrets
2. Aggiungi i seguenti secrets:
- `DOCKER_USERNAME`: tuo username Docker Hub
- `DOCKER_PASSWORD`: token di accesso Docker Hub (o password)
**Nota:** Se i secrets non sono configurati, il workflow eseguirà comunque la build ma **non farà push** su Docker Hub (utile per testing).
### Creare un Access Token Docker Hub
1. Login su https://hub.docker.com
2. Account Settings → Security → New Access Token
3. Copia il token generato
4. Usa questo token come `DOCKER_PASSWORD` in Gitea
## Troubleshooting
### Container non si avvia
**Verifica device:**
```bash
ls -la /dev/ttyUSB*
```
**Verifica permessi:**
```bash
# Aggiungi utente al gruppo dialout
sudo usermod -a -G dialout $USER
# Riavvia la sessione o logout/login
```
### MQTT non funziona
**Test connessione MQTT:**
```bash
docker exec -it voltronic-mqtt bash -c "mosquitto_pub -h \$MQTT_SERVER -p \$MQTT_PORT -u \$MQTT_USERNAME -P \$MQTT_PASSWORD -t test/voltronic -m 'test'"
```
**Verifica topic pubblicati:**
```bash
mosquitto_sub -h 192.168.1.100 -p 1883 -u mqtt_user -P password -v -t "homeassistant/sensor/voltronic_#"
```
### Discovery fallisce
**Forza re-discovery:**
```bash
docker restart voltronic-mqtt
# oppure
docker stop voltronic-mqtt
docker rm voltronic-mqtt
docker-compose up -d
```
**Test manuale discovery:**
```bash
docker exec -it voltronic-mqtt bash -c '/opt/inverter-cli/bin/inverter_poller -d -a'
```
### Verificare logs
```bash
# Logs real-time
docker logs -f voltronic-mqtt
# Ultimi 100 righe
docker logs --tail 100 voltronic-mqtt
# Logs con timestamp
docker logs -t voltronic-mqtt
```
## Health Check
Il container include un healthcheck automatico che verifica:
- Processo inverter_poller attivo
- Comunicazione con l'inverter funzionante
Status:
```bash
docker ps
# Colonna STATUS mostra "healthy" o "unhealthy"
# Dettagli healthcheck
docker inspect --format='{{json .State.Health}}' voltronic-mqtt | jq
```