Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. DSB Mobile Abfrage per iobroker

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    DSB Mobile Abfrage per iobroker

    This topic has been deleted. Only users with topic management privileges can see it.
    • Z
      zwergigor last edited by zwergigor

      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

      1 Reply Last reply Reply Quote 0
      • First post
        Last post

      Support us

      ioBroker
      Community Adapters
      Donate

      533
      Online

      31.6k
      Users

      79.6k
      Topics

      1.3m
      Posts

      1
      1
      168
      Loading More Posts
      • Oldest to Newest
      • Newest to Oldest
      • Most Votes
      Reply
      • Reply as topic
      Log in to reply
      Community
      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
      The ioBroker Community 2014-2023
      logo