69_Webuntis: Beta-Modul zum Auslesen von Webuntis Stundenplänen

Begonnen von KernSani, 26 Februar 2023, 23:52:38

Vorheriges Thema - Nächstes Thema

Sailor

#60
Moin tosammen

anbei meine letzte Version mit meinen Änderungen gegenüber kernSanis Version:

Neuste Features:
a) Neues Attribut "DaysTimetable" zur Festlegung wieviele tage im vorraus sowohl der Stundenplan als auch die Fehlzeiten heruntergeladen werden soll.
b) Die SubRoutine "exportTT2iCal($hash);" wird jetzt am Ende von "parseTT()" aufgerufen.

KernSani ist und bleibt der Maintainer von 69_Webuntis.pm. Ich habe lediglich mit dieser Version ein paar Änderungsvorschläge gemacht.

Gruß
    Sailor
******************************
Man wird immer besser...

andies

Bei uns ist das so:
my %codeMap = (irregular=>"Vtr. ohne Lehrer",cancelled=>"f.a.");
Das würde heißen, dass man den ganzen Codemap in die Attribute verlagert. Aber haben wir denn auch so viele Nutzer und so viele Versionen hier?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

Sailor

Moin zusammen

Hat mal Jemand von Euch herausbekommen, wie man den individuellen Stundenplan des Schülers anstelle des Stundenplans der gesamten Klasse inklusive aller Parallel-Kurse bekommt?

Danke!

Gruß
    Sailor
******************************
Man wird immer besser...

andies

Kannst du nicht die einzelnen Kurse im device händisch auskommentieren?
FHEM 6.3 auf RaspPi4 (Raspbian:  6.6.28+; Perl: v5.36.0)
SIGNALduino (433 MHz) und HM-UART (868 MHz), Sonoff, Blitzwolf, Somfy RTS, CAME-Gartentor, Volkszähler, Keyence-Sensor, Homematic-Sensoren und -thermostat, Ferraris-Zähler für Wasseruhr, Openlink-Nachbau Viessmann

tobi01001

Zitat von: Sailor am 10 November 2024, 13:38:18Moin zusammen

Hat mal Jemand von Euch herausbekommen, wie man den individuellen Stundenplan des Schülers anstelle des Stundenplans der gesamten Klasse inklusive aller Parallel-Kurse bekommt?

Danke!

Gruß
    Sailor

Der ist bei uns leider so vermurkst, dass regelmäßig Stunden komplett fehlen. Von daher hab ich da bisher keinerlei Energie hin verschwendet.

Vielleicht hab ich die Tage mal Zeit und Lust da reinzuschauen...
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Sailor

Moin Tobi

Zitat von: tobi01001 am 10 November 2024, 22:50:45Der ist bei uns leider so vermurkst, dass regelmäßig Stunden komplett fehlen. Von daher hab ich da bisher keinerlei Energie hin verschwendet.
Vielleicht hab ich die Tage mal Zeit und Lust da reinzuschauen...

Also hast du schon irgendwas Individuelles in der Richtung raus bekommen?

Gruß
   Sailor

PS: Die kalte, dunkle Jahreszeit hat ja begonnen. Da kann man ja mal wieder programmieren!  ;)
******************************
Man wird immer besser...

tobi01001

Zitat von: Sailor am 11 November 2024, 09:29:56Moin Tobi

Zitat von: tobi01001 am 10 November 2024, 22:50:45Der ist bei uns leider so vermurkst, dass regelmäßig Stunden komplett fehlen. Von daher hab ich da bisher keinerlei Energie hin verschwendet.
Vielleicht hab ich die Tage mal Zeit und Lust da reinzuschauen...

Also hast du schon irgendwas Individuelles in der Richtung raus bekommen?

Gruß
   Sailor

PS: Die kalte, dunkle Jahreszeit hat ja begonnen. Da kann man ja mal wieder programmieren!  ;)

