meineschule-digital
Inoffizieller Python-Client für MeineSchule.digital.
Die Bibliothek meldet sich mit einem vorhandenen Benutzerkonto an und liest Daten, auf die dieses Konto Zugriff hat. Sie ist unabhängig von Home Assistant nutzbar. Eine mögliche Home-Assistant-Integration wird als eigenes Projekt entwickelt und verwendet diese Bibliothek als Abhängigkeit.
Funktionen
- Anmeldung mit Benutzername und Passwort
- Auslesen von Home.InfoPoint
- Noten, Fehlzeiten und Bemerkungen
- Unterrichtseinträge und Hausaufgaben
- Individueller Stundenplan für den ausgewählten Schüler
- Ermittlung von Hausaufgaben-Zieldaten aus einem ausdrücklich genannten „zum“-Datum oder aus der nächsten angezeigten Fachstunde
- Ausschluss von Fächern, die zwar im Plan erscheinen, vom Kind aber nicht besucht werden
Voraussetzungen und Installation
Benötigt wird Python 3.11 oder neuer. Installiere die veröffentlichte Git-Version direkt von GitHub:
pip install "git+https://github.com/rine77/meineschule-digital.git@v0.1.0"
Alternativ kannst du das Repository klonen und lokal installieren:
git clone https://github.com/rine77/meineschule-digital.git
cd meineschule-digital
python -m venv .venv
source .venv/bin/activate
pip install .
Für die Entwicklung einschließlich Tests:
pip install -e ".[test]"
pytest -q
Zugangsdaten und Schulpfad
Für die Nutzung brauchst du Benutzername, Passwort und den technischen Schulpfad. Bei dieser Beispieladresse:
https://meineschule.digital/beispiel-gymnasium/hip
ist beispiel-gymnasium der Schulpfad. Übergib diese Angaben aus der
Konfiguration deiner Anwendung. Die Bibliothek speichert keine Zugangsdaten.
Für lokale Versuche gibt es .env.example und das Beispiel unter
examples/read_home_info.py. Kopiere die Beispieldatei nach .env und trage
dort deine eigenen Werte ein. .env wird von Git ignoriert. Das Beispiel
benötigt zusätzlich:
pip install python-dotenv
python examples/read_home_info.py
Verwendung
Der Client arbeitet asynchron und verwendet eine aiohttp.ClientSession:
import asyncio
import os
import aiohttp
from meineschule_digital import MeineSchuleClient
async def main():
async with aiohttp.ClientSession() as session:
client = MeineSchuleClient(session)
await client.login(
os.environ["MSD_USERNAME"],
os.environ["MSD_PASSWORD"],
)
info = await client.get_home_info(
os.environ["MSD_SCHOOL"]
)
print(f"Noten: {len(info.grades)}")
print(f"Bemerkungen: {len(info.remarks)}")
asyncio.run(main())
get_home_info() liefert den angezeigten Schülernamen sowie Noten,
Fehlzeiten, Bemerkungen und Unterrichtseinträge. Für Noten und Bemerkungen
stehen außerdem get_grades() und get_remarks() als Einzelzugriffe bereit.
Noten
Eine Note enthält Fach, Datum, Wert, Bemerkung und den Text der Spalte
Information. Dieser Text wird unverändert übernommen. Die Bibliothek
leitet daraus keine Gewichtung oder Bewertungskategorie ab und berechnet
keinen Notendurchschnitt.
Hausaufgaben
get_homework() verbindet die Einträge aus Home.InfoPoint mit dem
individuellen Stundenplan:
from datetime import date, timedelta
heute = date.today()
aufgaben = await client.get_homework(
"beispiel-gymnasium",
heute - timedelta(days=7),
heute + timedelta(days=7),
excluded_subjects={"er"},
)
Jede Aufgabe enthält das Aufgabedatum (assigned_date), das Fach
(subject), den vollständigen Text (text), ein mögliches Zieldatum
(due_date) und dessen Herkunft (due_date_source):
| Herkunft | Bedeutung |
|---|---|
explicit |
Im Aufgabentext steht ein Datum in der Form zum DD.MM.JJJJ. |
schedule |
Das Datum wurde aus der nächsten nicht ausgefallenen Fachstunde ermittelt. |
unknown |
Innerhalb der abgefragten Planwochen war keine verlässliche Zuordnung möglich. |
Die Datumsspalte auf Home.InfoPoint bezeichnet den Tag, an dem die Aufgabe eingetragen wurde. Sie ist nicht automatisch das Zieldatum.
Mit excluded_subjects kannst du schülerbezogen Fächer ausschließen, die
trotzdem im Stundenplan oder bei den Hausaufgaben angezeigt werden. Für
einen Schüler, der Ethik (Et) statt evangelischer Religion (ER) besucht,
kann beispielsweise {"er"} übergeben werden. Fachkürzel werden ohne
Beachtung der Groß- und Kleinschreibung verglichen.
Fehler
Ein fehlgeschlagener Login oder eine abgelaufene Sitzung löst
AuthenticationError aus. Ein verweigerter Planabruf löst
PermissionError aus. Unerwartete Antworten und ungültige Parameter
können ValueError auslösen. Netzwerkfehler werden von aiohttp
weitergegeben.
Grenzen
Die Bibliothek nutzt die Weboberfläche von MeineSchule.digital. Änderungen an deren HTML oder JSON können Anpassungen des Clients erforderlich machen. Ein Zieldatum aus dem Stundenplan wird nur ermittelt, wenn die benötigten Planwochen erfolgreich abgefragt wurden. Schulspezifische Angaben werden als Rohdaten weitergegeben und nicht inhaltlich interpretiert.
Eine ausführlichere Beschreibung der Datenfelder und Methoden findest du in der Anwenderdokumentation.
Datenschutz
Committe keine Passwörter, Session-Cookies, HAR-Dateien oder unbearbeiteten HTML- und JSON-Antworten mit Schülerdaten. Verwende für Tests ausschließlich erfundene oder vollständig anonymisierte Daten.
Lizenz
MIT – siehe LICENSE.
Release files for meineschule-digital 0.1.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| meineschule_digital-0.1.2.tar.gz | 13.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| meineschule_digital-0.1.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 24.8 kB
Release files / meineschule_digital-0.1.2.tar.gz
| Download URL | meineschule_digital-0.1.2.tar.gz |
|---|---|
| Size | 13.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d6d4bf7fd69bac0101291fcc40a261152ba4803cd7e27d6eccc1bc4b9d26ca22
|
|
BLAKE2b-256 checksum How to use checksums |
a03b97077aecc02e2e703d1ea48298e8517d3a9b5429c9d01066ca8cb7eb4fcb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency logRelease files / meineschule_digital-0.1.2-py3-none-any.whl
| Download URL | meineschule_digital-0.1.2-py3-none-any.whl |
|---|---|
| Size | 11.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
fd8d04810e773cbc9783abf54ea1b4b0fdf985ae00574b5d3d9e48011c487865
|
|
BLAKE2b-256 checksum How to use checksums |
1690a5ed65c42a925d2bf7a97afbc832e4266c984476febc30c7f07caeba6c46
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 23, 2026.
Transparency log