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

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

Vorheriges Thema - Nächstes Thema

KernSani

Hallo liebe Gemeinde,
ich habe mal wieder gebastelt... Da beide Schulen meiner Kinder mittlerweile Webuntis zur Stundenplanverwaltung nutzen, habe ich ein rudimentäres Modul gebastelt, das die Stundenpläne ausliest und (insbesondere) Vertretungen/Entfall u.ä. darstellt. Das Modul läuft bei mir produktiv, ist aber sicher noch "early beta".

Kurzanleitung
mit
define <meinWebuntis> Webuntis wird ein Device erstellt. Danach erstmal mit "set password" das Passwort deines Webuntis-Zugangs setzen und die Attribute server (über den du dich bei Webuntis einloggst, normalerweise sowas wie https://<griechischer Gott>.webuntis.com), school (steht auf der Login-Seite im URL-Paramter "?school=") und user (vermutlich deine EMail-Adresse) setzen.

Danach kann man mit 'get  retrieveClasses' alle Schulklassen der Schule einlesen und sie sich mit 'get Classes' anzeigen lassen. Die Schulklasse deines Kindes trägst du dann im Attribut "class" ein. Ein 'get timetable' holt dann die Daten für die kommenden 7 Tage, davon sieht mal allerdings noch nicht viel...
Der komplette Stundenplan ist i.d.r. uninteressant, was interessiert sind die Abweichungen vom normalen Stundenplan, daher werden nur readings erzeugt, wenn in einem der unter "exceptionIndicators" aufgeführten Felder ein Wert steht. Als default sollten alle (meiner Meinung nach) sinnvollen Felder bereits gepflegt sein.
Wenn da zuviel unnötiger Kram kommt kann man noch bestimmte Werte über das Attribut "exceptionFilter" rausfiltern, Das Attribut erwartet space-separierte key=value Paare, wobei "key" eines der Felder aus der exceptionIndicator-Liste ist und value eine regex. Bei mir steht da z.B.:
lstext="2.HJ|1.HJ, 2.HJ"
Als Ergebnis sollte man readings e_01 - e_nn erhalten, die Abweichungen vom normalen Stundenplan enthalten. Pro Reading wieder alle enthaltenen Felder als key=value Paare. In den readings exceptionToday und exceptionTomorrow sind nochmal die Readingnamen der Exceptions für den jeweiligen Tag (also heute bzw. morgen) aufgeführt.

Zusätzlich gibt es noch eine "simpleTable" Funktion, mit der z.B. das Ergebnis in einem weblink dargestellt werden kann:
FHEM::Webuntis::simpleTable("<Webuntis Device>") stellt alle Felder dar,
mit (beispielsweise)
FHEM::Webuntis::simpleTable("<Webuntis device>","date,startTime,su:name,te:name,code,info,substText,lstype,lstext") werden nur die übergebenen Felder dargestellt.

Hinweis
Das Modul ist noch ziemlich neu und bestimmt nicht bugfree - vielleicht erstmal auf einem Testsystem damit spielen.

Hinweis 2
Die Erfahrung mit nur zwei Schulen zeigt, dass die Schulen Webuntis sehr unterschiedlich nutzen und die Ergebnisse und Inhalte dessen, was im Device und den Readings ankommt sehr unterschiedlich sein kann. Theoretisch kann Webuntis auch Klassenarbeiten, Hausaufgaben etc.. Ich bekomme dort aber bei keiner meiner Testschulen Ergebnisse - entweder weil sie nicht gepflegt sind, oder weil ich (über die öffentliche API) keine Berechtigung habe. Ich bin da noch am Forschen ;-)
Erfahrungen, Hinweise, Erweiterungswünsche etc... werden gerne angenommen.

Todo
* Darstellung des Ergebnisses verbessern
* Commandref überarbeiten
* Logging einbauen
* Plausi-/Syntaxprüfungen bei der Attributpflege

Updates
* 27.10.2023: Einige Bugfixes und neues Attribut "Exclude Subjects" um einzelne Fächer auszuschliessen (mich interessiert Französisch nicht, da mein Sohn Latein hat)
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

slor

Top! Nutzt die Schule meiner Tochter auch. Die mobile App ist auch eher mittelmäßig.
Mal sehen, was ich da rauskriege.
Wie schnell ist denn die Api bei Ausfällen? Kommt das in Echtzeit?

KernSani

Zitat von: slor am 27 Februar 2023, 08:05:12
Wie schnell ist denn die Api bei Ausfällen? Kommt das in Echtzeit?
Ich denke das kommt eher auf die Schule an, wie schnell die das pflegen ;-) Defaultmäßig ruft das Modul die Daten stündlich ab (kann über das "interval" Attribut angepasst werden).


RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

enno

Moin KernSani,

Super Sache, ich bin dabei. Zwei Schulen mit drei Usern. Ich werde berichten :D

Nach einem Neustart von FHEM bekomme ich diesen Fehler:no such element elementId:null, elementType:1 nach manuellen  get "retrieveClasses" und  "timetable" ist wieder alles schön.

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

CQuadrat

Vielen Dank für das Modul!

Das Einrichten hat erstmal geklappt.  :)

Geht auch das Abfragen der Mitteilungen und der Klassenbucheinträge  8)

FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

enno

Zitat* Darstellung des Ergebnisses verbessern
ist damit gedacht, auch auf mehrere Readings zu verteilen? Zur Zeit sieht das bei mir so aus:

e_01  date="20230306" startTime="800" endTime="845" substText="Lesung" activityType="Unterricht" ro:longname="Klassenraum" ro:name="X3" su:longname="INFORMATIK" su:name="IT" te:longname="Einstein" te:name="AE"

Ich könnte mir das jetzt mit Userreadings umbauen, aber wenn du das schon in Planung hast, halte ich die Füsse still.
e_01_date="20230306"
e_01_startTime="800"
e_01_endTime="845"
e_01_substText="Lesung"
e_01_activityType="Unterricht"
e_01_ro:longname="Klassenraum"
e_01_ro:name="X3"
e_01_su:longname="INFORMATIK"
e_01_su:name="IT"
e_01_te:longname="Einstein"
e_01_te:name="AE"
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

Sailor

#6
Moinsen

Habe gerade einen Versuch gestartet und hat Prompt mein fhem-Server zum Absturz gebracht
Ich vermute "400 Bad Request" wird nicht vernünftig abgefangen und fuehrt somit zum Absturz.

Gruß
    Sailor


2023.02.27 16:57:14.731 1: [UI_Webuntis] - Received invalid JSON: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at .//FHEM/69_Webuntis.pm line 776.
$VAR1 = '<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
';

2023.02.27 16:57:14.793 1: PERL WARNING: Use of uninitialized value $v in pattern match (m//) at FHEM/HttpUtils.pm line 663.
2023.02.27 16:57:14.794 1: PERL WARNING: Use of uninitialized value $v in concatenation (.) or string at FHEM/HttpUtils.pm line 667.
2023.02.27 16:57:14.843 1: [UI_Webuntis] - Received invalid JSON: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at .//FHEM/69_Webuntis.pm line 776.
$VAR1 = '<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
';

Can't use an undefined value as an ARRAY reference at .//FHEM/69_Webuntis.pm line 538.

******************************
Man wird immer besser...

CQuadrat

Kann man in dem Attribut class mehrere Klassen eintragen oder ist hier vorgesehen, dass jeweils ein Device angelegt wird?
FHEM auf Mini-ITX-Server mit Intel Quad-Core J1900:
+ HM: HM-LAN, HM-USB, HM-MOD-UART mit div. HM-Komponenten
+ RFXtrx: Funkwetterstation Bresser mit ext. Thermometer, Regenmesser und Windmesser
+ TUL (KNX-Anbindung), MQTT, SONOS (div. Gimmicks), OneWire, Hue

KernSani

Ui, da sind ja gleich eine ganze Menge Leute dabei :-O
Zitat von: enno am 27 Februar 2023, 09:07:01
Nach einem Neustart von FHEM bekomme ich diesen Fehler:no such element elementId:null, elementType:1 nach manuellen  get "retrieveClasses" und  "timetable" ist wieder alles schön.
Ja, aktuell werden die Klassen nur in einem Hash vorgehalten, das wollte ich noch ändern

Zitat von: CQuadrat am 27 Februar 2023, 11:17:22
Geht auch das Abfragen der Mitteilungen und der Klassenbucheinträge  8)
Theoretisch kann ich das mit einbauen, kann es aber nicht vernünftig testen, weil da von meinen zwei Schulen nichts kommt...

Zitat von: enno am 27 Februar 2023, 13:33:58
ist damit gedacht, auch auf mehrere Readings zu verteilen? Zur Zeit sieht das bei mir so aus:

e_01  date="20230306" startTime="800" endTime="845" substText="Lesung" activityType="Unterricht" ro:longname="Klassenraum" ro:name="X3" su:longname="INFORMATIK" su:name="IT" te:longname="Einstein" te:name="AE"

Ich könnte mir das jetzt mit Userreadings umbauen, aber wenn du das schon in Planung hast, halte ich die Füsse still.

Eigentlich wollte ich nicht von einer Unmenge an Readings erschlagen werden, wenn aber der generelle Wunsch ist, das so zu machen, dann baue ich das um (oder mache es per Attribut schaltbar) 

Zitat von: Sailor am 27 Februar 2023, 17:08:51
Habe gerade einen Versuch gestartet und hat Prompt mein fhem-Server zum Absturz gebracht
Ich vermute "400 Bad Request" wird nicht vernünftig abgefangen und fuehrt somit zum Absturz.

Huch, wie hast du denn das geschafft? EIgentlich wird abgefangen, wenn der BlockingCall einen Fehler zurück gibt... Schau ich mir nochmal an

