ical import hinter Login - WebUntis

Begonnen von Otto, 14 November 2018, 10:18:36

Vorheriges Thema - Nächstes Thema

rischbiter123

Schön wärs. Ich bekomme leider das hier im Log:
Body: {"jsonrpc":"2.0","id":"98b399d6045ac975a725c64d446da57b","error":{"message":"no right for timetable","code":-8509}}

Die Zugangsdaten habe ich schon mehrfach geprüft.

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

amenomade

#31
@rischbiter123: deine Schule stellt kein iCal pro Person, sondern nur ein iCal für die Klasse zur Verfügung. Deswegen musst Du die Klasse abfragen. Und wie Otto gesagt hat, BB2 löschen und kein #/mail in der sid URL. Also, 4 Kommandos sollten reichen, wenn Du noch BBS3 wie oben schon hast:
delete BBS2
attr BBS3 get01URL https://tipo.webuntis.com/WebUntis/Ical.do?elemType=1&elemId=615&rpt_sd=%%datum%%
attr BBS3 sid01URL https://tipo.webuntis.com/WebUntis/jsonrpc.do?school=bbs-whv
set BBS3 reread

Und lies bitte deine PM

Zitat von: OttoWie hast du die API Zugriffsadressen herausgefunden.
Google :)

Aber, um wirklich forschen zu können, muss man BurpSuite nutzen. Nur so sieht man genau, welche Abfrage mit welchen Parametern geschickt werden, und was zurück kommt.

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

rischbiter123

@amenomade
Werde ich morgen gleich ausprobieren. THX fürs drüberschauen und den Hinweis. Habe jetzt hoffentlich alle erwischt.

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

rischbiter123

Hat geklappt. Nochmal ganz herzlichen Dank für die Hilfe.

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

Otto

@Andreas
Habe jetzt hoffentlich alle erwischt. Ja hast du  ;)

@all
und nun etwas Offtopic:
Wir kann man die Änderungen, die sich in der Woche ergeben können triggern?
Möchte gerne eine Pushnachricht wenn sich Termine ändern
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

rischbiter123

#35
Moin,

Falls Interesse besteht, hier mal eine Darstellungsmöglichkeit des Stundenplanes im Floorplan:

99_myUtils
sub Plananzeige() {
####################################
### Vorbelegung der Variablen ######
####################################
my $cal = "StundenPlan"; #### Name des Calview-Device
my $term = (ReadingsVal($cal,"c-term",0));
my $j = "";
my $i = "";
my $timeshort = "";
my $location = "";
my $summary = "";
my $weekdayname = "";
my $wdn = "";
my $amon = $cal;
my $amon1 = "";
my $bmon = "";
my $cmon = "";
my $dmon = "";
my $adie = "";
my $bdie = "";
my $cdie = "";
my $ddie = "";
my $amit = "";
my $bmit = "";
my $cmit = "";
my $dmit = "";
my $adon = "";
my $bdon = "";
my $cdon = "";
my $ddon = "";
my $afre = "";
my $bfre = "";
my $cfre = "";
my $dfre = "";

###################################
### Schleife für die Anzahl der Termine
###################################

for ($j =1; $j <=$term; $j++)
### 3stellige Formatierung für t_ ###
{
if
($j <=9)
{$i = "00".$j}
else
{$i = "0".$j};
$wdn = "t_".$i."_weekdayname";
$weekdayname = (ReadingsVal($cal,$wdn,0));
$timeshort = "t_".$i."_timeshort";
$summary = "t_".$i."_summary";
$location = "t_".$i."_location";
### Zuordnung zu den Wochentagen und Erstellung der Anzeigezeilen ###
if
($weekdayname eq "Montag")
{$amon1 = $amon.":".$wdn.",";
$bmon = $bmon.$timeshort.",";
$cmon = $cmon.$summary.",";
$dmon = $dmon.$location.",";
}
elsif
($weekdayname eq "Dienstag")
{$adie = $cal.":".$wdn.",";
$bdie = $bdie.$timeshort.",";
$cdie = $cdie.$summary.",";
$ddie = $ddie.$location.",";
}
elsif
($weekdayname eq "Mittwoch")
{$amit = $cal.":".$wdn.",";
$bmit = $bmit.$timeshort.",";
$cmit = $cmit.$summary.",";
$dmit = $dmit.$location.",";
}
elsif
($weekdayname eq "Donnerstag")
{$adon = $cal.":".$wdn.",";
$bdon = $bdon.$timeshort.",";
$cdon = $cdon.$summary.",";
$ddon = $ddon.$location.",";
}
elsif
($weekdayname eq "Freitag")
{$afre = $cal.":".$wdn.",";
$bfre = $bfre.$timeshort.",";
$cfre = $cfre.$summary.",";
$dfre = $dfre.$location.",";
}
else
{};

};

### Fertigstellung der Anzeigezeilen ###
$bmon = $cal.":".$bmon;
$cmon = $cal.":".$cmon;
$dmon = $cal.":".$dmon
$bdie = $cal.":".$bdie;
$cdie = $cal.":".$cdie;
$ddie = $cal.":".$ddie;
$bmit = $cal.":".$bmit;
$cmit = $cal.":".$cmit;
$dmit = $cal.":".$dmit;
$bdon = $cal.":".$bdon;
$cdon = $cal.":".$cdon;
$ddon = $cal.":".$ddon;
$bfre = $cal.":".$bfre;
$cfre = $cal.":".$cfre;
$dfre = $cal.":".$dfre;
my $dfre1 = chop $dfre;
$dfre1 = $cal.":".$dfre;

#########################################
### Definieren der ReadingsGroup ########
#########################################

fhem( "defmod JustinPlan readingsGroup $amon1\ $bmon\ $cmon\ $dmon\ $adie\ $bdie\ $cdie\ $ddie\ $amit\ $bmit\ $cmit\ $dmit\
$adon\ $bdon\ $cdon\ $ddon\ $afre\ $bfre\ $cfre\ $dfre" );
}


