Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Brother MFC-7440N - Druckerinformationen auslesen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Brother MFC-7440N - Druckerinformationen auslesen

    This topic has been deleted. Only users with topic management privileges can see it.
    • SBorg
      SBorg Forum Testing Most Active @Burg_Io last edited by

      @burg_io sagte in Brother MFC-7440N - Druckerinformationen auslesen:

      25a0 = Weißes Quadrat

      Ist zwar nicht relevant, aber IMHO 25a1 😉
      Habe mal ein Tonerstand "gefaket":
      Toner1.png

      Ergebnis:
      Toner2.png

      Skript:

      /* Tonerfüllstand für einen Brother MFC-7440N auslesen
      
      https://forum.iobroker.net/topic/50647/brother-mfc-7440n-druckerinformationen-auslesen
      
      25.12.2021 (SBorg) first release - ließt den Tonerfüllstand per Webseite ein
      
      */
       
      const DP = "0_userdata.0.Tonerstand";                            // wo sollen die Datenpunkte erstellt werden
      const URL = "http://10.0.1.132:12300/drucker.html";            // die URL der Druckerstatusseite
      const Zeitplan = "0 */1 * * *";                                  // wann soll die Seite gelesen werden (cron-Syntax)?
       
      
      
      // ab hier muss nix mehr geändert werden
      const axios = require('axios');
      await DPsAnlegen(); 
      Fuellstand();
      schedule(Zeitplan, Fuellstand);
      
      
       
      async function DPsAnlegen() {
        if (!existsState(DP)) {createState(DP, '', { name: "Tonerfüllstand" });}
        for(let i=10; i<=100; i+=10) {
          if (!existsState(DP + ".Füllstand_" + i)) {
              createState(DP + ".Füllstand_" + i, "", {
                  "name": "Tonerfüllstand " + i + "%",
                  "type": "number",
                  "role": "state"
              });
          }
        }
      }
       
      function Fuellstand() {
          try {
              const options = { method: 'get', url: URL };
              axios(options).then(function (response) {
               
                  if (response.status == 200) { // kein Fehler, Inhalt in body
                      /* benötigter HTML Code
                          Toner** 
                          </DD></TD><TD CLASS="elem">
                          &#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;
                          </TD></TR>
                       */
      
                      // Tonerstand extrahieren
       
                      let fuellstand;
                      let fuellstand_start = "Toner**";
                      let fuellstand_ende = "</TR>"; // dazwischen ist der Text für den Füllstand
       
                      let pos_start = response.data.indexOf(fuellstand_start);
                      let pos_ende = response.data.indexOf(fuellstand_ende);
       
                      if (pos_start != -1 && pos_ende != -1) { // wenn gesuchte Strings überhaupt existieren
                          let fuellstand_bereich = response.data.substring(pos_start + fuellstand_start.length, response.data.length); // von/bis, aber ohne ersten Treffer
                          fuellstand_bereich = fuellstand_bereich.substring(0, fuellstand_bereich.indexOf(fuellstand_ende)); // Suchwort am Ende abschneiden
                          fuellstand = strip_tags(fuellstand_bereich).trim(); // kpl. Füllstand
      
                          // Füllstand nun in Einzelwerte parsen + DPs setzen
                          let fuellstand_arr = fuellstand.split(';');
                          for ( let i=0; i<fuellstand_arr.length-1; i++) {
                              if (fuellstand_arr[i]=="&#x25a0") { 
                                  setState(DP + ".Füllstand_" + (i+1)*10 , 1, true); } 
                              else { 
                                  setState(DP + ".Füllstand_" + (i+1)*10 , 0, true); }
                          }
                          
                      } else log("Konnte keinen Tonerfüllstand einlesen!", "error");
       
                  } else {
                      log("StatusCode = " + response.statusCode);
                  }
              });
          } catch (e) {
              log("Fehler (try) beim lesen der Druckerstatusseite: " + e, "error");
          }
          log("Druckerstatusseite eingelesen...", "info");
      }
       
      function strip_tags(data) {
          var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
          return (rueckgabe);
      }
      
      
      B 1 Reply Last reply Reply Quote 0
      • B
        Burg_Io @SBorg last edited by Burg_Io

        @sborg
        Vielen Dank für die schnelle Lösung. Daten werden ordentlich angelegt.

        bd3163b1-3b87-4605-b8e9-ddc19e2eab48-image.png

        Supie

        SBorg 1 Reply Last reply Reply Quote 0
        • SBorg
          SBorg Forum Testing Most Active @Burg_Io last edited by

          @burg_io 🙂
          Ich habe die zwei anderen Werte für die Trommel überlesen, sind die noch relevant?

          B 1 Reply Last reply Reply Quote 0
          • B
            Burg_Io @SBorg last edited by

            @sborg

            Wäre super wenn diese auch um zusetzten gehen.

            SBorg 1 Reply Last reply Reply Quote 0
            • SBorg
              SBorg Forum Testing Most Active @Burg_Io last edited by

              @burg_io Kein größeres Problem, ist zumindest einfacher als die Kästchen 😉
              ...die waren aber auch nicht wirklich schwer 😂

              B 1 Reply Last reply Reply Quote 0
              • B
                Burg_Io @SBorg last edited by

                @sborg

                Wenn du das sagt. 😊 Ich staune nur.

                SBorg 1 Reply Last reply Reply Quote 0
                • SBorg
                  SBorg Forum Testing Most Active @Burg_Io last edited by

                  @burg_io Sodele, hab wieder paar Werte zum testen eingepatcht und die Datenpunktstruktur angepasst. So ist es wegen der diversen Werte schlüssiger:
                  Drucker.png

                  /* Tonerfüllstand und Daten zur Trommeleinheit für einen Brother MFC-7440N auslesen
                  
                  https://forum.iobroker.net/topic/50647/brother-mfc-7440n-druckerinformationen-auslesen
                  
                  26.12.2021 V0.0.2 - Daten zur Trommeleinheit (Seitenanzahl und Lebensdauer) hinzugefügt
                  25.12.2021 (SBorg) first release - ließt den Tonerfüllstand per Webseite ein
                  */
                   
                  const DP = "0_userdata.0.Brother_Drucker";                       // wo sollen die Datenpunkte erstellt werden
                  const URL = "https://10.0.1.132:12300/drucker.html";             // die URL der Druckerstatusseite
                  const Zeitplan = "0 */1 * * *";                                  // wann soll die Seite gelesen werden (cron-Syntax)?
                   
                  
                  
                  // ab hier muss nix mehr geändert werden
                  const axios = require('axios');
                  DPsAnlegen(); 
                  setTimeout(function() { Fuellstand(); }, 10000);    // 10 Sekunden nach Start mal initial Werte holen
                  schedule(Zeitplan, Fuellstand);
                  
                   
                  function DPsAnlegen() {
                    if (!existsState(DP)) { createStateAsync(DP, '', { name: "Daten für den Drucker" }); }
                    if (!existsState(DP+".Tonerstand")) { createStateAsync(DP+".Tonerstand", '', { name: "Füllstand des Toners" }, function() { 
                              for(let i=10; i<=100; i+=10) {
                                  if (!existsState(DP + ".Tonerstand.Füllstand_" + i)) {
                                      createStateAsync(DP + ".Tonerstand.Füllstand_" + i, 0, {
                                          "name": "Tonerfüllstand " + i + "%",
                                          "type": "number",
                                          "role": "state"
                                      });
                                  }
                              }
                          });
                    }
                    if (!existsState(DP+".Trommeleinheit")) { createStateAsync(DP+".Trommeleinheit", '', { name: "Daten zur Trommeleinheit" }, function() { 
                                  if (!existsState(DP + ".Trommeleinheit.Lebensdauer_Seiten")) {
                                      createStateAsync(DP + ".Trommeleinheit.Lebensdauer_Seiten", 0, {
                                          "name": "verbleibende Lebensdauer in Seiten",
                                          "type": "number",
                                          "role": "state",
                                          "unit": "Seiten"
                                      });
                                  }
                                  if (!existsState(DP + ".Trommeleinheit.Lebensdauer_Prozent")) {
                                      createStateAsync(DP + ".Trommeleinheit.Lebensdauer_Prozent", 0, {
                                          "name": "verbleibende Lebensdauer in Prozent",
                                          "type": "number",
                                          "role": "state",
                                          "unit": "%"
                                      });
                                  }
                      }
                    );}
                  }
                   
                   
                  function Fuellstand() {
                      try {
                          const options = { method: 'get', url: URL };
                          axios(options).then(function (response) {
                           
                              if (response.status == 200) { // kein Fehler, Inhalt in body
                                  /* benötigter HTML Code
                                      Toner** 
                                      </DD></TD><TD CLASS="elem">
                                      &#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;
                                      </TD></TR>
                                   */
                  
                                  // Tonerstand extrahieren
                                  let fuellstand;
                                  let fuellstand_start = "Toner**";
                                  let fuellstand_ende = "</TR>"; // dazwischen ist der Text für den Füllstand
                   
                                  let pos_start = response.data.indexOf(fuellstand_start);
                                  let pos_ende = response.data.indexOf(fuellstand_ende);
                   
                                  if (pos_start != -1 && pos_ende != -1) { // wenn gesuchte Strings überhaupt existieren
                                      let fuellstand_bereich = response.data.substring(pos_start + fuellstand_start.length, response.data.length); // von/bis, aber ohne ersten Treffer
                                      fuellstand_bereich = fuellstand_bereich.substring(0, fuellstand_bereich.indexOf(fuellstand_ende)); // Suchwort am Ende abschneiden
                                      fuellstand = strip_tags(fuellstand_bereich).trim(); // kpl. Füllstand
                  
                                      // Füllstand nun in Einzelwerte parsen + DPs setzen
                                      let fuellstand_arr = fuellstand.split(';');
                                      for ( let i=0; i<fuellstand_arr.length-1; i++) {
                                          if (fuellstand_arr[i]=="&#x25a0") { 
                                              setState(DP + ".Tonerstand.Füllstand_" + (i+1)*10 , 1, true); } 
                                          else { 
                                              setState(DP + ".Tonerstand.Füllstand_" + (i+1)*10 , 0, true); }
                                      }    
                                  } else log("Konnte keinen Tonerfüllstand einlesen!", "error");
                  
                                  /* benötigter HTML Code
                                      Trommeleinheit* 
                                      </DD></TD><TD CLASS="elem">
                                      0
                                      Seiten
                                      </TD></TR>
                                  */
                                  // Trommeleinheit verbleibende Seitenlebensdauer
                                  let trommel_seiten;
                                  let trommel_seiten_start = "Trommeleinheit*";
                                  let trommel_seiten_ende = "</TR>"; // dazwischen ist der Text für den Füllstand
                   
                                  pos_start = response.data.indexOf(trommel_seiten_start);
                                  pos_ende = response.data.indexOf(trommel_seiten_ende);
                   
                                  if (pos_start != -1 && pos_ende != -1) { // wenn gesuchte Strings überhaupt existieren
                                      let trommel_seiten_bereich = response.data.substring(pos_start + trommel_seiten_start.length, response.data.length); // von/bis, aber ohne ersten Treffer
                                      trommel_seiten_bereich = trommel_seiten_bereich.substring(0, trommel_seiten_bereich.indexOf(trommel_seiten_ende)); // Suchwort am Ende abschneiden
                                      trommel_seiten = parseInt(strip_tags(trommel_seiten_bereich).trim()); // verbleibende Seitenanzahl
                                      
                                      setState(DP + ".Trommeleinheit.Lebensdauer_Seiten", trommel_seiten, true);    
                                  } else log("Konnte keine verbleibende Seiten für Trommeleinheit einlesen!", "error");
                  
                     
                              /* benötigter HTML Code
                                  (Verbleibende Lebensdauer in %)
                                  </DD></TD><TD CLASS="elem">
                                  (0.00%)
                                  </TD></TR>
                              */
                              // Trommeleinheit verbleibende Lebensdauer in Prozent
                                  let trommel_prozent;
                                  let trommel_prozent_start = "(Verbleibende Lebensdauer in %)";
                                  let trommel_prozent_ende = "</TR>"; // dazwischen ist der Text für den Füllstand
                   
                                  pos_start = response.data.indexOf(trommel_prozent_start);
                                  pos_ende = response.data.indexOf(trommel_prozent_ende);
                   
                                  if (pos_start != -1 && pos_ende != -1) { // wenn gesuchte Strings überhaupt existieren
                                      let trommel_prozent_bereich = response.data.substring(pos_start + trommel_prozent_start.length, response.data.length); // von/bis, aber ohne ersten Treffer
                                      trommel_prozent_bereich = trommel_prozent_bereich.substring(0, trommel_prozent_bereich.indexOf(trommel_prozent_ende)); // Suchwort am Ende abschneiden
                                      trommel_prozent = strip_tags(trommel_prozent_bereich).trim(); // verbleibende Prozentzahl (0.0%)
                                      trommel_prozent = parseFloat(trommel_prozent.replace(/[%()]/ig, ''));
                  
                                      setState(DP + ".Trommeleinheit.Lebensdauer_Prozent", trommel_prozent, true);    
                                  } else log("Konnte keinen verbleibenden Prozentwert für Trommeleinheit einlesen!", "error");
                  
                              } else { log("StatusCode = " + response.statusCode); }
                  
                          });
                      } catch (e) {
                          log("Fehler (try) beim lesen der Druckerstatusseite: " + e, "error");
                      }
                      log("Druckerstatusseite eingelesen...", "info");
                  }
                   
                  function strip_tags(data) {
                      var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
                      return (rueckgabe);
                  }
                  
                  
                  
                  B H 2 Replies Last reply Reply Quote 0
                  • B
                    Burg_Io @SBorg last edited by

                    @sborg

                    Läuft perfekt. Vielen Dank.

                    1 Reply Last reply Reply Quote 0
                    • H
                      helfi9999 @SBorg last edited by

                      @sborg habe im Internet folgendes gefunden. Wäre es möglich daraus ein Script für Iobroker zu bauen. Habe so leider keine Ahnung davon.

                      Hier das Script was ich gefunden habe: auf Github

                      Wäre cool.

                      helfi9999

                      Latzi SBorg 2 Replies Last reply Reply Quote 0
                      • Latzi
                        Latzi @helfi9999 last edited by

                        @helfi9999
                        Dafür gibt´s den SNMP-Adapter https://github.com/iobroker-community-adapters/ioBroker.snmp/blob/master/docs/de/snmp.md 😉

                        1 Reply Last reply Reply Quote 0
                        • SBorg
                          SBorg Forum Testing Most Active @helfi9999 last edited by

                          @helfi9999 Hi, wie @Latzi schon schrieb, dass ist eine SNMP-Abfrage. Obiges JS ist/war nur nötig, da die gewünschten Werte eben nicht per SNMP übertragen werden, der Rest schon 🙂

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          909
                          Online

                          31.9k
                          Users

                          80.1k
                          Topics

                          1.3m
                          Posts

                          5
                          13
                          791
                          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