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
    11
    1
    362

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.6k

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

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.
  • 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

                      796

                      Online

                      32.5k

                      Benutzer

                      81.8k

                      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