Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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 ioBroker-Blog online: Monatsrückblick März/April 2026
    BluefoxB
    Bluefox
    8
    1
    359

  • Verwendung von KI bitte immer deutlich kennzeichnen
    HomoranH
    Homoran
    10
    1
    321

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    940

Brother MFC-7440N - Druckerinformationen auslesen

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
13 Beiträge 5 Kommentatoren 1.2k Aufrufe 5 Beobachtet
  • Ä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 😂

          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 😂

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

            @sborg

            Wenn du das sagt. 😊 Ich staune nur.

            SBorgS 1 Antwort Letzte Antwort
            0
            • B Burg_Io

              @sborg

              Wenn du das sagt. 😊 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 Offline
                  H Offline
                  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

                      Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                      Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                      Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                      Registrieren Anmelden
                      Antworten
                      • In einem neuen Thema antworten
                      Anmelden zum Antworten
                      • Älteste zuerst
                      • Neuste zuerst
                      • Meiste Stimmen


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      412

                      Online

                      32.8k

                      Benutzer

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