Zitat von: CQuadrat am 27 Februar 2023, 17:25:54
Kann man in dem Attribut class mehrere Klassen eintragen oder ist hier vorgesehen, dass jeweils ein Device angelegt wird?
Je ein Device.

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

Sailor

Hallo KernSani

Entwickelst Du noch weiter.
Ich komme immer noch nicht weiter was das einloggen betrifft.

2023.05.10 15:00:54.111 1: [UI_Webuntis_Leonardo] - Received invalid JSON: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at .//FHEM/69_Webuntis.pm line 776.
$VAR1 = '<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
';

2023.05.10 15:00:54.328 1: PERL WARNING: Use of uninitialized value $v in pattern match (m//) at FHEM/HttpUtils.pm line 682.
2023.05.10 15:00:54.328 1: PERL WARNING: Use of uninitialized value $v in concatenation (.) or string at FHEM/HttpUtils.pm line 686.
2023.05.10 15:00:55.645 1: [UI_Webuntis_Leonardo] - Received invalid JSON: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at .//FHEM/69_Webuntis.pm line 776.
$VAR1 = '<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
';

Can't use an undefined value as an ARRAY reference at .//FHEM/69_Webuntis.pm line 538.

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

eddy242

Hallo KernSani,

unsere Schulen haben die Authentifizierung mit O365 aktiviert. Wenn man auf der Profilseite die Verknüpfung zur Mobile App aktiviert, wird ein QR Code angezeigt, darunter ein Alias-Benutzername und ein Schlüssel. Damit scheint sich die Mobile App am Webuntis Webserver zu authentifizieren (ohne den Umweg über die O365-Authentifizierung). Allerdings klappt das naheliegende leider nicht, also den angezeigten Usernamen und den Schlüssel in den Attributen Deines Moduls einzutragen. Bist Du darüber vielleicht schon gestolpert? Dr. Google zeigt ja eine Menge Doku zur Webuntis-3rd-Party API Integration an, das ist mir aber zu hoch, um durchzusteigen.

Danke & Grüße

masterpete23

Hi,

ich teste es gerade zum ersten Mal.

Kommt bei Server asopo.webuntis.com oder dann nur asopo rein?

Ich bekomme mit beiden Versionen einen Fehler. Auch bei School bin ich mir nicht sicher

die Url der Webseite ist : https://asopo.webuntis.com/WebUntis/?school=IGS+NAMEdesOrts#/basic/login

wie muss die school dann heißen? "IGS+NAMEdesOrts" oder "IGS NAMEdesOrts"?

Auch die E-Mail Adresse ist vorname.nachname@namederschule-gs.de

der Login auf der webuntis seite ist nur vorname.name ohne das @und dem dahinter

error
asopo.webuntis.com/WebUntis/jsonrpc.do?school=IGS+NAMEdesOrts: malformed or unsupported URL

Leider mit allen Kombinationen nur Fehler.

masterpete23

Nachtrag. Lösung gefunden
Aber nachdem ich die class gesetzt habe und den Timetable ziehen wollte ist fhem abgestürzt:

2023.09.21 16:58:49 1: [Webuntis] - Received invalid JSON: malformed JSON string, neither tag, array, object, number, string or atom, at character offset 0 (before "<html>\r\n<head><tit...") at ./FHEM/69_Webuntis.pm line 776.
$VAR1 = '<html>
<head><title>400 Bad Request</title></head>
<body>
<center><h1>400 Bad Request</h1></center>
<hr><center>nginx</center>
</body>
</html>
';

Can't use an undefined value as an ARRAY reference at ./FHEM/69_Webuntis.pm line 584.

KernSani

Hallo zusammen,
ich bin leider ein bisschen ins Frühlings- und Sommerloch gefallen, aber jetzt da die Tage kürzer und der Regen häufiger werden, werde ich hier mal wieder ein bisschen aktiv. Ich habe im letzten halben Jahr immer mal wieder für mich ein paar kleinere Bugs gefixt (z.B. die Geschichte, dass nach einem Neustart die Klassen weg waren und der Stundenplan nicht geladen werden konnte). Die aktuelle Version hängt jetzt am ersten Post. Ich hoffe, die behebt den größten Teil der gemeldeten Fehler. Wenn nicht, bitte hier melden, dann schaue ich mir das an.
Grüße,
Oli

RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

KernSani

Da es noch Fragen zu Server, Anmeldung etc... gab.
Als Server ist der gesamte Servername anzugeben: https://<griechischer Gott>.webuntis.com
und da ein Bild mehr sagt als 1000 Worte: Das was unten in der roten Box steht ist der Schulname (da können auch url-encodete Sonderzeichen drinstehen).
Zumindest bei meiner Schule (da mittlerweile beide Kinder auf die selbe Schule gehen, habe ich nur noch eine "Testschule") wird als Login die komplette Email-Adresse verwendet (und ich habe die Auswahl zwischen Office365 und direktem Login - Office365 ist das was die Kinder verwenden, der Elternzugang ist ohne O365), das hängt aber vermutlich jeweils von der Schule ab. Da bräuchte ich dann ggf. mal per PM ein paar Details um mir das anzusehen...
Grüße,
Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

masterpete23

Moin, super, dass du wieder Zeit gefunden hast.
Ich kam bis zu dem Schritt an dem ich mir die Klassennummer eingetragen habe und dann retrievetimetable gemacht habe:

Zitat2023.10.30 11:51:11 1: [KIND1Webuntis] no such element elementId:null, elementType:1
Das habe ich sowohl im Log als auch ein reading

KernSani

Hi, diese Meldung kommt vom Webuntis-Server erfahrungsgemäß, wenn die Klasse nicht korrekt eingetragen wurde. Was bekommst du denn, wenn du get classes machst? Da sollte ein Popup mit drei Spalten kommen, die erste ist eine interne ID, dann kommt die Klasse, so wie sie im Attribut einegtragen werden muss nund dann noch eine Beschreibung.

Grüße,

Oli
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

masterpete23

Hi,

es sieht so aus wie im Anhang.
Ich hatte die interne ID eingetragen - das war der Fehler.
Nun habe ich exceptionCount und e_01,e_02,e_03 - muss ich mal beobachten, was ich damit machen kann.
Habe es noch nicht ganz verstanden :)

KernSani

Sehr schön. Am Besten legst du dir einen Weblink an, wie oben beschrieben, dann sieht man (ein bisschen) besser, was die readings bedeuten- es sind in irgendeiner Art Abweichungen vom normalen Stundenplan. Irgendwie nutzt das aber jede Schule anders...
RasPi: RFXTRX, HM, zigbee2mqtt, mySensors, JeeLink, miLight, squeezbox, Alexa, Siri, ...

masterpete23

Super. Jetzt sehe ich schon was. Mal schauen, ob irgendwann mal was ausfällt auf das ich reagieren kann. Darum geht es mir gerade mal.

tobi01001

Moin,

ich häng mich hier mal dran. Einrichtung für 2 Kids hat nach ein wenig Trial&Error funktioniert. Es muss der ganze Servername rein, aber eben auch nur der Servername (wer lesen kann...) - hatte ein / am Ende und das funktionierte nicht.

Blöderweise sind grad Ferien, was die Anzahl "Exceptions" in Grenzen hält.

Danke,
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.

andies

