Files
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

122 lines
6.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 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](https://github.com/lmartinking/webscreensaver) von Lucas Martin-King und Thomas Reifenberger. Der Fork wird unter [Winz/SMA-Screensaver](https://gitea.diehanis.de/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:
```bash
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:
```bash
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:
```json
{
"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:
```bash
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:
```text
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](https://github.com/lmartinking/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](LICENSE) enthält den Text der GNU General Public License, Version 3.