Nee, Mangels funktionierendem individuellen Stundenplan (auf Seite der Schule / webuntis) habe ich es bisher noch nicht versucht.

Aber wie du schreibst, ist eventuell bei dem kalten nassen Wetter etwas Zeit dafür.
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

tobi01001

Zitat von: tobi01001 am 11 November 2024, 23:02:36
Zitat von: Sailor am 11 November 2024, 09:29:56Moin Tobi

Zitat von: tobi01001 am 10 November 2024, 22:50:45Der ist bei uns leider so vermurkst, dass regelmäßig Stunden komplett fehlen. Von daher hab ich da bisher keinerlei Energie hin verschwendet.
Vielleicht hab ich die Tage mal Zeit und Lust da reinzuschauen...

Also hast du schon irgendwas Individuelles in der Richtung raus bekommen?

Gruß
  Sailor

PS: Die kalte, dunkle Jahreszeit hat ja begonnen. Da kann man ja mal wieder programmieren!  ;)

Nee, Mangels funktionierendem individuellen Stundenplan (auf Seite der Schule / webuntis) habe ich es bisher noch nicht versucht.

Aber wie du schreibst, ist eventuell bei dem kalten nassen Wetter etwas Zeit dafür.


OK, im Prinzip ganz einfach. Muss nur "korrekt" ins Modul eingebaut werden. Und man müsste entweder die Student-IDs ermitteln können (oder wissen) und per Attribut setzen können.