Ich habe eine Frage zum Modul. Ich kann mich einloggen, die Klassen holen aber scheitere dann an der Timetable,
Internals:
   NAME       Johann
   NR         557
   NTFY_ORDER 50-Johann
   STATE      ???
   TYPE       Webuntis
   VERSION    0.2.00
   eventCount 11
   HTTPCookieHash:
     JSESSIONID;:
       Name       JSESSIONID
       Options    Path=/WebUntis; Secure; HttpOnly; SameSite=None
       Path      
       Value      entfernt
     schoolname="_aGFucy1jYXJvc3NhLSBvcw=;:
       Name       schoolname="_aGFucy1jYXJvc3NhLSBvcw=
       Options    Version=1; Max-Age=1209600; Expires=Mon, 16 Sep 2024 04:53:13 GMT; Secure; SameSite=None
       Path      
       Value      "
   READINGS:
     2024-09-02 06:53:13   error           no such element elementId:null, elementType:1
   helper:
     classes    <html><table><tr><td>1004</td><td>05a</td><td>Klasse 05a</td></tr><tr><td>1007</td><td>05b</td><td>Klasse 05b</td></tr><tr><td>1010</td><td>06a</td><td>Klasse 06a</td></tr><tr><td>1013</td><td>06b</td><td>Klasse 06b</td></tr><tr><td>1016</td><td>07a</td><td>Klasse 07a</td></tr><tr><td>1019</td><td>07b</td><td>Klasse 07b</td></tr><tr><td>1022</td><td>07c - bili</td><td>Klasse 07c - bili</td></tr><tr><td>1025</td><td>07d</td><td>Klasse 07d</td></tr><tr><td>1028</td><td>07e</td><td>Klasse 07e</td></tr><tr><td>1031</td><td>07f</td><td>Klasse 07f</td></tr><tr><td>1034</td><td>08a</td><td>Klasse 08a</td></tr><tr><td>1037</td><td>08b</td><td>Klasse 08b</td></tr><tr><td>1040</td><td>08c - bili</td><td>Klasse 08c - bili</td></tr><tr><td>1043</td><td>08d</td><td>Klasse 08d</td></tr><tr><td>1046</td><td>08e</td><td>Klasse 08e</td></tr><tr><td>1049</td><td>08f</td><td>Klasse 08f</td></tr><tr><td>1052</td><td>09a</td><td>Klasse 09a</td></tr><tr><td>1055</td><td>09b</td><td>Klasse 09b</td></tr><tr><td>1058</td><td>09c</td><td>Klasse 09c</td></tr><tr><td>1061</td><td>09d</td><td>Klasse 09d</td></tr><tr><td>1064</td><td>09e</td><td>Klasse 09e</td></tr><tr><td>1067</td><td>09f</td><td>Klasse 09f</td></tr><tr><td>1070</td><td>10a</td><td>Klasse 10a</td></tr><tr><td>1073</td><td>10b</td><td>Klasse 10b</td></tr><tr><td>1076</td><td>10c - bili</td><td>Klasse 10c - bili</td></tr><tr><td>1079</td><td>10d</td><td>Klasse 10d</td></tr><tr><td>1082</td><td>10e</td><td>Klasse 10e</td></tr><tr><td>1085</td><td>10f</td><td>Klasse 10f</td></tr><tr><td>1088</td><td>AMb</td><td>AMb</td></tr><tr><td>1091</td><td>Abi 2025</td><td>Klasse 12</td></tr><tr><td>1094</td><td>Abi 2026</td><td>Klasse 11</td></tr><tr><td>1097</td><td>Ausland</td><td>Ausland</td></tr><tr><td>1100</td><td>Präsenz 1</td><td>Präsenz 1</td></tr><tr><td>1103</td><td>Präsenz 2</td><td>Präsenz 2</td></tr><tr><td>1106</td><td>SLK I</td><td>SLK I</td></tr><tr><td>1109</td><td>SLK II</td><td>SLK II</td></tr></table></html>
     cookies    JSESSIONID=entfernt; schoolname="_aGFucy1jYXJvc3NhLSBvcw=="
     classMap:
       05a        1004
       05b        1007
       06a        1010
       06b        1013
       07a        1016
       07b        1019
       07c - bili 1022
       07d        1025
       07e        1028
       07f        1031
       08a        1034
       08b        1037
       08c - bili 1040
       08d        1043
       08e        1046
       08f        1049
       09a        1052
       09b        1055
       09c        1058
       09d        1061
       09e        1064
       09f        1067
       10a        1070
       10b        1073
       10c - bili 1076
       10d        1079
       10e        1082
       10f        1085
       AMb        1088
       Abi 2025   1091
       Abi 2026   1094
       Ausland    1097
       Präsenz 1 1100
       Präsenz 2 1103
       SLK I      1106
       SLK II     1109
Attributes:
   class      1094
   exceptionIndicator code,info,lstext,lstype,substText
   school     Hans-Carossa-+OS
   server     https://klio.webuntis.com
   user       johann.weggelassen
   verbose    0
Beim Suchen im Code bin ich auf Zeile 489 gestoßen in der Hoffnung, dass dort das Problem liegt. Also habe ich da hinzugefügt:
489 [neu]    Log3 ( $name, "debug", "hash ".Dumper(\$hash)); ##debug
Die Ausgabe des hash liefert bei mir
debug: hash $VAR1 = \{
            'VERSION' => '0.2.00',
            'eventCount' => 10,
            '.attrminint' => [],
            'FUUID' => '66c5cc90-f33f-1115-b393-982de02d038d976f',
            'NAME' => 'Johann',
            'helper' => {
                          'classes' => "<html><table><tr><td>1004</td><td>05a</td><td>Klasse 05a</td></tr><tr><td>1007</td><td>05b</td><td>Klasse 05b</td></tr><tr><td>1010</td><td>06a</td><td>Klasse 06a</td></tr><tr><td>1013</td><td>06b</td><td>Klasse 06b</td></tr><tr><td>1016</td><td>07a</td><td>Klasse 07a</td></tr><tr><td>1019</td><td>07b</td><td>Klasse 07b</td></tr><tr><td>1022</td><td>07c - bili</td><td>Klasse 07c - bili</td></tr><tr><td>1025</td><td>07d</td><td>Klasse 07d</td></tr><tr><td>1028</td><td>07e</td><td>Klasse 07e</td></tr><tr><td>1031</td><td>07f</td><td>Klasse 07f</td></tr><tr><td>1034</td><td>08a</td><td>Klasse 08a</td></tr><tr><td>1037</td><td>08b</td><td>Klasse 08b</td></tr><tr><td>1040</td><td>08c - bili</td><td>Klasse 08c - bili</td></tr><tr><td>1043</td><td>08d</td><td>Klasse 08d</td></tr><tr><td>1046</td><td>08e</td><td>Klasse 08e</td></tr><tr><td>1049</td><td>08f</td><td>Klasse 08f</td></tr><tr><td>1052</td><td>09a</td><td>Klasse 09a</td></tr><tr><td>1055</td><td>09b</td><td>Klasse 09b</td></tr><tr><td>1058</td><td>09c</td><td>Klasse 09c</td></tr><tr><td>1061</td><td>09d</td><td>Klasse 09d</td></tr><tr><td>1064</td><td>09e</td><td>Klasse 09e</td></tr><tr><td>1067</td><td>09f</td><td>Klasse 09f</td></tr><tr><td>1070</td><td>10a</td><td>Klasse 10a</td></tr><tr><td>1073</td><td>10b</td><td>Klasse 10b</td></tr><tr><td>1076</td><td>10c - bili</td><td>Klasse 10c - bili</td></tr><tr><td>1079</td><td>10d</td><td>Klasse 10d</td></tr><tr><td>1082</td><td>10e</td><td>Klasse 10e</td></tr><tr><td>1085</td><td>10f</td><td>Klasse 10f</td></tr><tr><td>1088</td><td>AMb</td><td>AMb</td></tr><tr><td>1091</td><td>Abi 2025</td><td>Klasse 12</td></tr><tr><td>1094</td><td>Abi 2026</td><td>Klasse 11</td></tr><tr><td>1097</td><td>Ausland</td><td>Ausland</td></tr><tr><td>1100</td><td>Pr\x{c3}\x{a4}senz 1</td><td>Pr\x{c3}\x{a4}senz 1</td></tr><tr><td>1103</td><td>Pr\x{c3}\x{a4}senz 2</td><td>Pr\x{c3}\x{a4}senz 2</td></tr><tr><td>1106</td><td>SLK I</td><td>SLK I</td></tr><tr><td>1109</td><td>SLK II</td><td>SLK II</td></tr></table></html>",
                          'classMap' => {
                                          '07f' => 1031,
                                          '07e' => 1028,
                                          '07b' => 1019,
                                          '10c - bili' => 1076,
                                          '10d' => 1079,
                                          '08a' => 1034,
                                          '09c' => 1058,
                                          '08e' => 1046,
                                          "Pr\x{c3}\x{a4}senz 2" => 1103,
                                          '08f' => 1049,
                                          '09d' => 1061,
                                          '07a' => 1016,
                                          'SLK II' => 1109,
                                          'SLK I' => 1106,
                                          'Ausland' => 1097,
                                          '08b' => 1037,
                                          "Pr\x{c3}\x{a4}senz 1" => 1100,
                                          '09e' => 1064,
                                          '05b' => 1007,
                                          '06b' => 1013,
                                          '10a' => 1070,
                                          '08d' => 1043,
                                          '08c - bili' => 1040,
                                          '09f' => 1067,
                                          'Abi 2025' => 1091,
                                          '09b' => 1055,
                                          '06a' => 1010,
                                          'AMb' => 1088,
                                          '05a' => 1004,
                                          '07c - bili' => 1022,
                                          '07d' => 1025,
                                          'Abi 2026' => 1094,
                                          '10b' => 1073,
                                          '10e' => 1082,
                                          '09a' => 1052,
                                          '10f' => 1085
                                        },
                          'cookies' => 'JSESSIONID=entfernt; schoolname="_aGFucy1jYXJvc3NhLSBvcw=="',
                          'cmdQueue' => [],
                          'passObj' => bless( {
                                                'TYPE' => 'Webuntis'
                                              }, 'FHEM::Core::Authentication::Passwords' )
                        },
            'HTTPCookieHash' => {
                                  'JSESSIONID;' => {
                                                     'Path' => '',
                                                     'Name' => 'JSESSIONID',
                                                     'Options' => 'Path=/WebUntis; Secure; HttpOnly; SameSite=None',
                                                     'Value' => 'entfernt'
                                                   },
                                  'schoolname="_aGFucy1jYXJvc3NhLSBvcw=;' => {
                                                                               'Options' => 'Version=1; Max-Age=1209600; Expires=Mon, 16 Sep 2024 04:53:13 GMT; Secure; SameSite=None',
                                                                               'Value' => '"',
                                                                               'Path' => '',
                                                                               'Name' => 'schoolname="_aGFucy1jYXJvc3NhLSBvcw='
                                                                             }
                                },
            'NR' => 557,
            'TYPE' => 'Webuntis',
            '.attraggr' => [],
            '.FhemMetaInternals' => 1,
            'READINGS' => {
                            'error' => {
                                         'TIME' => '2024-09-02 06:36:44',
                                         'VAL' => 'no such element elementId:null, elementType:1'
                                       }
                          },
            'STATE' => '???',
            'NTFY_ORDER' => '50-Johann'
          };
Hat jemand eine Idee, wo ich weitersuchen kann?
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

andies

PS Beim Webaufruf scheint es an dieser Stelle nicht zu gelingen, die elementID zu übermitteln (wenn ich das richtig interpretiere)
https://api-client.sleekplan.com/public/v1/feedback/980803070/sessions/ping?session=%7B%22init%22%3A%222024-08-21T11%3entfernt%22init_storage%22%3A%222024-09-02T05%3A07%3entferntZ%22%2C%22referrer%22%3A%22https%3A%2F%2Fklio.webuntis.com%2Ftimetable-students-my%2F__%22%7D&user=%7B%22user_id%22%3entfernt%2C%22user_token%22%3A%entfernt%22%7D&settings=&callback=jsonp_callback_6415

