NEWS
DSB Mobile Abfrage per iobroker
-
Re: DSB - Abrage
Hallo,
nachdem ich im Main Beitrag damals die meisten Infos für eine laufende Abfrage gefunden habe will ich heute mal meinen derzeitigen Ansatz freigeben.
Bitte, ich gebe keinen wirklichen Support. Sicherlich einige Fragen kann ich beantworten bin aber eher PowerUser also Entwickler.- Umgebung: Pi4 mit iobroker, Python 3.9
Naja iobroker ganz normal aufgesetzt, Python installieren (Anleitungen im Netz) - Python Modul: pysdb 2.1.1.
Ein Python Script erstellt:
import pydsb dsb = pydsb.PyDSB("xxxxxxx", "xxxxxxx") //Zugangsdaten user/pw a = dsb.get_plans() print(a[0])
- Script in Javascript, aufruf eines Python Script's, extrahieren des DAB Links, Aufruf der htm Datei, Parsen der Schul-Daten
//Setzte CronDaten für den automatischen Aufruf dieses Script's** var cron1 = "15 6,8,19-20 * * *"; // Jede Stunden um 15 nach 6h, 8h, 19-20h Mo-So var cron2 = "10,15,20,25,27,30,32,35,40,50 7 * * 1-5"; // von 7:00 - 7:20 Alle 2 Min Mo-Fr //Aufruf eines Python Script's function get_dsb_data() { var python = require('child_process').spawn('python3', // second argument is array of parameters, e.g.: //Pfad zum Python Script ["/home/iobroker/dsb.py"]); var result = ''; python.stdout.on('data', function(data){ result += data.toString(); }); python.on('close', function(code){ if (code !== 0) { log('Error: ' + code); } else { log(result); //Extrahieren der DSB Daten result = result.replace(/\{/g, ""); result = result.replace(/\}/g, ""); arr = result.split(",") //Datum dsbdate = arr[1].replace(/\'/g, ""); dsbdate = dsbdate.replace(/ uploaded_date/g, "Datum"); //Link dsblink = arr[3].replace(/\'/g, ""); dsblink = dsblink.replace(/ url: /g, ""); dsblink = dsblink.replace(/ /g, ""); //Füllen der Objekt states in iobroker Datum/HTML Link zum Schulplan setState('javascript.0.dsbplan.Date', dsbdate, true); setState('javascript.0.dsbplan.LINK', dsblink, true); //Abrufen des Schulplans request(dsblink, function (error, response, body) { //Füllen des Objekts RAW in iobroker mit den Rohdaten des Schulplans setState('javascript.0.dsbplan.RAW',body); }); } }); }; //HTML Raw Daten bearbeiten function parseplan() { //Klasse/Klassen Wählen (Ich habe Zwillige :-)) var klasse = ["7C","7D"]; var myArrayA; var myArrayB; var mystra; var bid; var kid myArrayA = []; myArrayB = []; //HTML Raw Daten holen mystra = getState('javascript.0.dsbplan.RAW').val; //Alles was im HTML Code ersetzt werden soll mystra = mystra.replace(/7C/g, "7C (Evelina)"); mystra = mystra.replace(/7D/g, "7D (Matthis)"); mystra = mystra.replace(/f�r/gi, "für"); mystra = mystra.replace(/R�ume/gi, "Räume"); mystra = mystra.replace(/entf�llt/gi, "<h1><b>fällt aus</b></h1>"); mystra = mystra.replace(/g�ltig ab 07.02.22/g, ""); mystra = mystra.replace(/aufgel�st/g, "aufgelöst"); mystra = mystra.replace(/Stundenplan 21-22_1./g, ""); mystra = mystra.replace(/Halbjahr_Version/g, ""); mystra = mystra.replace(/1_Stand_15.03.22/gi, ""); mystra = mystra.replace(/Untis Stundenplan Software/g, ""); mystra = mystra.replace(/Untis/g, ""); mystra = mystra.replace(/ 2022 /g, ""); mystra = mystra.replace(/\<tr class="info"\>\<th class="info" align="center" colspan="2"\>/gi, ""); mystra = mystra.replace(/class="info"/gi, ""); mystra = mystra.replace(/Nachrichten zum Tag\<\/th\>\<\/tr\>/gi, ""); mystra = mystra.replace(/Stand:.+\<p>/gi, "<p>"); mystra = mystra.replace(/BEETHOVEN-OBERSCHULE.+/g, ""); mystra = mystra.replace(/Schuljahr.+/g, ""); mystra = mystra.replace(/colspan=\"2\"\>/gi, "colspan=\"2\"\>\<font size=\"1\"\>"); mystra = mystra.replace(/Ihr Browser kann leider keine eingebetteten Frames anzeigen/gi, ""); //Vollschreibweise Lernfächer mystra = mystra.replace(/De</g, "Deutsch<"); mystra = mystra.replace(/Ma</g, "Mathe<"); mystra = mystra.replace(/Rev</g, "Religion<"); mystra = mystra.replace(/>Sp</g, ">Sport<"); mystra = mystra.replace(/PB</g, "Politik<"); mystra = mystra.replace(/Ph</g, "Physik<"); mystra = mystra.replace(/Bi</g, "Biologie<"); mystra = mystra.replace(/En</g, "Englisch<"); mystra = mystra.replace(/Ch</g, "Chemie<"); mystra = mystra.replace(/F</g, "Französisch<"); mystra = mystra.replace(/Ku</g, "Kunst<"); mystra = mystra.replace(/Ge</g, "Geschichte<"); mystra = mystra.replace(/Mu</g, "Musik<"); mystra = mystra.replace(/Ek</g, "Erdkunde<"); //Vollschreibweise Lehrer Namen mystra = mystra.replace(/Bj</g, "Baumxxxxx<"); mystra = mystra.replace(/Hei</g, "Heinxxx<"); mystra = mystra.replace(/Ott</g, "Otto<"); mystra = mystra.replace(/Her</g, "Her<"); mystra = mystra.replace(/Rb</g, "Ribxxx<"); mystra = mystra.replace(/Ba</g, "Balxxx<"); mystra = mystra.replace(/Zpr</g, "Zepxxx<"); mystra = mystra.replace(/Beu</g, "Beuxxxx<"); mystra = mystra.replace(/Rol</g, "Rolxxxxx<"); mystra = mystra.replace(/Wsd</g, "Westexxx<"); //Nur HTML Elemente der angegebene Klassen hinzufügen myArrayA = mystra.split("\n"); myArrayB = myArrayA myArrayA = []; myArrayB.forEach(function (element) { if(!element.startsWith("<tr class=\'list")) { myArrayA.push(element); } else if(element.startsWith("<tr class=\'list") && element.includes(klasse[0])) { myArrayA.push(element); } else if(element.startsWith("<tr class=\'list") && element.includes(klasse[1])) { myArrayA.push(element); } }); mystra = ""; myArrayA.forEach(function (element) { mystra += element + "\n"; }); //Füllen des Objekt states HTML in iobroker mit den bereinigten Daten setState('javascript.0.dsbplan.HTML', mystra); } //Automatischen Aufruf dieses Script's alle 15Min* schedule(cron1, function () { // Abruf alle 15Min get_dsb_data(); setTimeout(function() {parseplan();}, 4000); }); //Automatischen Aufruf dieses Script's ab 7h in kurzen Abständen schedule(cron2, function () { n get_dsb_data(); setTimeout(function() {parseplan();}, 4000); }); //Einmaliger Aufruf beim Starten des Scripts* get_dsb_data(); setTimeout(function() {parseplan();}, 4000);
-
Vis: Anzeigt Daten
Dafür nutze ich diesen State setState('javascript.0.dsbplan.HTML -
Email: sendet Daten an Familie (Kurz vor der Schule)
Einfach per email Adapter diesen State setState('javascript.0.dsbplan.HTML) versenden
- Umgebung: Pi4 mit iobroker, Python 3.9