Files
SMA-Screensaver/README.md
T
Winz de0a03febc unny-Portal-Login automatisieren und Fork dokumentieren
- Portal-URL und Pfade für Zugangsdaten und Cookies fest hinterlegen
- SMA-Anmeldung mit Zugangsdaten aus JSON automatisieren
- Cookies dauerhaft speichern und Demo-Funktionen entfernen
- Startskript in sma-screensaver umbenennen
- README mit Einrichtung und Testanleitung ergänzen
- Fork-Hinweise ergänzen und sensible Dateien ignorieren
2026-09-29 18:08:16 +02:00

6.3 KiB
Raw Blame History

SMA-Screensaver

SMA-Screensaver zeigt das Sunny Portal powered by ennexOS in einem GTK/WebKit-Fenster an und automatisiert den Login. Das Programm kann eigenständig zum Testen oder eingebettet in XScreensaver laufen.

Dieses Projekt ist ein Fork von WebScreensaver von Lucas Martin-King und Thomas Reifenberger. Der Fork wird unter Winz/SMA-Screensaver entwickelt.

Änderungen gegenüber WebScreensaver

  • Feste Startseite: https://ennexos.sunnyportal.com/login.
  • Automatischer Klick auf „Anmelden“ und Weiterleitung zu login.sma.energy.
  • Automatisches Ausfüllen und Absenden mit Zugangsdaten aus einer lokalen JSON-Datei.
  • Fester Speicherort für Cookies.
  • Demo-Seiten, Zufallsauswahl, Seitenwechsel und allgemeine Seitenkonfiguration entfernt.

Voraussetzungen

  • Linux mit grafischer Sitzung; die XScreensaver-Einbettung benötigt X11.
  • Python 3 mit PyGObject (gi).
  • GTK 3, GdkX11 3 und WebKit2 mit Introspection-Version 4.1.
  • Internetzugang und ein SMA-Konto mit Zugang zum Portal.
  • XScreensaver für den Betrieb als Bildschirmschoner.

Die Python- und Systembibliotheken müssen über die Paketverwaltung deiner Distribution verfügbar sein. Prüfe die Abhängigkeiten im Projektverzeichnis mit:

python3 sma-screensaver --help

Zugangsdaten einrichten

Die Datei config.json.example ist eine Vorlage für die Zugangsdaten. Kopiere sie beim ersten Einrichten unter dem vom Programm erwarteten Namen:

mkdir -p ~/.config/sma-screensaver
chmod 700 ~/.config/sma-screensaver
cp -n config.json.example ~/.config/sma-screensaver/credentials.json
chmod 600 ~/.config/sma-screensaver/credentials.json

Eine bereits vorhandene Datei wird dabei nicht überschrieben. Öffne ~/.config/sma-screensaver/credentials.json in deinem Editor und trage deine Daten ein:

{
  "username": "deine@email.de",
  "password": "dein-passwort"
}

Beide Werte müssen nicht leere Zeichenketten sein. In JSON müssen Anführungszeichen im Passwort als \" und Backslashes als \\ geschrieben werden.

Die Datei enthält das Passwort im Klartext. Die Dateirechte beschränken den Zugriff auf deinen Benutzer. Zugangsdaten und Cookies gehören nicht ins Repository oder in Fehlerberichte. Zum Testen genügt es, die Datei lokal zu bearbeiten; du musst die Zugangsdaten niemandem mitteilen.

Lokal starten und testen

Starte das Programm aus einer grafischen Sitzung im Projektverzeichnis:

python3 sma-screensaver

Erwarteter Ablauf:

  1. Das Fenster öffnet die Portal-Startseite.
  2. Der Screensaver wartet auf den Anmeldebutton und klickt ihn automatisch an.
  3. Auf der SMA-Anmeldeseite werden Benutzername und Passwort eingetragen und abgesendet.
  4. Bei erfolgreicher Anmeldung öffnet sich das Portal. Eine erforderliche Zwei-Faktor-Bestätigung erledigst du selbst.

