Si tens dispositius Shelly a casa — mesuradors d'energia, endolls intel·ligents o sondes de temperatura — pots anar molt més enllà de l'app oficial. En aquest article explico com hem muntat un sistema complet per recollir les dades cada 10 segons, guardar-les a InfluxDB i visualitzar-les amb Grafana en dashboards personalitzats.
Per a què serveix tot això?
L'app de Shelly és útil per al dia a dia, però no et permet veure l'evolució del consum al llarg del temps, comparar dispositius, o creuar les dades amb altres fonts (com ara la producció solar teòrica). Amb aquest sistema pots:
- Veure el consum en temps real de cada circuit de casa.
- Comparar la producció solar real amb la teòrica per la teva ubicació.
- Monitorar temperatures de fins a 9 sondes DS18B20 simultàniament.
- Crear alertes si el consum supera un llindar.
- Accedir als dashboards des d'internet via Cloudflare Tunnel, sense obrir ports.
Arquitectura del sistema
El flux és senzill: un script Python consulta l'API de Shelly Cloud cada 10 segons, transforma les dades i les escriu a InfluxDB. Grafana llegeix d'InfluxDB i pinta les gràfiques. Tot corre en Docker al mateix servidor.
Shelly Cloud API (shelly-194-eu.shelly.cloud)
│
│ HTTP POST /device/all_status (cada 10s)
▼
shelly_collector.py (Python 3 · servei systemd)
│
│ InfluxDB Line Protocol
▼
InfluxDB 2.x (Docker · port 8086)
bucket: shelly
│
│ Flux queries
▼
Grafana (Docker · port 3000)
Pas 1 — Obtenir les credencials de Shelly Cloud
El portal antic (home.shelly.cloud) està deprecated. Ara tot es fa des de control.shelly.cloud. Per obtenir la clau d'autenticació i el servidor, obre el navegador, prem F12, ves a la pestanya Network i fes qualsevol acció a l'app. Veuràs peticions al teu servidor (ex: shelly-194-eu.shelly.cloud) i el paràmetre auth_key.
Verifica que funciona amb aquest curl:
curl -X POST "https://shelly-194-eu.shelly.cloud/device/all_status?auth_key=LA-TEVA-CLAU"
Si veus un JSON amb tots els teus dispositius, perfecte. Anota les MACs de cada Shelly — les necessitaràs al script.
Pas 2 — Muntar InfluxDB i Grafana amb Docker
services:
influxdb:
image: influxdb:2
ports: ["8086:8086"]
volumes:
- influxdb_data:/var/lib/influxdb2
grafana:
image: grafana/grafana:latest
ports: ["3000:3000"]
volumes:
- grafana_data:/var/lib/grafana
volumes:
influxdb_data:
grafana_data:
Un cop en marxa, crea el bucket:
sudo docker exec influxdb influx bucket create \
--name shelly \
--retention 0 \
--org EL-TEU-ORG
Pas 3 — El script de recol·lecció
El script shelly_collector.py té un mapa de dispositius on defineixes cada Shelly amb el seu ID (MAC), nom i tipus. Suporta quatre tipus: em (mesurador 2 canals), plug_gen2 (Plug S Gen2), shelly1_temp (Shelly 1 amb sondes DS18B20) i ht (H&T). Exemple per un Shelly EM:
{
"id": "c45bbe6b6dd6", # MAC en minúscules sense :
"name": "em-Recoder", # nom que apareixerà a Grafana
"type": "em",
"room": "garatge",
"ch0_label": "entrada",
"ch1_label": "sortida",
},
Instal·la les dependències i prova el script:
pip3 install requests influxdb-client --break-system-packages
python3 shelly_collector.py
# Sortida esperada:
# 2026-03-26 15:18:28 INFO ✅ 22 punts escrits a InfluxDB (15:18:28)
Pas 4 — Convertir-ho en un servei systemd
Crea /etc/systemd/system/shelly-collector.service:
[Unit]
Description=Shelly Cloud -> InfluxDB collector
After=network-online.target
[Service]
Type=simple
User=root
WorkingDirectory=/srv/docker/grafana
ExecStart=/usr/bin/python3 /srv/docker/grafana/shelly_collector.py
Restart=always
RestartSec=15
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable shelly-collector
sudo systemctl start shelly-collector
sudo systemctl status shelly-collector
Pas 5 — Configurar Grafana
A http://localhost:3000, afegeix un Data Source d'InfluxDB amb Query Language: Flux, URL http://influxdb:8086 (nom del contenidor, no localhost), l'organització i el token. Importa els tres dashboards JSON des de Dashboards → Import → Upload JSON.
Extra — Comparar producció solar real vs teòrica
Importa primer el fitxer de dades de referència solar:
sudo docker cp solar_barcelona_2025_2026.lp influxdb:/tmp/
sudo docker exec influxdb influx write \
--bucket shelly \
--org EL-TEU-ORG \
--precision ns \
--file /tmp/solar_barcelona_2025_2026.lp
Query Flux per mostrar les dues corbes al mateix gràfic a Grafana:
real = from(bucket: "shelly")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "energy")
|> filter(fn: (r) => r._field == "power_w")
|> filter(fn: (r) => r.device == "em-Recoder")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> map(fn: (r) => ({r with _field: "real " + r.channel}))
solar = from(bucket: "shelly")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "solar_production")
|> filter(fn: (r) => r._field == "power_w")
|> aggregateWindow(every: v.windowPeriod, fn: mean, createEmpty: false)
|> map(fn: (r) => ({r with _field: "solar-teoric-w"}))
union(tables: [real, solar])
Afegir un nou dispositiu Shelly
- Troba la MAC amb el curl de
/device/all_status. - Afegeix el bloc de configuració a la llista
DEVICESdel script. - Reinicia el servei — les queries generals de Grafana ja el mostraran automàticament.
# Trobar la MAC del nou dispositiu
curl -s -X POST \
"https://shelly-194-eu.shelly.cloud/device/all_status?auth_key=LA-TEVA-CLAU" \
| python3 -m json.tool | grep '"mac"'
# Reiniciar el servei
sudo systemctl restart shelly-collector
Resultat final
Amb tot muntat, tenim 11 dispositius Shelly reportant dades cada 10 segons: 5 mesuradors EM (alguns amb solar), 2 Plug S Gen2, 3 Shelly 1 amb sondes DS18B20 i 1 H&T. Grafana mostra tres dashboards diferenciats i el sistema porta mesos funcionant sense cap intervenció manual.
Més informació
- control.shelly.cloud — portal oficial Shelly
- Documentació InfluxDB 2.x
- Documentació Grafana