/public/v1/feedback/980803070/sessions/ping?session=%7B%22init%22%3A%222024-08-21T11%3A21%3entferntZ%22%2C%22init_storage%22%3A%222024-09-02T05%3A07%3A05.833Z%22%2C%22referrer%22%3A%22https%3A%2F%2Fklio.webuntis.com%2Ftimetable-students-my%2F__%22%7D&user=%7B%22user_id%22%3entfernt%2C%22user_token%22%3A%entfernt%22%7D&settings=&callback=jsonp_callback_6415

https://klio.webuntis.com/WebUntis/api/public/timetable/weekly/data?elementType=5&elementId=3139&date=2024-09-02&formatId=3
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

andies

#23
"Fehler" gefunden, der saß vor dem Bildschirm (und im Nachhinein lese ich, dass das schon mal vorkam, peinlich). Man gibt als class nicht die interne ID ein, sondern den String, der in der Datenbank hinterlegt ist. In meinem Fall also nicht 1094, sondern "Abi 2026".
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

Ein herzerfrischendes "Moin" vom achtern Diek vorweg.

Kann mir Jemand nochmals in Erinnerung rufen, welche Settings Serverseitig (Schulseitig) vorgenommen werden müssen, damit man Zugriff zu den Daten von WebUntis über dieses Modul hat?

Dann wende ich mich damit an den Administrator der Schule.

Danke

Gruss
    Sailor
******************************
Man wird immer besser...

andies

class  Abi 2026
exceptionIndicator code,info,lstext,lstype,substText
school WieImmerDieHeisst
server https://klio.webuntis.com
user vorname.nachname
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

andies

Guten Tag, danke für das Modul. Ich habe da ein altes Problem von mir lösen wollen (siehe hier) und einfach das Modul fortgeschrieben. Es erzeugt jetzt eine iCal-Datei, die die exceptions erhält. Da das sehr spezifisch für mich ist, hier eine Erläuterung meiner Änderungen, die muss sicher jeder anpassen:
  • Es gibt eine neue Funktion sub writeICal, Zeile 789. Die schreibt die iCal (danke an Dr. Chat GPT).
  • Diese Funktion wird in getTT automatisch aufgerufen, Zeile 527
  • Die iCal wird das Verzeichnis FHEM-Verzeichnis-"www/tablet/".$name."_ical.ics" geschrieben, Zeile 843. Das muss sicher jeder für sich entscheiden, wie er das macht.
  • Ich hole nur die exceptions der letzten beiden Tage, siehe Zeile 805ff.

Was ich gern noch hätte wäre, nicht nur die exceptions, sondern auch den ganzen Stundenplan auszulesen. Leider gelingt mir das nicht, obwohl die Daten anscheinend in der Modul gelesen werden können. Wenn jemand da einen Tipp hat, bin ich dankbar.

Mein Sohn hat in Google Kalender einen Link zu dieser iCal und liest die daten aus seinem Kalender aus. Die haben handy-Verbot in der schule, zur Erläuterung, und er wollte das so.
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

Hallo andies

Zitat von: andies am 25 September 2024, 11:01:35Guten Tag, danke für das Modul. Ich habe da ein altes Problem von mir lösen wollen (siehe hier) und einfach das Modul fortgeschrieben. Es erzeugt jetzt eine iCal-Datei, die die exceptions erhält. Da das sehr spezifisch für mich ist, hier eine Erläuterung meiner Änderungen, die muss sicher jeder anpassen:
  • Es gibt eine neue Funktion sub writeICal, Zeile 789. Die schreibt die iCal (danke an Dr. Chat GPT).
  • Diese Funktion wird in getTT automatisch aufgerufen, Zeile 527
  • Die iCal wird das Verzeichnis FHEM-Verzeichnis-"www/tablet/".$name."_ical.ics" geschrieben, Zeile 843. Das muss sicher jeder für sich entscheiden, wie er das macht.
  • Ich hole nur die exceptions der letzten beiden Tage, siehe Zeile 805ff.
Was ich gern noch hätte wäre, nicht nur die exceptions, sondern auch den ganzen Stundenplan auszulesen. Leider gelingt mir das nicht, obwohl die Daten anscheinend in der Modul gelesen werden können. Wenn jemand da einen Tipp hat, bin ich dankbar.

Danke für dein Update, aber leider bekomme ich auch nur die exceptions aber eine iCal - Datei erstellt sich leider auch nicht im /opt/fhem/www/tablet - Verzeichnis

Hat es irgendjemand geschafft den gesamten Stundenplan herunterzuladen?
Wenn ja, wie?

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

andies

Also das mit dem Erstellen in dem Verzeichnis habe ich so gemacht, dass ich dort zuerst eine (leere) Datei angelegt und mit entsprechenden Rechten versehen habe - die wird dann überschrieben. Direkt schreiben ging bei mir auch nicht.

Was die exceptions angeht, müssten wir eigentlich beim Modulautor nachfragen. Ich sehe im Code, Zeile 732 den Code
    #Log3 $name, LOG_ERROR, $html;
    $hash->{helper}{timetable} = $html;
Wenn man den Log3 auskommentiert, erscheint der gesamte Stundenplan. Das wäre was zum ansetzen. Dazu müsste ich aber verstehen, wozu das so definiert wurde und warum.
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

Hallo andies


Zitat von: andies am 27 September 2024, 20:11:17Also das mit dem Erstellen in dem Verzeichnis habe ich so gemacht, dass ich dort zuerst eine (leere) Datei angelegt und mit entsprechenden Rechten versehen habe - die wird dann überschrieben. Direkt schreiben ging bei mir auch nicht.

OK, Danke - Hat geklappt.
Jetzt habe ich zwar ein mir unbekanntes Gymnasium ;D drin aber immerhin:
BEGIN:VCALENDAR
VERSION:2.0
PRODID:-//Hans Carossa Gymnasium//Google Calendar//DE
END:VCALENDAR

Zitat von: andies am 27 September 2024, 20:11:17Was die exceptions angeht, müssten wir eigentlich beim Modulautor nachfragen. Ich sehe im Code, Zeile 732 den Code
    #Log3 $name, LOG_ERROR, $html;Wenn man den Log3 auskommentiert, erscheint der gesamte Stundenplan. Das wäre was zum ansetzen. Dazu müsste ich aber verstehen, wozu das so definiert wurde und warum.
Auhauerha, das ist ja noch ganz roh ein JSON-String...
<Erbsenscheißerei> Muss übrigens nicht "Log3 auskommentiert" sondern "Log3 unkommentiert" heißen.</Erbsenscheißerei>

Also wenn der Winter naht, dann kann ich das Modul ja mal umstricken.
Mit JSON-Strings kenne ich mich ja nun zu genüge aus.

Werde mal KernSani fragen, ob er meinen Code gebrauchen kann.

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

Sailor

#30
Moin tosammen

So, habe mal etwas rumgestrickt...

Mit der neuen Version aufbauend auf andies Version gibt es ab jetzt ein neues Attribut: iCalPath
Dies bitte mit einem existierenden Pfad verwenden -
Beispiel1: /opt/fhem/calendar
Beispiel2: /opt/fhem/calendar/
Beispiel3: calendar
Beispiel4: calendar/

Dann
get ... timetable
set ... export

Dann sollte eigentlich im genannten Pfad eine ics-Datei erstellt/überschrieben werden.

Mit der Bitte um Rückmeldung.

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

andies

#31
Das sieht schon mal richtig gut aus. Zeichensetzung ist noch ein Problem, das kann man aber händisch ändern. Und meinen alten Code kannst du ja entfernen, der ist jetzt obsolet. Ein Problem gibt es noch. In der Q1/Q2 sind die Klassen riesig groß (siehe Anhang) und da wäre es gut, wenn man das Attribut
attr <name> excludeSubjects GE_LK_1,GEO_LK_1...nutzen kann. Ich schaue gleich mal, wo das sinnvoll wäre.

PS Geht das eventuell so:
Zeile 991+
my @exSu = split( $COMMA, AttrVal( $name, "excludeSubjects", $EMPTY ) );

Zeile 1005+
if ($TTHashcontent->{su}[0]{name} && grep(/$TTHashcontent->{su}[0]{name}/,@exSu)) {
                next;
            }
Ich kriege da aber einen fehlerhaften iCal, also so einfach geht das nicht.
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

andies

#32
Jetzt läuft es bei mir, allerdings mit zwei weiteren Änderungen:
Zeile 959 (ca)
my $TTTeacher  = $TTHashcontent->{te}[0]{longname} || 'NN ';
und
Zeile 963 (ca)
my $CalInfo    = " Klasse: " . $TTClass . "\\n" . " Unterricht: " . $TTSubject . "\\n" . " Ort: " . $TTLocation . "\\n" . " Lehrkoerper: " . $TTTeacher;
(die Umlaute bei **Lehrkörper** kamen bei mir nicht richtig durch, ich sitze am Mac). Ich habe bei mir auch die Klasse entfernt, weil ja mein Sohn weiß, in welcher er ist.
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

#33
Hi andie