Notify
mod Plan notify Stundenplan:.* {Plananzeige()}
wobei Stundenplan der Name des Calendar ist.

In der Readingsgroup noch
attr JustinPlan nonames 1
attr JustinPlan notime 1

setzen.

LG

Andreas
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

andies

#36
Ich habe da auch ein wenig weiter gemacht (bin allerdings kein Perl-Programmierer). Ich wollte eine andere Anordnung haben, bei der die Tage in der Zeile und die Zeiten in der Spalte stehen, so wie unten. Das habe ich dann nach langem würgen so hinbekommen:
####################################
# vorab eine sub, um jede Zeile zu schreiben (auch wenn kein Unterricht da ist)
####################################
sub Einzelzeileholen($$$$){
my @daten = @{$_[0]};
my $cal = $_[1];
my $vollezeit = $_[2];
my $zeile = $_[3];
my $neuezeile = " ".$cal.$vollezeit;
for (my $weekday =1; $weekday <=5; $weekday++)
{
my $i = $daten[$weekday][$zeile];
if ($i == undef)
{
$neuezeile = $neuezeile.",<>";
}
else
{
$neuezeile = $neuezeile.",\<".ReadingsVal($cal, "t_".$i."_summary","")."/".ReadingsVal($cal, "t_".$i."_location","")."\>";
}
}
return $neuezeile;
}


sub Plananzeige() {
my $cal = "UntisCalview"; #### Name des Calview-Device
my @daten; ### Hash, speichert Eintraege aus Calview (aber dort nur Index, nicht ganzen Inhalt)
my $anzahl = (ReadingsVal($cal,"c-term",0)); ### Anzahl der Eintraege
my $timeshort = ""; ### Zeiten von '08:00 - 08:45' bis '13:55 - 14:40'
my $btime = ""; ### Startzeit
my $weekday = ""; ### 1 (Montag) bis 5 (Freitag)
my $j = ""; ### Laufindizes
my $jlang = "";
my $zeile = ""; ### Laufindex

### Schleife ueber alle Termine, um sie angerdnet in den zweidimensionalen hash zu schreiben
for ($j =1; $j <=$anzahl; $j++)
### 3stellige Formatierung für t_ ###
{
if
($j <=9)
{$jlang = "00".$j}
else
{$jlang = "0".$j};

$weekday = ReadingsVal($cal,"t_".$jlang."_weekday",0);
$btime = ReadingsVal($cal,"t_".$jlang."_btime",0);


### Zuordnung der Anzeigezeilen ###
### Beispiel Dienstag = Spalte 2 / 13:05 = Zeile 6
if ($btime eq "08:00")
{
$zeile = 1;
}
elsif ($btime eq "08:50")
{
$zeile = 2;
}
elsif ($btime eq "09:40")
{
$zeile = 3;
}
elsif ($btime eq "10:40")
{
$zeile = 4;
}
elsif ($btime eq "12:15")
{
$zeile = 5;
}
elsif ($btime eq "13:05")
{
$zeile = 6;
}
elsif ($btime eq "13:55")
{
$zeile = 7;
}
else
{
$zeile = 0;
}
$daten[$weekday][$zeile]= $jlang;
};

### Zeilen aufbauen, beginnen mit Ueberschrift
my $zeilen = $cal.":<Zeit>,<Montag>,<Dienstag>,<Mittwoch>,<Donnerstag>,<Freitag>";
$zeilen = $zeilen.Einzelzeileholen(\@daten, $cal, ":\<8:00-8:45\>", 1);
$zeilen = $zeilen.Einzelzeileholen(\@daten, $cal, ":\<8:50-9:35\>", 2);
$zeilen = $zeilen.Einzelzeileholen(\@daten, $cal, ":\<9:40-10:25\>", 3);
$zeilen = $zeilen.Einzelzeileholen(\@daten, $cal, ":\<10:40-11:25\>", 4);
$zeilen = $zeilen.Einzelzeileholen(\@daten, $cal, ":\<12:15-13:00\>", 5);
$zeilen = $zeilen.Einzelzeileholen(\@daten, $cal, ":\<13:05-13:50\>", 6);
$zeilen = $zeilen.Einzelzeileholen(\@daten, $cal, ":\<13:55-14:40\>", 7);

### Definieren der ReadingsGroup ########
#Log 1, $zeilen;
fhem( "defmod Plan readingsGroup ".$zeilen);
}


