NEWS
Brother MFC-7440N - Druckerinformationen auslesen
-
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

view-source:http://brn00807707e5d6.local/main/main.html


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?
@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":

Ergebnis:

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"> ■■■■■■■■■■ </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]=="■") { 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(/( |<([^>]+)>)/ig, " "); return (rueckgabe); } -
@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":

Ergebnis:

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"> ■■■■■■■■■■ </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]=="■") { 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(/( |<([^>]+)>)/ig, " "); return (rueckgabe); } -
@burg_io :)
Ich habe die zwei anderen Werte für die Trommel überlesen, sind die noch relevant? -
@burg_io :)
Ich habe die zwei anderen Werte für die Trommel überlesen, sind die noch relevant? -
@burg_io Kein größeres Problem, ist zumindest einfacher als die Kästchen ;)
...die waren aber auch nicht wirklich schwer
-
@burg_io Kein größeres Problem, ist zumindest einfacher als die Kästchen ;)
...die waren aber auch nicht wirklich schwer
-
@burg_io Sodele, hab wieder paar Werte zum testen eingepatcht und die Datenpunktstruktur angepasst. So ist es wegen der diversen Werte schlüssiger:

/* 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"> ■■■■■■■■■■ </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]=="■") { 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(/( |<([^>]+)>)/ig, " "); return (rueckgabe); } -
@burg_io Sodele, hab wieder paar Werte zum testen eingepatcht und die Datenpunktstruktur angepasst. So ist es wegen der diversen Werte schlüssiger:

/* 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"> ■■■■■■■■■■ </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]=="■") { 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(/( |<([^>]+)>)/ig, " "); return (rueckgabe); } -
@burg_io Sodele, hab wieder paar Werte zum testen eingepatcht und die Datenpunktstruktur angepasst. So ist es wegen der diversen Werte schlüssiger:

/* 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"> ■■■■■■■■■■ </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]=="■") { 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(/( |<([^>]+)>)/ig, " "); return (rueckgabe); } -
@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
@helfi9999
Dafür gibt´s den SNMP-Adapter https://github.com/iobroker-community-adapters/ioBroker.snmp/blob/master/docs/de/snmp.md ;-) -
@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
@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 :)
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

Ich staune nur.