Zitat von: andies am 01 Oktober 2024, 20:59:13Jetzt läuft es bei mir, allerdings mit zwei weiteren Änderungen:
Zeile 959 (ca)
my $TTTeacher  = $TTHashcontent->{te}[0]{longname} || 'NN ';
Ist bei mir Zeile 1008 und jetzt sieht der Block so aus:
my $TTClass    = Encode::decode( 'iso-8859-1', $TTHashcontent->{kl}[0]{longname}) || 'NN ';
my $TTSubject  = Encode::decode( 'iso-8859-1', $TTHashcontent->{su}[0]{longname}) || 'NN ';
my $TTTeacher  = Encode::decode( 'iso-8859-1', $TTHashcontent->{te}[0]{longname}) || 'NN ';
my $TTLocation = Encode::decode( 'iso-8859-1', $TTHashcontent->{ro}[0]{longname}) || 'NN ';


Zitat von: andies am 01 Oktober 2024, 20:59:13und
Zeile 963 (ca)
my $CalInfo    = " Klasse: " . $TTClass . "\\n" . " Unterricht: " . $TTSubject . "\\n" . " Ort: " . $TTLocation . "\\n" . " Lehrkoerper: " . $TTTeacher;
(die Umlaute bei **Lehrkörper** kamen bei mir nicht richtig durch, ich sitze am Mac). Ich habe bei mir auch die Klasse entfernt, weil ja mein Sohn weiß, in welcher er ist.
Der Lehrkörper heißt jetzt Lehrkraft.
Verfluchter Gender-Wahn!
;D
Gruß
    Sailor
******************************
Man wird immer besser...

Sailor

Hallo andie

Zitat von: andies am 01 Oktober 2024, 20:59:13(die Umlaute bei **Lehrkörper** kamen bei mir nicht richtig durch, ich sitze am Mac). Ich habe bei mir auch die Klasse entfernt, weil ja mein Sohn weiß, in welcher er ist.

Das mit den Umlauten habe ich durch den Einsatz von "Encode::decode( 'iso-8859-1'," hoffentlich in den Griff bekommen.
Das mit der Klasse ist so eine Sache. Ich habe 2 Kinder auf der gleichen Schule und darüber hinaus haben die in der schule eine Eigenart die Klassenzuteilung zu den Unterrichten zu machen.

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

Sailor

#35
Moin tosammen

Letzter Stand:
- Alten Code entfernt.
- Inaktives Attribut "interval" richtig implementiert.
- "set ... export" wieder gelöscht. wird jetzt automatisch mit "get ... timetable" getriggert.
- Problem mit Umlauten hoffentlich gelöst.

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

enno

#36
Moin zusammen,

ich würde gerne mittesten, aber ich bekomme nur den Error "No JSON after Login". Kann das an Sonderzeichen im Password oder Umlaute im Schulnamen liegen?


define Webuntis_JM Webuntis
attr Webuntis_JM exceptionIndicator code,info,lstext,lstype,substText
attr Webuntis_JM iCalPath /opt/fhem4/calendar/
attr Webuntis_JM room Schule
attr Webuntis_JM school Elsa-Brändström-Schule
attr Webuntis_JM server https://peleus.webuntis.com/
attr Webuntis_JM user enno
attr Webuntis_JM verbose 2
#   FUUID      66fc4ab1-f33f-8a87-4488-90e3d54060a38398
#   NAME       Webuntis_JM
#   NR         46
#   NTFY_ORDER 50-Webuntis_JM
#   STATE      ???
#   TYPE       Webuntis
#   VERSION    0.2.01
#   eventCount 4
#   READINGS:
#     2024-10-02 12:47:11   error           No JSON after Login
#   helper:
#
setstate Webuntis_JM 2024-10-02 12:47:11 error No JSON after Login

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

andies

Am Password nicht. Bist du dir sicher, dass du den Schulnamen richtig hast? Umlaute und Bindestriche etc. regeln die ja so. Kommst du auf die Webseite?
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

enno

Über die Webseite kann ich mich anmelden. Mit dem Modul ging es auch schon mal... Ich habe oben mal ein List ergänzt.
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

andies

Also bei mir ist ein Leerzeichen in der Schule und das sieht so aus:
school Hans-Carossa-+OSDa ist sicher der Haken. Ich habe nur vergessen, wie ich den Namen der Schule herausgefunden habe. Das war auch über die Webseite, ich habe in den JSON gesucht.
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

andies

wenn man in der Webmaske eingibt, sieht man mE die Links, zB
https://borys.webuntis.com/WebUntis/?school=EBS+Elmshornoder
https://nessa.webuntis.com/WebUntis/?school=elsa-brandstr%C3%B6m-rs
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

enno

#41
das wäre bei mir: https://peleus.webuntis.com/WebUntis/?school=Elsa-Br%C3%A4ndstr%C3%B6m-Schule dann versuche ich mal mein Glück damit.

Edit: Damit hat es geklappt! Ich bin wieder dabei ;D
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

Sailor

Moin enno

Zitat von: enno am 02 Oktober 2024, 13:19:31das wäre bei mir: https://peleus.webuntis.com/WebUntis/?school=Elsa-Br%C3%A4ndstr%C3%B6m-Schule dann versuche ich mal mein Glück damit.
Edit: Damit hat es geklappt! Ich bin wieder dabei ;D

Immer diese Lehrer auf Selbstverwirklichungs-Trip mit Umlauten...

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

enno

Moin Sailor,

für die Kinder bin ich jetzt drin. Aber wo du gerade über Lehrer her ziehst ;) Ich habe so ein Exemplar hier. Dort wird die Anmeldung bei Untis im Web über SSO gelöst. Gibt es da eine Chance? Ich muss mich dazu bei einer Portalseite einloggen und werde von dort an Untis zurückgeleitet....

Gruss
  Enno
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

tobi01001

Zitat von: Sailor am 02 Oktober 2024, 11:41:32Moin tosammen

Letzter Stand:
- Alten Code entfernt.
- Inaktives Attribut "interval" richtig implementiert.
- "set ... export" wieder gelöscht. wird jetzt automatisch mit "get ... timetable" getriggert.
- Problem mit Umlauten hoffentlich gelöst.

Gruß
    Sailor
Hi Sailor,

habs noch nicht getestet, aber mal kurz reingeschaut.

exportTT2iCal($hash);Das solltest du besser am Ende von parseTT aufrufen (vor dem return z.B.).
Hintergrund ist, das parseTT die Callback-Funktion des Non-Blocking HTTP Aufrufs ist. Erst dann sind die Daten im hash TT aktualisiert.

in Zeile 694 muss es
$html[b]Row[/b] .= $t->{$f}[0]{name}; anstatt $html .= $t->{$f}[0]{name}; heißen. War schon vorher da und hat keine Auswirkung, da die html-Darstellung nicht benutzt wird.

Was macht ihr mit der iCal Datei - also welcher use-Case ist das dann?

Danke und 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.

andies

Mein Sohn lädt sich die Datei in Google Calendar, er will Untis nicht nutzen. Er hat noch andere Termine (Sport, Freunde und so) und die hat er im Kalender.
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

enno

#46
Usecase: Wir haben in der Küche ein Display das die wichtigsten Daten aus Fhem (Floorplan) anzeigt. Fenster offen, Heizung, Luftfeuchtigkeit, Rollos, Spotify, etc. Dort haben wir auch den Familienkalender (Nextcloud), der auch auf den Handys genutzt wird, angezeigt. Jetzt werden dort die aktuellen Stundenpläne der Kinder aus Untis mit einem Readingsgroup angezeigt. Das spart uns das Nachschauen in der App, ob es Entfall oder Verschiebungen gibt.
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

andies

Kann es sein, dass in Zeile 159 interval fehlt:
    my @WUattr = ( "server", "school", "user", "class", "exceptionIndicator", "exceptionFilter:textField-long", "excludeSubjects", "iCalPath", "interval" );
                                                                                                                                          ==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

firebal301

Moin zusammen,

vielleicht kann mir jemand helfen. Ich bekomme einfach keinen Login über das Modul hin:

Log mit Verbose 5:
2024.10.03 12:51:43 4:  [myWebUntis] Processing Queue: login
2024.10.03 12:51:43 4:  password Keystore handle for Device (myWebUntis) - Read password from file
2024.10.03 12:51:43 4:  myWebUntis: GetCookies parsed Cookie: JSESSIONID Wert 79F861FE5BF486A39EC831BEF903EA3E Rest Path=/WebUntis; Secure; HttpOnly; SameSite=None
2024.10.03 12:51:43 4:  myWebUntis: GetCookies parsed Cookie: schoolname="_Z3ltLXNjaHdhcnplbmJlaw= Wert " Rest Version=1; Max-Age=1209600; Expires=Thu, 17 Oct 2024 10:51:43 GMT; Secure; SameSite=None
2024.10.03 12:51:43 4:  myWebUntis: GetCookies parsed Cookie: Tenant-Id Wert "4775900" Rest Expires=Thu, 17 Oct 2024 10:51:43 GMT; Secure; SameSite=None
2024.10.03 12:51:43 4:  [myWebUntis] Processing Queue: getClass
2024.10.03 12:51:43 1:  [myWebUntis] not authenticated

Vielleicht hat ja jemand noch eine Idee, woran es hakt. Das Anmelden über die Website geht ohne Probleme.

Im Webuntis finde ich einen QR-Code mit folgendem Inhalt:

Schulnummer: 4775900
Schule: gym-schwarzenbek
Url: mese.webuntis.com
Benutzer: Schülerin
Schlüssel: FXYZRQPHIXZPQQIF

Das PW der Schule ist Gymnasium#1

Danke

enno

Moin

Versuch es mal damit:

school:    gym-schwarzenbek
server: https://mese.webuntis.com
user:    Schülerin

Mit set Password setzen : Gymnasium#1
Einfacher FHEM Anwender auf Intel®NUC mit Proxmox und Debian

firebal301

Das sind leider genau die Einstellungen, mit denen es nicht geht:

Internals:
   CFGFN     
   FUUID      66fe7509-f33f-2a34-06b8-796e79a0400bb584
   NAME       myWebUntis
   NR         620
   NTFY_ORDER 50-myWebUntis
   STATE      ???
   TYPE       Webuntis
   VERSION    0.2.01
   eventCount 6
   HTTPCookieHash:
     JSESSIONID;:
       Name       JSESSIONID
       Options    Path=/WebUntis; Secure; HttpOnly; SameSite=None
       Path      
       Value      79F861FE5BF486A39EC831BEF903EA3E
     Tenant-Id;:
       Name       Tenant-Id
       Options    Expires=Thu, 17 Oct 2024 10:51:43 GMT; Secure; SameSite=None
       Path      
       Value      "4775900"
     schoolname="_Z3ltLXNjaHdhcnplbmJlaw=;:
       Name       schoolname="_Z3ltLXNjaHdhcnplbmJlaw=
       Options    Version=1; Max-Age=1209600; Expires=Thu, 17 Oct 2024 10:51:43 GMT; Secure; SameSite=None
       Path      
       Value      "
   READINGS:
     2024-10-03 12:51:43   error           not authenticated
   helper:
     cookies    JSESSIONID=79F861FE5BF486A39EC831BEF903EA3E; Tenant-Id="4775900"; schoolname="_Z3ltLXNjaHdhcnplbmJlaw=="
Attributes:
   exceptionIndicator code,info,lstext,lstype,substText
   school     gym-schwarzenbek
   server     https://mese.webuntis.com
   user       Schülerin


Ich vermute mal, dass da irgendwas serverseitig gesperrt ist. :(

andies

Ich habe noch zwei Ideen. Einmal möchten wir zwei Wochen holen, das geschieht derzeit fest verdrahtet in
Zeile 486    ( $s, $mi, $h, $d, $m, $y ) = localtime( ( time + 7 * 24 * 60 * 60 ) );
Eventuell bietet es sich an, dass man da ein weiteres Attribut setzt (btw: Wer maintained jetzt eigentlich das Modul?). In Zeile 622 findet das gleiche noch einmal für die exceptions statt.

Der Code für Ausfall ist im Modul (Zeile 757) "Entfall", bei uns "f.a.". Jetzt werden die Änderungen so umfangreich, dass wir das m.E. nicht mehr durch ein allgemeines Modul hinbekommen. Ich befürchte, jeder muss hier selbst programmieren?!

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: andies am 02 Oktober 2024, 22:18:52Mein Sohn lädt sich die Datei in Google Calendar, er will Untis nicht nutzen. Er hat noch andere Termine (Sport, Freunde und so) und die hat er im Kalender.
Ja, ok. Aber dann muss er sich doch immer (täglich) die iCal ziehen?

Zitat von: enno am 03 Oktober 2024, 09:11:59Usecase: Wir haben in der Küche ein Display das die wichtigsten Daten aus Fhem (Floorplan) anzeigt. Fenster offen, Heizung, Luftfeuchtigkeit, Rollos, Spotify, etc. Dort haben wir auch den Familienkalender (Nextcloud), der auch auf den Handys genutzt wird, angezeigt. Jetzt werden dort die aktuellen Stundenpläne der Kinder aus Untis mit einem Readingsgroup angezeigt. Das spart uns das Nachschauen in der App, ob es Entfall oder Verschiebungen gibt.

Das ist auch mein Use Case - für beide Kinder. Das Tablett im Flur zeigt dann allerdings nur die Änderungen am regulären Stundenplan an. Die bezieht das Modul ja auch ohne iCal.

Mit einem notify und eine Funktion in 99_myUtils schreibe ich mir readings, die wie in einem Calender-Device benannt sind. z.B.
e__Count22024-10-03 14:53:59
e__Count_Tot22024-10-03 14:53:59
t_001_activityTypeUnterricht2024-10-03 14:53:59
t_001_codeEntfall2024-10-03 14:53:59
t_001_date09.10.20242024-10-03 14:53:59
t_001_daysleft62024-10-03 14:53:59
t_001_endTime09:252024-10-03 14:53:59
t_001_ro_longname2122024-10-03 14:53:59
t_001_ro_name2122024-10-03 14:53:59
t_001_startTime07:552024-10-03 14:53:59
t_001_su_longnameE-Intensivierung2024-10-03 14:53:59
.........
Damit kann ich dann FTUI3 auf dem Tablett füllen. Da ich dazu kein iCal brauche, hatte mich euer use-case interessiert. Was mich aber tatsächlich interessieren würde, wäre den Stundeplan auf Webuntis - sprich die Wochen oder Tagesdarstellung - über ein iframe auf dem Tablet darzustellen. Dazu fehlt mir aber aktuell noch die zündende Idee...

Zitat von: firebal301 am 03 Oktober 2024, 13:58:33Ich vermute mal, dass da irgendwas serverseitig gesperrt ist. :(
Ich habe mich mal angemeldet und dann mit der chrome erweiterung "restman" die fhem Abfrage nachgebaut. Ich bekomme damit die Klassen geliefert. Ob das in fhem auch funktioniert, kann ich gleich mal testen....
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

OK, das problem liegt im Login im Modul.

encode_json macht aus dem hash mit dem user Schülerin ein :{"client":"FHEM","user":"Schülerin","password":"Gymnasium#1"},"jsonrpc":"2.0","id":"FHEM","method":"authenticate"}

Das passt dann nicht. mit encode json auf dem hash ist mir da auf die schnelle keine Korrektur gelungen - das Problem ist sicher vor dem Bildschirm.

However, es funktioniert wenn du in 69_Webuntis.pm die sub login wie folgt änderst:
sub login {
    my $hash = shift;
    my $name = $hash->{NAME};

    my $param->{header} = {
        "Accept"          => "*/*",
        "Content-Type"    => "application/json",
        "Accept-Encoding" => "br, gzip, deflate"
    };

    ##my %body = (
    ##    "id"      => "FHEM",
    ##    "jsonrpc" => "2.0",
    ##    "method"  => "authenticate",
    ##    "params"  => {
    ##        "password" => ReadPassword($hash),
    ##        "user"     =>  AttrVal( $name, "user",     $EMPTY ),
    ##        "client"   => "FHEM"
    ##    }
    ##);
my $jsonBody = '{"id":"FHEM","method":"authenticate","params":{"client":"FHEM","password":"'.ReadPassword($hash).'","user":"'.AttrVal( $name, "user",     $EMPTY ).'"},"jsonrpc":"2.0"}';
Log3($name,LOG_SEND,"Webuntis new Login: $jsonBody");
    $param->{data}     = $jsonBody; ## encode_json( \%body );
Log3($name,LOG_SEND,"login sends".$param->{data});
    $param->{method}   = "POST";
    $param->{url}      = AttrVal( $name, "server", "" ) . "/WebUntis/jsonrpc.do?school=" . AttrVal( $name, "school", $EMPTY );
    $param->{callback} = \&parseLogin;
    $param->{hash}     = $hash;

    my ( $err, $data ) = HttpUtils_NonblockingGet($param);

}

Hier wird dann der json-payload "manuell" erstellt und Schülerin ist korrekt berücksichtigt.


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.

firebal301

@tobi01001: Perfekt. Das war die Lösung. DANKE!

Jetzt kann ich weiter mit dem Modul spielen :-)

andies

Zitat von: tobi01001 am 03 Oktober 2024, 15:29:15
Zitat von: andies am 02 Oktober 2024, 22:18:52Mein Sohn lädt sich die Datei in Google Calendar, er will Untis nicht nutzen. Er hat noch andere Termine (Sport, Freunde und so) und die hat er im Kalender.
Ja, ok. Aber dann muss er sich doch immer (täglich) die iCal ziehen?
Man kann die per URL einbinden, da braucht er nur VPN, um in der Schule hinter meiner Firewall zuzugreifen.
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 enno

Zitat von: enno am 02 Oktober 2024, 16:17:51Dort wird die Anmeldung bei Untis im Web über SSO gelöst. Gibt es da eine Chance? Ich muss mich dazu bei einer Portalseite einloggen und werde von dort an Untis zurückgeleitet....

Diesen Teil hat KernSani programmiert. Dort stecke ich nicht drin.

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

Sailor

Hallo tobi

Zitat von: tobi01001 am 02 Oktober 2024, 21:51:37habs noch nicht getestet, aber mal kurz reingeschaut.

exportTT2iCal($hash);Das solltest du besser am Ende von parseTT aufrufen (vor dem return z.B.).
Hintergrund ist, das parseTT die Callback-Funktion des Non-Blocking HTTP Aufrufs ist. Erst dann sind die Daten im hash TT aktualisiert.

Habe ich gemacht, stelle ich als Update bereit


Zitat von: tobi01001 am 02 Oktober 2024, 21:51:37in Zeile 694 muss es
$html[b]Row[/b] .= $t->{$f}[0]{name}; anstatt
$html .= $t->{$f}[0]{name}; heißen. War schon vorher da und hat keine Auswirkung, da die html-Darstellung nicht benutzt wird.
Ich kann keine codezeile mit
$html .= $t->{$f}[0]{name}; finden. Wahrscheinlich ist dies bereits in dem gelöschten Teil von andies.

Zitat von: tobi01001 am 02 Oktober 2024, 21:51:37Was macht ihr mit der iCal Datei - also welcher use-Case ist das dann?
Damit lässt sich sehr leicht eine Darstellung im Kalender innerhalb fhem darstellen. Ich arbeite viel mit iCals unter ftui.

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

Sailor

Zitat von: andies am 03 Oktober 2024, 09:42:45Kann es sein, dass in Zeile 159 interval fehlt:
    my @WUattr = ( "server", "school", "user", "class", "exceptionIndicator", "exceptionFilter:textField-long", "excludeSubjects", "iCalPath", "interval" );
                                                                                                                                     ==hier==