Der Code hat mehrere Nachteile:

  • Die Zeiten sind derzeit hardcodiert. Da sie sich nicht ändern, ist mir das schnuppe. Aber jeder, der das für sich nutzen will, muss das anpassen. Besser wäre es, wenn die Zeiten aus dem Calview selbst ausgelesen würden. (Wie gesagt: Ich bin trial-and-error-Programmierer.)
  • Mir gefällt die Anzeige noch nicht. Ich will insbesondere, dass da Farben hineinkommen. Es ist aber das erste Mal, dass ich eine ReadingsGroup nutze.
  • Am meisten stört mich, dass ich nach jeder Änderung "save config" drücken muss. Ich habe das nicht automatisiert hinbekommen.https://forum.fhem.de/index.php/topic,93682.0.html
  • Ich lese die ReadingsVal händisch aus und setze sie ein, da ist kein Verweis.
  • Und noch etwas habe ich bemerkt: Wenn verschiedener Unterricht mehrfach auf eine Stunde fällt (anscheinend geht das?), wird das aufgrund der Programmierung natürlich überschrieben.
Vielleicht hat da ja noch jemand eine Idee.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
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

rischbiter123

#37
Moin,

mit der Farbe schau mal hier,
https://forum.fhem.de/index.php/topic,84301.0.html
vielleicht hilft das ein wenig. Und um die Saveanforderungen auch zu minimieren, müsste eventuell ein eventOnChangeReading beim Kalenderdevice helfen.

@Otto
Vielleicht könnte man dann auch ein notify für Änderungsanzeigen triggern.

LG

Andreas

Edit: Funktioniert so leider nicht
4*Raspi, Max Thermostate und Fensterkontakte, FB7590, Mysensors und NanoCUL, IT und Sonoff, zigbee2mqtt2

amenomade

Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

Die App hat einen viel umfangreicheren Kalender als die Desktop-Variante: zB sind da Farben drin, Ausfall wird angezeigt usw (siehe Anhang). Weiß jemand, wie man das aus dem Desktop auslesen kann?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
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

amenomade

Es kann sein, dass die Farben auch im ical sind. Dann ist es nur eine Formatierungsgeschichte
Wenn nicht, muss man vermutlich über "raw" Request gehen wie hier: https://forum.fhem.de/index.php/topic,93217.msg860265.html#msg860265

Ansonsten ist vielleicht das Reverse-Engineering von der APP möglich, höchstwahrscheinlich aber illegal... Wenn man die http Requests von der APP sehen könnte... wäre vielleicht dann etwas möglich
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Hmmm. Ne. Anscheinend sind die Farben direkt in der App konfiguriert. In den Einstellungen kannst Du die sogar ändern. Sowie die Ausfälle auch
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

andies

Gibt es (legale) Tools, mit denen man den request der App mitlesen kann?
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
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

Wuehler

Moin, hat noch jemand daran Interesse? Die haben sich weiterentwickelt und man kann im Browser einiges an REST-API-Calls sehen. Habe mir für den Vertretungsplan ein kleines Modul geschrieben.

andies

Ja, ich habe daran nach wie vor Interesse.
FHEM 6.1 auf RaspPi3 (Raspbian:  6.1.21-v8+; Perl: v5.32.1)
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