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

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Brother MFC-7440N - Druckerinformationen auslesen

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

      Bei unserem betagten Drucker (Brother MFC-7440N), lassen sich leider nicht alle Werte per SNMP auslesen und entsprechend verarbeiten.

      Ich suche eine Lösung von der internen Seite des Druckers:

      http://brn00807707e5d6.local/etc/mnt_info.html?kind=item

      drucker01.jpg

      view-source:http://brn00807707e5d6.local/main/main.html

      drucker_02.jpg

      Druckerseite.txt

      drucker_03.jpg


      Werte:
      25a0 = Schwarzes Quadrat
      25a0 = Weißes Quadrat


      die drei rot maskierten Werte auszulesen und in einen DP zu schreiben.

      Der DP für den Tonerfüllstand wären 10 DP´e (10%-100%), die bei einem schwarzen Kästchen eine "1" erhalten, sonst eine "0" enthalten super.

      Gibt es eine Möglichkeit der Umsetzung?

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

        @burg_io

        https://forum.iobroker.net/topic/46546/gelöst-probleme-bei-brother-dcp-mit-parser-auslesen/9?_=1637474616392

        1 Reply Last reply Reply Quote 0
        • 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

                              776
                              Online

                              31.7k
                              Users

                              79.7k
                              Topics

                              1.3m
                              Posts

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