In meiner letzten Version hatte ich die schon mit aufgenommen.
Komisch - Habe ich etwa die falsche Version hochgeladen????

Egal - Gleich gibts die letzte.

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

Sailor

Hallo andies

Zitat von: andies am 03 Oktober 2024, 14:07:30Ich habe noch zwei Ideen. Einmal möchten wir zwei Wochen holen, das geschieht derzeit fest verdrahtet in
Zeile 486    ( $s, $mi, $h, $d, $m, $y ) = localtime( ( time + 7 * 24 * 60 * 60 ) );
Eventuell bietet es sich an, dass man da ein weiteres Attribut setzt (btw: Wer maintained jetzt eigentlich das Modul?). In Zeile 622 findet das gleiche noch einmal für die exceptions statt.

Gute Idee!
Geändert in
( $s, $mi, $h, $d, $m, $y ) = localtime( ( time + AttrNum( $name, 'DaysTimetable', 7 ) * 24 * 60 * 60 ) );

Zitat von: andies am 03 Oktober 2024, 14:07:30Der Code für Ausfall ist im Modul (Zeile 757) "Entfall", bei uns "f.a.". Jetzt werden die Änderungen so umfangreich, dass wir das m.E. nicht mehr durch ein allgemeines Modul hinbekommen. Ich befürchte, jeder muss hier selbst programmieren?!
Gib mir mal ein paar Beispiele wie Ihr das im individuellen Fall macht.
Vielleicht ergibt sich ja eine allgemeine Lösung.

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

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 mit Proxmox und Debian

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.

tobi01001

Hallo Christoph,

Zitat von: caldir65 am 24 November 2024, 11:48:282024.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
Du bist mit dem Eltern Log-In angemeldet, das Modul fragt aber einen Schülerkalender ab (elementType 5). Um das zu tun, braucht der Elternzugang Zugriff auf den gewünschten Schülerkalenderund die korrekte studentID muss eingetragen sein. Das kann ich aus dem Log nicht erkennen.
Lösch mal bitte die Attribute timeTableMode und studentID (timetableMode auf class setzen sollte auch genügen).
Im Attribut "class" muss der Text/Name der korrekten Klasse angegeben sein - gemäß der Zuordnungstabelle (könnte man mal ein Dropdown machen).
Ansonsten gern mal ein list des Device...

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.

caldir65

Moin,

ich habe mal TimetableMode und StudentID gelöscht.

2024.11.25 21:24:28.718 4: password Keystore handle for Device (Webuntis_Joxxxxx) - Read password from file
2024.11.25 21:24:28.720 4: [Webuntis_Joxxxxx] Processing Queue: login
2024.11.25 21:24:28.721 4: password Keystore handle for Device (Webuntis_Joxxxxx) - Read password from file
2024.11.25 21:24:28.975 4: Webuntis_Joxxxxx: GetCookies parsed Cookie: JSESSIONID Wert FC44B4EE9CEB3692D47C75575D8D6675 Rest Path=/WebUntis; Secure; HttpOnly; SameSite=None
2024.11.25 21:24:28.975 4: Webuntis_Joxxxxx: GetCookies parsed Cookie: schoolname Wert "_aWdzIG1lbGxl" Rest Expires=Mon, 09 Dec 2024 20:24:28 GMT; Secure; SameSite=None
2024.11.25 21:24:28.976 4: Webuntis_Joxxxxx: GetCookies parsed Cookie: Tenant-Id Wert "6513800" Rest Expires=Mon, 09 Dec 2024 20:24:28 GMT; Secure; SameSite=None
2024.11.25 21:24:28.976 4: login received {"jsonrpc":"2.0","id":"FHEM","result":{"sessionId":"FC44BCEB375575D8D6675","personType":12,"personId":5188,"klasseId":0}}
2024.11.25 21:24:28.976 4: [Webuntis_Joxxxxx] Processing Queue: getTT
2024.11.25 21:24:28.977 3: getTT sends{"jsonrpc":"2.0","params":[{"teacherFields":["id","name","longname","externalkey"],"element":{"id":null,"type":1},"klasseFields":["id","name","longname","externalkey"],"subjectFields":["id","name","longname","externalkey"],"endDate":"20241209","showLsNumber":true,"showStudentgroup":true,"showBooking":true,"startDate":"20241125","showLsText":true,"showSubstText":true,"showInfo":true,"roomFields":["id","name","longname","externalkey"]}],"method":"getTimetable","id":"FHEM"} to https://aoide.webuntis.com/WebUntis/jsonrpc.do?school=IGS%20Melle
2024.11.25 21:24:29.358 4: getTT received {"jsonrpc":"2.0","id":"FHEM","error":{"message":"no such element elementId:null, elementType:1","code":-7002}}
2024.11.25 21:24:29.358 1: [Webuntis_Joxxxxx] no such element elementId:null, elementType:1

Und noch der List:Internals:
   FUUID      6740cae8-f33f-378b-fb4a-44e39dda23ff7b62
   NAME       Webuntis_Joxxxxx
   NR         1726
   NTFY_ORDER 50-Webuntis_Joxxxxx
   PERSONID   5188
   PERSONTYPE Eltern (12)
   STATE      ???
   TYPE       Webuntis
   VERSION    0.2.01
   eventCount 57
   HTTPCookieHash:
     JSESSIONID;:
       Name       JSESSIONID
       Options    Path=/WebUntis; Secure; HttpOnly; SameSite=None
       Path       
       Value      FC44BCEB375575D8D6675
     Tenant-Id;:
       Name       Tenant-Id
       Options    Expires=Mon, 09 Dec 2024 20:24:28 GMT; Secure; SameSite=None
       Path       
       Value      "6513800"
     schoolname;:
       Name       schoolname
       Options    Expires=Mon, 09 Dec 2024 20:24:28 GMT; Secure; SameSite=None
       Path       
       Value      "xxxxxxxxxxxx"
   READINGS:
     2024-11-25 21:24:29   error           no such element elementId:null, elementType:1
   helper:
     classes    <html><table><tr><td>1231</td><td>-</td><td>-</td></tr><tr><td>1234</td><td>--</td><td>--</td></tr><tr><td>1237</td><td>5a</td><td>5a</td></tr><tr><td>1240</td><td>5b</td><td>5b</td></tr><tr><td>1243</td><td>5c</td><td>5c</td></tr><tr><td>1246</td><td>5d</td><td>5d</td></tr><tr><td>1249</td><td>5e</td><td>5e</td></tr><tr><td>1252</td><td>6a</td><td>6a</td></tr><tr><td>1255</td><td>6b</td><td>6b</td></tr><tr><td>1258</td><td>6c</td><td>6c</td></tr><tr><td>1261</td><td>6d</td><td>6d</td></tr><tr><td>1264</td><td>6e</td><td>6e</td></tr><tr><td>1267</td><td>7a</td><td>7a</td></tr><tr><td>1270</td><td>7b</td><td>7b</td></tr><tr><td>1273</td><td>7c</td><td>7c</td></tr><tr><td>1276</td><td>7d</td><td>7d</td></tr><tr><td>1279</td><td>7e</td><td>7e</td></tr><tr><td>1282</td><td>8a</td><td>8a</td></tr><tr><td>1285</td><td>8b</td><td>8b</td></tr><tr><td>1288</td><td>8c</td><td>8c</td></tr><tr><td>1291</td><td>8d</td><td>8d</td></tr><tr><td>1294</td><td>8e</td><td>8e</td></tr><tr><td>1297</td><td>9a</td><td>9a</td></tr><tr><td>1300</td><td>9b</td><td>9b</td></tr><tr><td>1303</td><td>9c</td><td>9c</td></tr><tr><td>1306</td><td>9d</td><td>9d</td></tr><tr><td>1309</td><td>9e</td><td>9e</td></tr><tr><td>1312</td><td>10a</td><td>10a</td></tr><tr><td>1315</td><td>10b</td><td>10b</td></tr><tr><td>1318</td><td>10c</td><td>10c</td></tr><tr><td>1321</td><td>10d</td><td>10d</td></tr><tr><td>1324</td><td>10e</td><td>10e</td></tr><tr><td>1327</td><td>11a</td><td>11a</td></tr><tr><td>1330</td><td>11b</td><td>11b</td></tr><tr><td>1333</td><td>11c</td><td>11c</td></tr><tr><td>1336</td><td>11d</td><td>11d</td></tr><tr><td>1339</td><td>12</td><td>Jahrgang 12</td></tr><tr><td>1342</td><td>13</td><td>Jahrgang 13</td></tr><tr><td>1345</td><td>Berat</td><td>Beratung</td></tr><tr><td>1348</td><td>Bespr</td><td>Besprechung</td></tr><tr><td>1351</td><td>CamZert</td><td>Cambridge Zertifikat</td></tr><tr><td>1354</td><td>CosRic</td><td>Costa Rica AG</td></tr><tr><td>1357</td><td>För</td><td>Förderunterricht</td></tr><tr><td>1360</td><td>JG 5</td><td>Jahrgang 5</td></tr><tr><td>1363</td><td>JG 6</td><td>Jahrgang 6</td></tr><tr><td>1366</td><td>JG 7</td><td>Jahrgang 7</td></tr><tr><td>1369</td><td>JG 8</td><td>Jahrgang 8</td></tr><tr><td>1372</td><td>JG 9</td><td>Jahrgang 9</td></tr><tr><td>1375</td><td>KollSchul</td><td>Kollegiale Schulleitung</td></tr><tr><td>1378</td><td>Ref</td><td>Referendare Betreuung</td></tr><tr><td>1381</td><td>Samm</td><td>Sammlung</td></tr><tr><td>1384</td><td>SchulL</td><td>Schulleitung</td></tr><tr><td>1387</td><td>United Nation</td><td>United Nation</td></tr><tr><td>1390</td><td>JG 10</td><td>Jahrgang 10</td></tr><tr><td>1393</td><td>Betr</td><td>Betreuung</td></tr><tr><td>1396</td><td>IPad</td><td>IPad</td></tr><tr><td>1399</td><td>Islam</td><td>Islamunterricht</td></tr><tr><td>1402</td><td>Sozial</td><td>Sozialtraining</td></tr><tr><td>1405</td><td>JGL SL</td><td>JGL SL DB</td></tr><tr><td>1408</td><td>FBL SL DB</td><td>FBL SL DB</td></tr><tr><td>1410</td><td>Perso</td><td>Perso</td></tr></table></html>
     cookies    JSESSIONID=FC44B4EE9CEB3692D47C75575D8D6675; Tenant-Id="6513800"; schoolname="_aWdzIG1lbGxl"
     classIdMap:
       1231       -
       1234       --
       1237       5a
       1240       5b
       1243       5c
       1246       5d
       1249       5e
       1252       6a
       1255       6b
       1258       6c
       1261       6d
       1264       6e
       1267       7a
       1270       7b
       1273       7c
       1276       7d
       1279       7e
       1282       8a
       1285       8b
       1288       8c
       1291       8d
       1294       8e
       1297       9a
       1300       9b
       1303       9c
       1306       9d
       1309       9e
       1312       10a
       1315       10b
       1318       10c
       1321       10d
       1324       10e
       1327       11a
       1330       11b
       1333       11c
       1336       11d
       1339       12
       1342       13
       1345       Berat
       1348       Bespr
       1351       CamZert
       1354       CosRic
       1357       För
       1360       JG 5
       1363       JG 6
       1366       JG 7
       1369       JG 8
       1372       JG 9
       1375       KollSchul
       1378       Ref
       1381       Samm
       1384       SchulL
       1387       United Nation
       1390       JG 10
       1393       Betr
       1396       IPad
       1399       Islam
       1402       Sozial
       1405       JGL SL
       1408       FBL SL DB
       1410       Perso
     classMap:
       -          1231
       --         1234
       10a        1312
       10b        1315
       10c        1318
       10d        1321
       10e        1324
       11a        1327
       11b        1330
       11c        1333
       11d        1336
       12         1339
       13         1342
       5a         1237
       5b         1240
       5c         1243
       5d         1246
       5e         1249
       6a         1252
       6b         1255
       6c         1258
       6d         1261
       6e         1264
       7a         1267
       7b         1270
       7c         1273
       7d         1276
       7e         1279
       8a         1282
       8b         1285
       8c         1288
       8d         1291
       8e         1294
       9a         1297
       9b         1300
       9c         1303
       9d         1306
       9e         1309
       Berat      1345
       Bespr      1348
       Betr       1393
       CamZert    1351
       CosRic     1354
       FBL SL DB  1408
       För       1357
       IPad       1396
       Islam      1399
       JG 10      1390
       JG 5       1360
       JG 6       1363
       JG 7       1366
       JG 8       1369
       JG 9       1372
       JGL SL     1405
       KollSchul  1375
       Perso      1410
       Ref        1378
       Samm       1381
       SchulL     1384
       Sozial     1402
       United Nation 1387
   hmccu:
