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

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

Vorheriges Thema - Nächstes Thema

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