Shelly Solar Control

Selfmade Python-Tool – schaltet dein Shelly-Relais automatisch, sobald deine PV-Anlage genug Strom ins Netz einspeist.

Sonne
SolarEdge
Script
Shelly

🔆 Was macht das Tool?

Das Python-Script pvshelly.py fragt alle 30 Sekunden die SolarEdge Monitoring API ab (currentPowerFlow: PV, GRID, LOAD, STORAGE), berechnet daraus die aktuelle Netzeinspeisung und liest zusätzlich den Batterie-Ladestand (USOC) über eine Batterie-REST-API (z. B. sonnenBatterie, per Auth-Token).

Liegt die Einspeisung mindestens 5 Minuten am Stück über 6000 W (und läuft gerade keine Sperrzeit), schaltet das Script dein Shelly per HTTP-RPC ein (Switch.Set) und 5 Sekunden später wieder aus – perfekt als Impuls für Boiler, Poolpumpe & Co. Danach greift eine Sperrzeit von 60 Minuten. Fällt die Einspeisung unter die Schwelle, wird der Timer zurückgesetzt. Alles landet im Log shelly_log.txt, das täglich um 01:00 Uhr automatisch geleert wird.

  • 6000 W Schwelle
  • 5 min Haltezeit
  • 60 min Sperrzeit
  • 30 s Poll-Intervall
  • 01:00 Log-Reset

📌 Voraussetzungen

  • Python 3.8 oder höher ist installiert
  • Das Python-Paket requests (Installation in Schritt 1)
  • SolarEdge-Monitoring-Konto mit API-Schlüssel (Admin → Zugriffssteuerung → API-Schlüssel erstellen) und deiner Site ID aus dem Dashboard
  • Shelly-Gerät (z. B. Shelly Plus 1 oder Shelly Pro 2) mit bekannter IP-Adresse und aktivierter Web-API
  • Optional: Batterie-REST-API (z. B. sonnenBatterie) mit URL und Auth-Token für den USOC-Wert
1

Python & requests installieren

Du brauchst Python 3.8+ und das requests-Modul:

Terminal
pip install requests
2

Repo holen

Das Script liegt open source auf GitHub – einfach klonen:

Terminal
git clone https://github.com/Secoolioo/shelly-solar-control.git
cd shelly-solar-control
3

Konfiguration anpassen

Öffne pvshelly.py und trage oben deine Werte ein:

Python
# pvshelly.py – Konfiguration / configuration
SHELLY_IP = "192.168.1.100"          # IP deines Shelly / your Shelly's IP
SOLAREDGE_API_KEY = "DEIN_API_KEY"   # SolarEdge Monitoring API-Key
SOLAREDGE_SITE_ID = "DEINE_SITE_ID"  # Site ID aus dem Dashboard / from dashboard
USOC_URL = "http://192.168.1.50/api/v2/status"  # Batterie-REST-API / battery REST API
HEADERS = {"Auth-Token": "DEIN_AUTH_TOKEN"}     # Auth-Token der Batterie / battery auth token
Variable Bedeutung
SHELLY_IP IP-Adresse deines Shelly im lokalen Netz
SOLAREDGE_API_KEY API-Schlüssel aus dem SolarEdge-Monitoring (Admin → Zugriffssteuerung)
SOLAREDGE_SITE_ID Deine Anlagen-ID aus dem SolarEdge-Dashboard
USOC_URL REST-URL der Batterie für den Ladestand (USOC), z. B. sonnenBatterie
HEADERS Auth-Token-Header für die Batterie-API
4

Schwellwerte anpassen

Direkt darunter steuerst du, wann geschaltet wird – die Defaults sind ein guter Start:

Python
TRIGGER_THRESHOLD = 6000  # Einspeise-Schwelle in Watt / feed-in threshold (W)
HOLD_TIME = 300           # Mindestdauer in Sekunden (5 min) / hold time (s)
LOCKOUT_TIME = 3600       # Sperrzeit in Sekunden (60 min) / lockout (s)
5

Starten

Script starten – ab jetzt wird alle 30 Sekunden gepollt und alles in shelly_log.txt protokolliert:

Terminal
python pvshelly.py
6

Dauerbetrieb: systemd-Service (Raspberry Pi/Server)

Damit das Script rund um die Uhr läuft und nach einem Neustart automatisch wieder startet, richtest du es als systemd-Service ein. Unit-Datei anlegen:

/etc/systemd/system/pvshelly.service
[Unit]
Description=Shelly Solar Control (pvshelly)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=pi
WorkingDirectory=/home/pi/shelly-solar-control
ExecStart=/usr/bin/python3 /home/pi/shelly-solar-control/pvshelly.py
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

Dann aktivieren und starten:

Terminal
sudo systemctl daemon-reload
sudo systemctl enable --now pvshelly.service
systemctl status pvshelly.service

Troubleshooting

  • API-Key falsch? Dann stehen Fehlermeldungen wie „Error retrieving PV data“ im Log – Key und Site ID prüfen.
  • Shelly nicht erreichbar? IP-Adresse checken und sicherstellen, dass die Web-API am Shelly aktiviert ist.
  • Log live ansehen: tail -f shelly_log.txt

🐙 Open Source auf GitHub

Das komplette Script ist open source – Code lesen, forken, verbessern:

Shelly Solar Control auf GitHub