Hardcodiert funktioniert das (zumindest bei mir):
sub getTT {

...

my %body = (

        ...

        "params"  => [
            {
                "element" => {
                    "id"   => 0815, ## <<< hier kommt anstatt ID der Klasse die StudentID
                    "type" => 5   ## Type auf 5 entspricht Student
                },

...


Eventuell kann ich das die Tage selektierbar (Klasse oder Schüler) einbauen. Was war nochmal der letze Stand den ihr bzw. die Allgemeinheit nutzt?
Die SchülerID habe ich mir über den Webuntis Web-Login und Chrome im Entwicklermodus geholt...

Wenn man sich anmeldet, bekommt man über dir Antwort auf die Authentifizierung aber auch die entsprechende id geliefert. (gibt das Modul gerade nicht aus, schadet aber wohl nicht das evtl. als Internal zu hinterlegen). Wenn man sich also als Schüler anmeldet, sollte das auch die entsprechende ID zurückgeben. Irgendwie kann man bestimmt auch seine zugeordneten Kinder abfragen (evtl. wie die Klassen?!).

Gruß,
Tobias
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Sailor

Hallo Tobias

Zitat von: tobi01001 am 13 November 2024, 10:43:05Eventuell kann ich das die Tage selektierbar (Klasse oder Schüler) einbauen. Was war nochmal der letze Stand den ihr bzw. die Allgemeinheit nutzt?

Das wäre echt Cool.

Kannst du als Basis meine letzte 69_Webuntis.pm verwenden.

Siehe hier

Gruß
    Sailor
******************************
Man wird immer besser...

tobi01001

#69
OK,
ich hab mal ein wenig was eingebaut:

- Beim Login werden iD und Typ (und sofern ein Schüler Klasse) in INTERNAL abgelegt (hätte man auch als Reading machen können).

Weiterhin gibt es zwei neue Attribute:
  • studentID Schüler*innen ID
    • Wenn sich dieses Webuntis Device mit den student Zugangsdaten anmeldet, kann man die ID aus den Internals ablesen - das habe ich nicht explizit probiert. Edit: Das funktioniert bei mit wunderbar und man bekommt die IDs für Student und Klasse sowie Klassenname in den Internals angezeigt.
    • Alternativ über den Elternlogin bei Webuntis und im Entwicklermodus des Browsers. Wenn man da auf Stundenplan klickt und das korrekte Kind auswählt, erscheint unter Network im Entwicklermodus eine URL der art: https://....webuntis.com/WebUntis/api/public/timetable/weekly/data?elementType=5&elementId=0815&date=2024-11-13&formatId=1 in der Übersicht als data?elementType=5&elementId=6439&date=2024-11-13&formatId=1 gezeigt. --> Diese elemtId als stundentID eintragen.
    • oder im Elternlogin auf seine E-Mail / Benutzernamen zu den Einstellungen und dann in den Kontaktdaten auf das Kind klicken. Dann kommt bei mir ein /contactdetails?personId=0815&isRequestForStudent=true...
  • timeTableMode
    • class - der Stundenplan wird wie bisher über die eingestellte Klasse geholt.
    • student- der Stundenplan wird für den unter studentID angegebenden Schüler geholt.

Einfach mal schauen ob das funktioniert und gerne zurückmelden. Mit Verbose 5 im Device sieht man im Log was als Anfrage raus geht und was in der Callback zurück kommt.

Grüße,
Tobias
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

enno

#70
Moin Tobias,

vielen Dank für die Überarbeitung! Ich habe es hier bei meinen beiden Kindern eingebaut. Der Stundenplan ist jetzt für beide angepasst bei Entfall etc. Sehr schön!

Jetzt bastel ich mal weiter am Readingsgroup für die Darstellung :)

Gruss
  Enno

Edit: In deiner Beschreibung steht  timeTableMode auf timetable richtig ist aber wohl student
Einfacher FHEM Anwender auf Intel®NUC

tobi01001

Dank für den Hinweis. Hab ich schnell korrigiert - zum Glück wegen Dropdown nicht so dramatisch.

Sind hier zufällig Pädagogen anwesend? Wüsste gerne ob man über personId und Type=2 (Teacher) auch den personalisierten Plan bekommen würde.

FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

Sailor

Hallo tobias

Zitat von: tobi01001 am 13 November 2024, 23:12:42OK,
ich hab mal ein wenig was eingebaut:

- Beim Login werden iD und Typ (und sofern ein Schüler Klasse) in INTERNAL abgelegt (hätte man auch als Reading machen können).
Weiterhin gibt es zwei neue Attribute:
  • studentID Schüler*innen ID
  • timeTableMode

Ist vorhanden und wird automatisch angezeigt.
Leider wird immer noch der Stundenplan der gesamten Klasse mit allem Parallelkursen exportiert und nicht der individuelle des Schülers.

Mache ich da was falsch?

Gruß
    Sailor
******************************
Man wird immer besser...

tobi01001

Zitat von: Sailor am 17 November 2024, 17:22:48Hallo tobias

Zitat von: tobi01001 am 13 November 2024, 23:12:42OK,
ich hab mal ein wenig was eingebaut:

- Beim Login werden iD und Typ (und sofern ein Schüler Klasse) in INTERNAL abgelegt (hätte man auch als Reading machen können).
Weiterhin gibt es zwei neue Attribute:
  • studentID Schüler*innen ID
  • timeTableMode

Ist vorhanden und wird automatisch angezeigt.
Leider wird immer noch der Stundenplan der gesamten Klasse mit allem Parallelkursen exportiert und nicht der individuelle des Schülers.

Mache ich da was falsch?

Gruß
    Sailor

Ja.  ;D


Hast du:
  • die PERSONID im Attribut studentID hinterlegt?
  • das Attribut timeTableMode auf student gestellt?
Dann sollte das mit einem get ... timetable funktionieren.

Einen schülerspezifischen Stundenplan gibt es aber generell mit diesen Login-Daten bzw. unter dieser ID?

Was steht im Internal PERSONTYPE?

Ansonsten könntest du noch entsprechende Logeinträge mit verbose 5 posten.
ACHTUNG: Darin sind in der Login-Anfrage Nutzername und Passwort im Quelltext vorhanden und in der Antwort im Zweifel auch persönliche Daten enthalten. Diese bitte entsprechend unkenntlich machen.

Wichtig wäre im Log folgendes:

...
login received {"jsonrpc":"2.0","id":"FHEM","result":{"sessionId":"12345678901234567890123456789012","personType":5,"personId":0815,"klasseId":0815}}
...
getTT sends{"method":"getTimetable","params":[{"element":{"type":5,"id":"0815"}
...
Danach folgen die Rohdaten und JSON-Formatierten Daten im Log. Eventuell siehst du da auch ob ein Fach dabei ist, was nicht hingehört.

Wenn aber die obige getTT sends - getTimetable unter element type:5 und id:.... <- SchülerID enthält und unter getTT received kein Fehler kommt, stimmt soweit alles...

LG und schöne (Schul-)Woche  ;)
FHEM@UbuntuServer on Lenovo ThinkCentre M900 [i5-6500T / 8GB RAM] MySQL-DbLog, Grafana, FTUI3 / HmIP incl. CCU3 / LGESS / Wärempumpe über TA CMI und CANoE / Shellies u.v.m.

caldir65

Moin,

ich habe insofern jetzt zumindest erfolgreich mich anmelden können, als daß der Login (mit Elterndaten) soweit funktioniert. Ich habe die Klassendaten abgefragt, sie wurden mir auch angezeigt.
Leider bekomme ich aber keine Kalenderdaten geladen.
2024.11.24 11:43:53.671 4: password Keystore handle for Device (Webuntis_Joschua) - Read password from file
2024.11.24 11:43:53.672 4: [Webuntis_Joschua] Processing Queue: login
2024.11.24 11:43:53.672 4: password Keystore handle for Device (Webuntis_Joschua) - Read password from file
2024.11.24 11:43:53.871 4: Webuntis_Joschua: GetCookies parsed Cookie: JSESSIONID Wert xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx Rest Path=/WebUntis; Secure; HttpOnly; SameSite=None
2024.11.24 11:43:53.871 4: Webuntis_Joschua: GetCookies parsed Cookie: schoolname Wert "xxxxxxxxxxxxx" Rest Expires=Sun, 08 Dec 2024 10:43:53 GMT; Secure; SameSite=None
2024.11.24 11:43:53.872 4: Webuntis_Joschua: GetCookies parsed Cookie: Tenant-Id Wert "6513800" Rest Expires=Sun, 08 Dec 2024 10:43:53 GMT; Secure; SameSite=None
2024.11.24 11:43:53.872 4: login received {"jsonrpc":"2.0","id":"FHEM","result":{"sessionId":"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx","personType":12,"personId":5188,"klasseId":0}}
2024.11.24 11:43:53.872 4: [Webuntis_Joschua] Processing Queue: getTT
2024.11.24 11:43:53.873 3: getTT sends{"id":"FHEM","method":"getTimetable","jsonrpc":"2.0","params":[{"roomFields":["id","name","longname","externalkey"],"showSubstText":true,"showInfo":true,"startDate":"20241124","showLsText":true,"showBooking":true,"subjectFields":["id","name","longname","externalkey"],"endDate":"20241208","showLsNumber":true,"showStudentgroup":true,"teacherFields":["id","name","longname","externalkey"],"element":{"id":"1261","type":5},"klasseFields":["id","name","longname","externalkey"]}]} to https://aoide.webuntis.com/WebUntis/jsonrpc.do?school=IGS%20Melle
2024.11.24 11:43:54.117 4: getTT received {"jsonrpc":"2.0","id":"FHEM","error":{"message":"no such element elementId:1261, elementType:5","code":-7002}}
2024.11.24 11:43:54.117 1: [Webuntis_Joschua] no such element elementId:1261, elementType:5


Gruß, Christoph
Alte Techniker-Regel: "kaum macht man es richtig, funktioniert es auch"
------
Dell Wyse5070 ThinClient 16GBRam, 128GB SSD, Lubuntu 24.04.01LTS, fhem (aktuell), debmatic, Homematic-Devs, ConBee II und deConz, viele Shellys, Rademacher, NextCloud-Anbindung, FullyKioskBrowser+FUIP uvm.