Skip to content

zwodreizehn/strom

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

7 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

strom

Live-Dashboard für Smartmeter (inexogy / vormals Discovergy) als Terminal-Tool – optional mit Tibber-Marktpreisen, Zählerstand-Commit (Opt-in + 2FA) und einem Web-Export (HTML/PHP) inklusive Ampel-Empfehlung fürs Handy.

strom Live-Dashboard

Nur Python-Standardbibliothek – keine Pakete nötig. Die Live-Werte kommen über die inexogy-REST-API (HTTP Basic Auth); ein Hintergrund-Thread pollt den Zähler, die curses-Oberfläche bleibt flüssig und blockiert nie auf dem Netz.

Whitelabel: Beim ersten Start fragt ein Assistent die nötigen Zugangsdaten ab und legt die Konfiguration an. Branding (brand=), Export-Ziel und 2FA-Absender sind frei konfigurierbar – keine Anbieter- oder Personendaten im Code.

Voraussetzungen

  • Python ≥ 3.8 (Standardbibliothek genügt, inkl. curses – unter Linux/macOS vorhanden).
  • Ein inexogy-Konto mit Smartmeter (E-Mail + Passwort).
  • Optional: Tibber-Konto für Marktpreise (Developer-Token empfohlen).
  • Optional: himalaya CLI für den 2FA-Mailversand beim Zählerstand-Commit.
  • Optional: ein Webspace/Server mit PHP für den Handy-Export.

Beisp. PHP export

Installation

git clone <REPO-URL> strom
cd strom
ln -s "$PWD/strom" ~/.local/bin/strom    # ~/.local/bin muss im PATH sein
strom                                    # erster Start → Einrichtungs-Assistent

Der Assistent (strom setup) fragt inexogy-Login, optional Tibber und Web-Export ab und schreibt ~/.config/strom/config (Modus 600). Danach startet strom direkt das Dashboard.

Man-Page (optional):

man -l strom.1                                        # direkt ansehen
sudo install -m644 strom.1 /usr/local/share/man/man1/ && sudo mandb && man strom

Benutzung

strom                # interaktives Live-Dashboard (TUI)
strom now            # einmalige Momentaufnahme (Klartext)
strom watch [SEK]    # Momentaufnahme alle SEK Sekunden (Default 5)
strom markt          # Tibber-Marktpreise heute (Klartext-Tabelle)
strom khal [STD] [--note T] [-y]   # günstiges Fenster als khal-Erinnerung
strom export [PFAD]  # HTML/PHP-Seite schreiben (Default aus export_path)
strom commit         # aktuellen Zählerstand an Tibber senden (Opt-in + 2FA)
strom meters         # alle Zähler des Kontos auflisten
strom setup          # Einrichtungs-Assistent (Konfiguration neu anlegen)
strom test           # Verbindung/Login prüfen
strom version | help

In der TUI: [R] aktualisieren, [M] Markt-/Preistabelle, [C] Zählerstand an Tibber, [K] khal-Erinnerung, [Q] beenden. Das Dashboard zeigt die aktuelle Leistung (Balken), den Verbrauch seit Mitternacht, die Zählerstände (Gesamt-Bezug zusätzlich als große 80er-LED-Ziffern), einen 15-Min-Verlauf und – wenn Tibber konfiguriert ist – ein MARKT-Panel mit aktuellem Preis, Tagesverlauf und günstigster Stunde. Einspeisung (negative Leistung) wird markiert.

Konfiguration

~/.config/strom/config (Modus 600, KEY=WERT je Zeile). Umgebungsvariablen haben Vorrang. Beispiel siehe config.example.

Key Pflicht Bedeutung
email, password inexogy-Login
meter_id Zähler-ID (sonst automatisch ermittelt)
interval Sekunden zwischen Live-Abfragen (Default 2)
chart_height Zeilenhöhe der Charts (0 = automatisch)
brand Label oben links (Whitelabel; Default IBM 3270 ▐ STROM)
tibber_token Developer-Token von developer.tibber.com (bevorzugt)
tibber_email, tibber_password Fallback statt Token (App-Login)
tibber_home appNickname-Teil oder Index, sonst erstes Home
tibber_commit on schaltet den Zählerstand-Commit frei (Default aus)
commit_email Ziel des 2FA-Codes (Default: email)
mail_from Absender des 2FA-Codes (Default: commit_email)
khal_calendar Ziel-Kalender für khal-Erinnerungen (Default: khals eigener)
khal_reminder Voralarm der khal-Erinnerung in Minuten (Default 30)
export_path Ziel von strom export (Default ~/strom.php)

Passende Umgebungsvariablen: STROM_EMAIL, STROM_PASSWORD, STROM_METER, STROM_INTERVAL, STROM_CHART_HEIGHT, STROM_BRAND, STROM_TIBBER_TOKEN, STROM_TIBBER_EMAIL, STROM_TIBBER_PASSWORD, STROM_TIBBER_HOME, STROM_TIBBER_COMMIT, STROM_COMMIT_EMAIL, STROM_MAIL_FROM, STROM_KHAL_CALENDAR, STROM_KHAL_REMINDER, STROM_EXPORT_PATH, STROM_CONFIG_DIR.

Web-Export für unterwegs (strom export / Cron)

Schreibt eine in sich geschlossene, handy-taugliche HTML/PHP-Seite mit aktueller Leistung, Tagesverbrauch, Zählerständen, Tibber-Preisen und einer Ampel-Empfehlung, ob/wann sich stromintensiver Betrieb lohnt (🟢 günstig / 🟡 normal / 🔴 teuer, inkl. nächster günstiger Stunde). Reine Anzeige, kein Schreibzugriff auf Tibber.