Die Meldung SMA-Anmeldeformular automatisch abgesendet. bestätigt das Absenden. Prüfe im Fenster, ob die Anmeldung erfolgreich war. Pro Programmstart gibt es höchstens einen automatischen Anmeldeversuch. Nach einer Korrektur der Zugangsdaten musst du das Programm neu starten.

Zum Beenden das Fenster schließen oder im Terminal Strg+C drücken.

Cookies und feste Pfade

Zweck Pfad
Zugangsdaten ~/.config/sma-screensaver/credentials.json
Cookies ~/.local/share/sma-screensaver/cookies.txt

Der Cookie-Speicher wird beim Start automatisch angelegt und erhält Dateirechte 600. Ob eine Anmeldung beim nächsten Start bestehen bleibt, hängt auch von der Sitzungsgültigkeit beim Portal ab. Für einen Test ohne gespeicherte Cookies das Programm beenden und die Cookie-Datei umbenennen.

Die Pfade sind als CREDENTIALS_FILE und COOKIE_FILE im Skript hinterlegt. config.json.example wird nicht direkt eingelesen.

Einbindung in XScreensaver

Verwende als Programmaufruf einen absoluten Pfad zum Skript, zum Beispiel:

python3 /absoluter/pfad/SMA-Screensaver/sma-screensaver

Füge diesen Aufruf in deine XScreensaver-Programmliste ein. XScreensaver kann die Ziel-Fenster-ID über XSCREENSAVER_WINDOW übergeben. Alternativ unterstützt das Skript -window-id und --window-id mit einer hexadezimalen Fenster-ID.

Teste zuerst im eigenen Fenster, anschließend in der XScreensaver-Vorschau. Die Anmeldung und etwaige interaktive Bestätigungen lassen sich im eigenen Fenster leichter prüfen.

Optionen

Option Funktion
-h, --help Hilfe anzeigen
-window-id ID, --window-id ID In ein bestehendes X11-Fenster einbetten
-no-cache Explizite Aktivierung des WebKit-Browser-Caches überspringen

-no-cache löscht keine vorhandenen Daten und schaltet den separaten Cookie-Speicher nicht ab.

Fehlerbehebung und aktueller Stand

  • No module named gi oder fehlender Namespace: PyGObject und die benötigten GTK-/WebKit-Introspection-Pakete prüfen.
  • GTK kann nicht initialisiert werden: Aus einer grafischen Sitzung starten; für die Einbettung muss ein X11-Display erreichbar sein.
  • Zugangsdaten fehlen oder JSON ist nicht lesbar: Dateipfad, Leserechte und JSON-Syntax lokal prüfen.
  • Kein verwendbares Anmeldeformular gefunden: Die Seite im Fenster prüfen. Änderungen am SMA-Formular oder zusätzliche Anmeldeschritte können eine Anpassung des Skripts erfordern.
  • Anmeldung abgelehnt: Daten lokal korrigieren und das Programm neu starten. Es gibt keine automatische Wiederholungsschleife.

Die Weiterleitung zur SMA-Anmeldeseite wurde mit WebKit erfolgreich getestet. Das Einlesen der JSON-Datei und die Formularlogik wurden mit Testdaten geprüft. Ein vollständiger Login mit echten Zugangsdaten steht noch aus. Eine automatische Auswahl einer bestimmten Anlage oder Dashboard-Seite ist bisher nicht implementiert.

Herkunft und Lizenz

Grundlage ist WebScreensaver.

Ursprünglicher Copyright-Hinweis: Copyright (C) 2012–2017 Lucas Martin-King & Thomas Reifenberger. Dieser Hinweis und die ursprüngliche Lizenzangabe bleiben im Quelltext erhalten. Die Anpassungen für diesen Fork sind im Dateikopf von sma-screensaver gekennzeichnet.

Der übernommene Quelltext nennt die GNU General Public License, Version 2 oder neuer. Die im Repository enthaltene Datei LICENSE enthält den Text der GNU General Public License, Version 3.