Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Brother MFC-7440N - Druckerinformationen auslesen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    319

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.5k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.4k

Brother MFC-7440N - Druckerinformationen auslesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
13 Beiträge 5 Kommentatoren 1.1k Aufrufe 5 Watching
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • B Burg_Io

    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?

    SBorgS Offline
    SBorgS Offline
    SBorg
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #3

    @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);
    }
    
    

    LG SBorg ( SBorg auf GitHub)
    Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

    B 1 Antwort Letzte Antwort
    0
    • SBorgS SBorg

      @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 Offline
      B Offline
      Burg_Io
      schrieb am zuletzt editiert von Burg_Io
      #4

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

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

      Supie

      SBorgS 1 Antwort Letzte Antwort
      0
      • B Burg_Io

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

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

        Supie

        SBorgS Offline
        SBorgS Offline
        SBorg
        Forum Testing Most Active
        schrieb am zuletzt editiert von
        #5

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

        LG SBorg ( SBorg auf GitHub)
        Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

        B 1 Antwort Letzte Antwort
        0
        • SBorgS SBorg

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

          B Offline
          B Offline
          Burg_Io
          schrieb am zuletzt editiert von
          #6

          @sborg

          Wäre super wenn diese auch um zusetzten gehen.

          SBorgS 1 Antwort Letzte Antwort
          0
          • B Burg_Io

            @sborg

            Wäre super wenn diese auch um zusetzten gehen.

            SBorgS Offline
            SBorgS Offline
            SBorg
            Forum Testing Most Active
            schrieb am zuletzt editiert von
            #7

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

            LG SBorg ( SBorg auf GitHub)
            Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

            B 1 Antwort Letzte Antwort
            0
            • SBorgS SBorg

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

              B Offline
              B Offline
              Burg_Io
              schrieb am zuletzt editiert von
              #8

              @sborg

              Wenn du das sagt. :blush: Ich staune nur.

              SBorgS 1 Antwort Letzte Antwort
              0
              • B Burg_Io

                @sborg

                Wenn du das sagt. :blush: Ich staune nur.

                SBorgS Offline
                SBorgS Offline
                SBorg
                Forum Testing Most Active
                schrieb am zuletzt editiert von
                #9

                @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);
                }
                
                
                

                LG SBorg ( SBorg auf GitHub)
                Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                B H 2 Antworten Letzte Antwort
                0
                • SBorgS SBorg

                  @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 Offline
                  B Offline
                  Burg_Io
                  schrieb am zuletzt editiert von
                  #10

                  @sborg

                  Läuft perfekt. Vielen Dank.

                  1 Antwort Letzte Antwort
                  0
                  • SBorgS SBorg

                    @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);
                    }
                    
                    
                    
                    H Online
                    H Online
                    helfi9999
                    schrieb am zuletzt editiert von
                    #11

                    @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

                    Intel NUC mit Iobroker

                    LatziL SBorgS 2 Antworten Letzte Antwort
                    0
                    • H helfi9999

                      @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

                      LatziL Online
                      LatziL Online
                      Latzi
                      schrieb am zuletzt editiert von
                      #12

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

                      1 Antwort Letzte Antwort
                      0
                      • H helfi9999

                        @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

                        SBorgS Offline
                        SBorgS Offline
                        SBorg
                        Forum Testing Most Active
                        schrieb am zuletzt editiert von
                        #13

                        @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 :)

                        LG SBorg ( SBorg auf GitHub)
                        Projekte: Lebensmittelwarnung.de | WLAN-Wetterstation | PimpMyStation

                        1 Antwort Letzte Antwort
                        0
                        Antworten
                        • In einem neuen Thema antworten
                        Anmelden zum Antworten
                        • Älteste zuerst
                        • Neuste zuerst
                        • Meiste Stimmen


                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        753

                        Online

                        32.5k

                        Benutzer

                        81.7k

                        Themen

                        1.3m

                        Beiträge
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                        ioBroker Community 2014-2025
                        logo
                        • Anmelden

                        • Du hast noch kein Konto? Registrieren

                        • Anmelden oder registrieren, um zu suchen
                        • Erster Beitrag
                          Letzter Beitrag
                        0
                        • Home
                        • Aktuell
                        • Tags
                        • Ungelesen 0
                        • Kategorien
                        • Unreplied
                        • Beliebt
                        • GitHub
                        • Docu
                        • Hilfe