Die Werte werden beim Erzeugen fest in die Seite geschrieben; der PHP-Kopf setzt No-Cache-Header und ein <meta refresh> lädt am Handy selbsttätig nach. Ziel ist export_path (oder $STROM_EXPORT_PATH) – z. B. ein per sshfs gemounteter Webspace.

Nicht-interaktiv und damit cron-tauglich über timed_export.sh (schreibt atomar, loggt). Ist $STROM_EXPORT_PATH gesetzt und dessen Verzeichnis fehlt, wird sauber übersprungen; mit STROM_EXPORT_MOUNT=1 wird zusätzlich verlangt, dass das Zielverzeichnis ein aktiver Mountpoint ist (schützt bei ausgefallenem sshfs davor, lokal ins leere Mount-Verzeichnis zu schreiben):

# einfacher Fall: Ziel aus der Konfiguration (export_path)
*/10 * * * * /pfad/zu/strom/timed_export.sh >> /pfad/zu/strom/export.log 2>&1

# gemounteter Webspace, nur schreiben wenn eingehängt:
*/10 * * * * STROM_EXPORT_PATH=$HOME/webspace/strom.php STROM_EXPORT_MOUNT=1 \
  /pfad/zu/strom/timed_export.sh >> /pfad/zu/strom/export.log 2>&1

khal-Erinnerung (strom khal / TUI [K])

Legt das günstigste zusammenhängende Verbrauchsfenster ab jetzt (aus den Tibber-Preisen, bezieht morgen mit ein, sobald veröffentlicht) als Termin mit Voralarm in khal an – praktisch, um stromintensiven Betrieb in die billige Stunde zu legen.

strom khal                       # 1-Stunden-Fenster, mit Rückfrage
strom khal 2                     # günstigstes 2-Stunden-Fenster
strom khal --note "Trockner"     # optionale Notiz am Termin
strom khal -y                    # ohne Rückfrage (für Cron/Skripte)

Vor dem Eintragen zeigt der Befehl den geplanten Termin und fragt nach; -y (bzw. --yes) überspringt die Rückfrage – nötig z. B. im Cron, wo keine Eingabe möglich ist. --note TEXT hängt eine Bemerkung an die Terminbeschreibung (in der TUI über [N]).

Der Termin hat eine tagesstabile UID (strom-cheap-<Datum>): ein erneuter Aufruf am selben Tag aktualisiert denselben Termin, statt einen zweiten anzulegen – so eignet sich der Befehl auch für einen Cron. Die Datei wird direkt in das vdir-Verzeichnis des Zielkalenders geschrieben (aus der khal-Konfiguration ermittelt); ist das nicht möglich, greift ersatzweise khal import. Zielkalender und Voralarm sind über khal_calendar / khal_reminder konfigurierbar. Setzt ein installiertes khal und konfigurierte Tibber-Preise voraus.

Zählerstand an Tibber senden (strom commit / TUI [C])

Sendet den aktuellen inexogy-Zählerstand an Tibber (GraphQL-Mutation sendMeterReading). Schreibender, abrechnungsrelevanter Eingriff – darum dreifach abgesichert:

  1. Opt-in: erst mit tibber_commit=on aktiv (Default aus).
  2. Wertbestätigung: der vorgeschlagene kWh-Wert ist immer editierbar.
  3. 2FA: ein 6-stelliger Code wird per himalaya an commit_email geschickt und muss eingegeben werden.

Einheiten

Die API liefert Rohwerte; core.py rechnet um (empirisch bestätigt):

Feld Rohwert Umrechnung
power, power1..3 Milliwatt (mW) Watt = roh / 1000
energy, energyOut 10⁻¹⁰ kWh kWh = roh / 1e10

SLP-Lastprofilzähler liefern keine echte Momentanleistung – dann zeigt das Dashboard die mittlere Leistung der letzten 15-Min-Stufe und blendet L1–L3 aus.

Aufbau

Funktion, Inhalt und Oberfläche getrennt:

strom                  # dünner Launcher
stromzaehler/
  config.py  – Zugangsdaten & Einstellungen laden
  wizard.py  – interaktiver Erststart-Assistent (Config anlegen)
  brand.py   – Whitelabel-Label der Statusleiste
  api.py     – REST-Client der inexogy-API (Basic Auth, nur stdlib)
  core.py    – Einheiten-Umrechnung, Kennzahlen, Session-Historie
  markt.py   – Tibber-Marktpreise + sendMeterReading (GraphQL)
  commit.py  – Zählerstand-Commit mit Opt-in + 2FA
  export.py  – HTML/PHP-Seite mit Empfehlung (Web-Export, cron)
  mail.py    – 2FA-Code-Versand über himalaya
  khal.py    – günstigstes Fenster als khal-Erinnerung exportieren
  theme.py / render.py / tui.py  – Retro-Terminal-UI (Klartext bzw. curses)
  cli.py     – Einstieg / Befehlszeile

API

  • inexogy-REST-API: https://api.inexogy.com/public/v1 · Doku https://api.inexogy.com/docs/ · HTTP Basic Auth (E-Mail/Passwort).
  • Tibber-GraphQL: https://api.tibber.com/v1-beta/gql · Token: https://developer.tibber.com/.

Lizenz

Siehe LICENSE.

About

Live-Dash Idee für Smartmeter (inexogy / vorm. Discovergy) als Terminal-Tool – opt. mit Tibber-Marktpreisen, Zählerstand-Commit (Opt-in + 2FA) und einem Web-Export (HTML/PHP) Nur Python-Standardbibliothek – keine Pakete nötig. Live-Werte über die inexogy-REST-API (HTTP Basic Auth); ein Hintergrund-Thread pollt den Zähler. curses

Topics

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors