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
    365

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

    sigi234S Online
    sigi234S Online
    sigi234
    Forum Testing Most Active
    schrieb am zuletzt editiert von
    #2

    @burg_io

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

    Bitte benutzt das Voting rechts unten im Beitrag wenn er euch geholfen hat.
    Immer Daten sichern!

    1 Antwort Letzte Antwort
    0
    • 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 Offline
                        LatziL Offline
                        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

                          791

                          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