Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Brother MFC-7440N - Druckerinformationen auslesen

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    Brother MFC-7440N - Druckerinformationen auslesen

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

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

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

      Supie

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

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

        B 1 Reply Last reply Reply Quote 0
        • B
          Burg_Io @SBorg last edited by

          @sborg

          Wäre super wenn diese auch um zusetzten gehen.

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

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

            B 1 Reply Last reply Reply Quote 0
            • B
              Burg_Io @SBorg last edited by

              @sborg

              Wenn du das sagt. 😊 Ich staune nur.

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

                @burg_io Sodele, hab wieder paar Werte zum testen eingepatcht und die Datenpunktstruktur angepasst. So ist es wegen der diversen Werte schlüssiger:
                Drucker.png

                /* Tonerfüllstand und Daten zur Trommeleinheit für einen Brother MFC-7440N auslesen
                
                https://forum.iobroker.net/topic/50647/brother-mfc-7440n-druckerinformationen-auslesen
                
                26.12.2021 V0.0.2 - Daten zur Trommeleinheit (Seitenanzahl und Lebensdauer) hinzugefügt
                25.12.2021 (SBorg) first release - ließt den Tonerfüllstand per Webseite ein
                */
                 
                const DP = "0_userdata.0.Brother_Drucker";                       // wo sollen die Datenpunkte erstellt werden
                const URL = "https://10.0.1.132:12300/drucker.html";             // die URL der Druckerstatusseite
                const Zeitplan = "0 */1 * * *";                                  // wann soll die Seite gelesen werden (cron-Syntax)?
                 
                
                
                // ab hier muss nix mehr geändert werden
                const axios = require('axios');
                DPsAnlegen(); 
                setTimeout(function() { Fuellstand(); }, 10000);    // 10 Sekunden nach Start mal initial Werte holen
                schedule(Zeitplan, Fuellstand);
                
                 
                function DPsAnlegen() {
                  if (!existsState(DP)) { createStateAsync(DP, '', { name: "Daten für den Drucker" }); }
                  if (!existsState(DP+".Tonerstand")) { createStateAsync(DP+".Tonerstand", '', { name: "Füllstand des Toners" }, function() { 
                            for(let i=10; i<=100; i+=10) {
                                if (!existsState(DP + ".Tonerstand.Füllstand_" + i)) {
                                    createStateAsync(DP + ".Tonerstand.Füllstand_" + i, 0, {
                                        "name": "Tonerfüllstand " + i + "%",
                                        "type": "number",
                                        "role": "state"
                                    });
                                }
                            }
                        });
                  }
                  if (!existsState(DP+".Trommeleinheit")) { createStateAsync(DP+".Trommeleinheit", '', { name: "Daten zur Trommeleinheit" }, function() { 
                                if (!existsState(DP + ".Trommeleinheit.Lebensdauer_Seiten")) {
                                    createStateAsync(DP + ".Trommeleinheit.Lebensdauer_Seiten", 0, {
                                        "name": "verbleibende Lebensdauer in Seiten",
                                        "type": "number",
                                        "role": "state",
                                        "unit": "Seiten"
                                    });
                                }
                                if (!existsState(DP + ".Trommeleinheit.Lebensdauer_Prozent")) {
                                    createStateAsync(DP + ".Trommeleinheit.Lebensdauer_Prozent", 0, {
                                        "name": "verbleibende Lebensdauer in Prozent",
                                        "type": "number",
                                        "role": "state",
                                        "unit": "%"
                                    });
                                }
                    }
                  );}
                }
                 
                 
                function Fuellstand() {
                    try {
                        const options = { method: 'get', url: URL };
                        axios(options).then(function (response) {
                         
                            if (response.status == 200) { // kein Fehler, Inhalt in body
                                /* benötigter HTML Code
                                    Toner** 
                                    </DD></TD><TD CLASS="elem">
                                    &#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;&#x25a0;
                                    </TD></TR>
                                 */
                
                                // Tonerstand extrahieren
                                let fuellstand;
                                let fuellstand_start = "Toner**";
                                let fuellstand_ende = "</TR>"; // dazwischen ist der Text für den Füllstand
                 
                                let pos_start = response.data.indexOf(fuellstand_start);
                                let pos_ende = response.data.indexOf(fuellstand_ende);
                 
                                if (pos_start != -1 && pos_ende != -1) { // wenn gesuchte Strings überhaupt existieren
                                    let fuellstand_bereich = response.data.substring(pos_start + fuellstand_start.length, response.data.length); // von/bis, aber ohne ersten Treffer
                                    fuellstand_bereich = fuellstand_bereich.substring(0, fuellstand_bereich.indexOf(fuellstand_ende)); // Suchwort am Ende abschneiden
                                    fuellstand = strip_tags(fuellstand_bereich).trim(); // kpl. Füllstand
                
                                    // Füllstand nun in Einzelwerte parsen + DPs setzen
                                    let fuellstand_arr = fuellstand.split(';');
                                    for ( let i=0; i<fuellstand_arr.length-1; i++) {
                                        if (fuellstand_arr[i]=="&#x25a0") { 
                                            setState(DP + ".Tonerstand.Füllstand_" + (i+1)*10 , 1, true); } 
                                        else { 
                                            setState(DP + ".Tonerstand.Füllstand_" + (i+1)*10 , 0, true); }
                                    }    
                                } else log("Konnte keinen Tonerfüllstand einlesen!", "error");
                
                                /* benötigter HTML Code
                                    Trommeleinheit* 
                                    </DD></TD><TD CLASS="elem">
                                    0
                                    Seiten
                                    </TD></TR>
                                */
                                // Trommeleinheit verbleibende Seitenlebensdauer
                                let trommel_seiten;
                                let trommel_seiten_start = "Trommeleinheit*";
                                let trommel_seiten_ende = "</TR>"; // dazwischen ist der Text für den Füllstand
                 
                                pos_start = response.data.indexOf(trommel_seiten_start);
                                pos_ende = response.data.indexOf(trommel_seiten_ende);
                 
                                if (pos_start != -1 && pos_ende != -1) { // wenn gesuchte Strings überhaupt existieren
                                    let trommel_seiten_bereich = response.data.substring(pos_start + trommel_seiten_start.length, response.data.length); // von/bis, aber ohne ersten Treffer
                                    trommel_seiten_bereich = trommel_seiten_bereich.substring(0, trommel_seiten_bereich.indexOf(trommel_seiten_ende)); // Suchwort am Ende abschneiden
                                    trommel_seiten = parseInt(strip_tags(trommel_seiten_bereich).trim()); // verbleibende Seitenanzahl
                                    
                                    setState(DP + ".Trommeleinheit.Lebensdauer_Seiten", trommel_seiten, true);    
                                } else log("Konnte keine verbleibende Seiten für Trommeleinheit einlesen!", "error");
                
                   
                            /* benötigter HTML Code
                                (Verbleibende Lebensdauer in %)
                                </DD></TD><TD CLASS="elem">
                                (0.00%)
                                </TD></TR>
                            */
                            // Trommeleinheit verbleibende Lebensdauer in Prozent
                                let trommel_prozent;
                                let trommel_prozent_start = "(Verbleibende Lebensdauer in %)";
                                let trommel_prozent_ende = "</TR>"; // dazwischen ist der Text für den Füllstand
                 
                                pos_start = response.data.indexOf(trommel_prozent_start);
                                pos_ende = response.data.indexOf(trommel_prozent_ende);
                 
                                if (pos_start != -1 && pos_ende != -1) { // wenn gesuchte Strings überhaupt existieren
                                    let trommel_prozent_bereich = response.data.substring(pos_start + trommel_prozent_start.length, response.data.length); // von/bis, aber ohne ersten Treffer
                                    trommel_prozent_bereich = trommel_prozent_bereich.substring(0, trommel_prozent_bereich.indexOf(trommel_prozent_ende)); // Suchwort am Ende abschneiden
                                    trommel_prozent = strip_tags(trommel_prozent_bereich).trim(); // verbleibende Prozentzahl (0.0%)
                                    trommel_prozent = parseFloat(trommel_prozent.replace(/[%()]/ig, ''));
                
                                    setState(DP + ".Trommeleinheit.Lebensdauer_Prozent", trommel_prozent, true);    
                                } else log("Konnte keinen verbleibenden Prozentwert für Trommeleinheit einlesen!", "error");
                
                            } else { log("StatusCode = " + response.statusCode); }
                
                        });
                    } catch (e) {
                        log("Fehler (try) beim lesen der Druckerstatusseite: " + e, "error");
                    }
                    log("Druckerstatusseite eingelesen...", "info");
                }
                 
                function strip_tags(data) {
                    var rueckgabe = data.replace(/(&nbsp;|<([^>]+)>)/ig, " ");
                    return (rueckgabe);
                }
                
                
                
                B H 2 Replies Last reply Reply Quote 0
                • B
                  Burg_Io @SBorg last edited by

                  @sborg

                  Läuft perfekt. Vielen Dank.

                  1 Reply Last reply Reply Quote 0
                  • H
                    helfi9999 @SBorg last edited by

                    @sborg habe im Internet folgendes gefunden. Wäre es möglich daraus ein Script für Iobroker zu bauen. Habe so leider keine Ahnung davon.

                    Hier das Script was ich gefunden habe: auf Github

                    Wäre cool.

                    helfi9999

                    Latzi SBorg 2 Replies Last reply Reply Quote 0
                    • Latzi
                      Latzi @helfi9999 last edited by

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

                      1 Reply Last reply Reply Quote 0
                      • SBorg
                        SBorg Forum Testing Most Active @helfi9999 last edited by

                        @helfi9999 Hi, wie @Latzi schon schrieb, dass ist eine SNMP-Abfrage. Obiges JS ist/war nur nötig, da die gewünschten Werte eben nicht per SNMP übertragen werden, der Rest schon 🙂

                        1 Reply Last reply Reply Quote 0
                        • First post
                          Last post

                        Support us

                        ioBroker
                        Community Adapters
                        Donate

                        821
                        Online

                        31.9k
                        Users

                        80.1k
                        Topics

                        1.3m
                        Posts

                        5
                        13
                        790
                        Loading More Posts
                        • Oldest to Newest
                        • Newest to Oldest
                        • Most Votes
                        Reply
                        • Reply as topic
                        Log in to reply
                        Community
                        Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                        The ioBroker Community 2014-2023
                        logo