Attributes:
   DaysTimetable 14
   DbLogExclude .*
   class      12616d
   exceptionIndicator code,info,lstext,lstype,substText
   group      Kalender
   iCalPath   ./igs_melle.ical
   school     IGS%20Melle
   server     https://aoide.webuntis.com
   user       xxxx.xxxx@igsmelle.net
   verbose    5
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.

tobi01001

Prima. Im Attribut class steht bei dir 12616d.

Trag mal bitte nur 6d ein:
attr Webuntis_Joxxxxx class 6d
Das sollte funktionieren. Und wenn mir mal etwas langweilig ist, bau ich wirklich mal ein dropdown ein.
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,

ja, danke, so funktioniert es, es kommt ein Kalender an. Mal sehen, was die Schule da geliefert hat ;-)

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.

Sailor

Moin zusammen

Ich habe ebenfalls umgestellt und stelle jetzt fest, dass nur der aktive Tag aber nicht mehr die vergangenen Tage der aktiven Woche heruntergeladen werden.
Soll heissen: Am Mittwoch sind Dienstag und Montag bereits verschwunden.

Habe ich da irgendetwas falsch eingestellt?

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

tobi01001

Zitat von: Sailor am 26 November 2024, 18:08:29Moin zusammen

Ich habe ebenfalls umgestellt und stelle jetzt fest, dass nur der aktive Tag aber nicht mehr die vergangenen Tage der aktiven Woche heruntergeladen werden.
Soll heissen: Am Mittwoch sind Dienstag und Montag bereits verschwunden.

Habe ich da irgendetwas falsch eingestellt?

Gruß
    Sailor

Daran habe ich nichts geändert. Das Startdatum bei der Abfrage ist der aktuelle Tag. Das Enddatum ist 7 Tage in der Zukunft (oder was im Attribut DaysTimetable gesetzt ist). Man könnte einbauen, dass man immer Montags startet. Aber was interessiert die Vergangenheit?
Ich bin mir zudem ziemlich sicher, dass das schon immer so war.

Im Anhang ist noch eine Version in der die Auswahl der Klassen über Dropdown erfolgt. Sprich: Nachdem man mit retrieveClasses die verfügbaren Klassen eingelesen hat, kann man sie per Dropdown im Attribut class auswählen.

ZitatSoll heissen: Am Mittwoch sind Dienstag und Montag bereits verschwunden.
Das ist doch toll! Wer will schon Montag un Dienstag bbis zum Wochenende aufheben. Schlimm genug, dass die überhaupt immer auftauchen.  ;D

LG und schönen Abend
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

#81
Moin tobi

Zitat von: tobi01001 am 26 November 2024, 20:57:59Man könnte einbauen, dass man immer Montags startet.

Erledigt!
Habe ein Attribut "StartTimeTable" eingebaut

Gruss
    Sailor
******************************
Man wird immer besser...

kermitthefrog

Moin.

Bei der Schule meiner Söhne gibt es leider keine User - zumindest ist uns keiner bekannt. Wenn man die Schule auswählt auf Webuntis bzw. via der App, dann nutzen wir den Service "anonym". Wie bekomme ich das über das Modul realisiert?

Danke und Gruß!

tobi01001

Zitat von: kermitthefrog am 29 November 2024, 12:58:12Moin.

Bei der Schule meiner Söhne gibt es leider keine User - zumindest ist uns keiner bekannt. Wenn man die Schule auswählt auf Webuntis bzw. via der App, dann nutzen wir den Service "anonym". Wie bekomme ich das über das Modul realisiert?

Danke und Gruß!

Das ist Modul ist aktuell nicht dafür ausgelegt ohne Anmeldung zu arbeiten.

Ich habe mir mal eine Schule gesucht, die den Stundenplan anonym ausgibt. Folgender JsonMod ergibt dir den Stundenplan der Klasse 6A am Goethe-Gymnasium 5824 in Hamburg (über den Entwicklermodus kam ich nach Auswahl der Klasse an die URL, welche nach Ergänzung der Schule direkt JSON zurückliefert):
defmod WebuntisTest JsonMod https://ikarus.webuntis.com/WebUntis/api/public/timetable/weekly/data?elementType=1&elementId=1037&date=2024-12-03&formatId=5&school=hh5824
attr WebuntisTest readingList complete();;

Damit könntest du dir einen Stundenplan erstellen oder auch nur auf Vertretungen / Ausfälle reagieren (gibt es in der Klasse / Schule offenbar nicht)...

LG
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,

kann ich eine Vertretung oder Ausfälle irgendwie direkt bekommen? Aus der ical geht es anscheinend nur indirekt hervor... in der AndroidApp werden solche Änderungen ja auch direkt angezeigt, insbesondere Ausfälle wären interessant.

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.

tobi01001

Moin,

das bekommst du doch unabhängig der iCal direkt im Device? Das war ja auch die ursprüngliche Intention von KernSani für das Modul...

Ich habe über das Attribut attr webuntis exceptionIndicator code,info,lstext,lstype,substText Readings wie e_01        date="20241212" startTime="1215" endTime="1300" code="cancelled" activityType="Unterricht" ro:longname="B1.15 (14)" ro:name="B1.15 (14)" su:longname="Wirtschaft und Recht" su:name="WR"
Diese packe ich mittels Notify und einer myUtils-Funkiton in Readings die sich wie bei einem Kalender-device lesen (damit ich meine ftui3 templates direkt verwenden kann).

#     2024-12-09 07:15:02   e__Count        2
#     2024-12-09 07:16:01   e__Count_Tot    6
#     2024-12-09 07:15:02   t_001_activityType Unterricht
#     2024-12-09 07:15:02   t_001_code      Entfall
#     2024-12-09 07:15:02   t_001_date      12.12.2024
#     2024-12-09 07:15:02   t_001_daysleft  3
#     2024-12-09 07:15:02   t_001_endTime   13:00
#     2024-12-09 07:15:02   t_001_ro_longname B1.15 (14)
#     2024-12-09 07:15:02   t_001_ro_name   B1.15 (14)
#     2024-12-09 07:15:02   t_001_startTime 12:15
#     2024-12-09 07:15:02   t_001_su_longname Wirtschaft und Recht
#     2024-12-09 07:15:02   t_001_su_name   WR

LG
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.