@Glasfaser Sieht sehr gut aus. Das sollte die Lösung sein. Danke.
NEWS
Tintenstand für Canon TR8550 (als Netzwerkdrucker)
-
Hallo,
hier mein Script zum auswerten des Tintenstands bei einen Canon TR8550 der über LAN angeschlossen ist.
Vielleicht ist es ja für den ein oder anderen nützlich.Als Vorlage diente https://www.iobroker.net/docu/index-317.htm?page_id=3668&lang=de
LG bazidibavaria
PS: Es ist mein erstes Skript für ioBroker, wenn ihr Verbesserungsvorschläge habt, immer her damit
EDIT: role hinzugefügt
EDIT: Leider ist die Code-Darstellung fehlerhaft, doppelte backslashed werden durch einfache ersetzt.
=> Zeile 80 - inktank [HIER DOPPELTE] levelpos [HIER DOPPELTE]/* Beschreibung: Canon Drucker Tintenstand für iobroker ermitteln Vorlage: https://www.iobroker.net/docu/index-317.htm?page_id=3668&lang=de Author: bazidibavaria - 2020-03-18 Version: 0.1 */ var druckerIP = "192.168.178.20"; var druckerHersteller = "Canon"; var druckerMod = "TR8550"; var druckerDataJS = "http://" + druckerIP + "/JS_MDL/model.js"; var level_C = 0; var level_M = 0; var level_Y = 0; var level_BK = 0; var level_PGBK = 0; var DruckIP = "Drucker." + druckerHersteller + "." + druckerMod + ".IP"; var DruckerName = "Drucker." + druckerHersteller + "." + druckerMod + ".Name"; var DruckerHersteller = "Drucker." + druckerHersteller + "." + druckerMod + ".Hersteller"; var DruckerModell = "Drucker." + druckerHersteller + "." + druckerMod + ".Modell"; var CLevel = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.C.Level"; var CWarning = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.C.Warning"; var MLevel = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.M.Level"; var MWarning = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.M.Warning"; var YLevel = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.Y.Level"; var YWarning = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.Y.Warning"; var BKLevel = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.BK.Level"; var BKWarning = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.BK.Warning"; var PGBKLevel = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.PGBK.Level"; var PGBKWarning = "Drucker." + druckerHersteller + "." + druckerMod + ".Tinte.PGBK.Warning"; // Anlegen der Variablen createState(DruckIP,druckerIP,{name:'Drucker IP',type:"string",role:"text"}); createState(DruckerName,druckerHersteller + " " + druckerMod,{name:'Drucker Name',type:"string",role:"text"}); createState(DruckerHersteller,druckerHersteller,{name:'Drucker Hersteller',type:"string",role:"text"}); createState(DruckerModell,druckerMod,{name:'Drucker Modell',type:"string",role:"text"}); createState(CLevel,0,{name:'Tintenstand Cyan',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"}); createState(MLevel,0,{name:'Tintenstand Magenta',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"}); createState(YLevel,0,{name:'Tintenstand Yellow',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"}); createState(BKLevel,0,{name:'Tintenstand Black',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"}); createState(PGBKLevel,0,{name:'Tintenstand Page Black',def:0,type:"number",write:false,min:0,max:100,unit:"%",role:"value.fill"}); createState(CWarning,false,{name:'Tintenstand Warnung Cyan',def:false,type:"boolean",write:false,role:"indicator"}); createState(MWarning,false,{name:'Tintenstand Warnung Magenta',def:false,type:"boolean",write:false,role:"indicator"}); createState(YWarning,false,{name:'Tintenstand Warnung Yellow',def:false,type:"boolean",write:false,role:"indicator"}); createState(BKWarning,false,{name:'Tintenstand Warnung Black',def:false,type:"boolean",write:false,role:"indicator"}); createState(PGBKWarning,false,{name:'Tintenstand Warnung Page Black',def:false,type:"boolean",write:false,role:"indicator"}); // Schedule für die Updates schedule("0 */1 * * *", Drucker); // Skript ausführen Drucker(); function Drucker () { request(druckerDataJS, function (error, response, body) { if (!error && response.statusCode == 200) { //get colors var inkColNames = []; var findInkCol = /inkCOL\s?=\s?([^;]+);/i; var matchInkCol = findInkCol.exec(body); // log(matchInkCol); if(matchInkCol != null && matchInkCol.length == 2){ inkColNames = eval(matchInkCol[1]); } //get ink fill state inkColNames.forEach(ink => { var levelPos = inkColNames.indexOf(ink); var findInkStatus = new RegExp('inktank\[' + levelPos + '\]\s?=\s?([^;]+)',"i"); var matchInkStatus = body.match(findInkStatus); if(matchInkStatus != null && matchInkStatus.length == 2){ var inkColState = eval(matchInkStatus[1]); if(inkColState.length == 3){ var inkColLevel = 0; if(inkColState[1] != 10){ var inkColLevel = 100 - (inkColState[1]*10); } else { var inkColLevel = 100; } switch(ink) { case 'InkMaz': setState(MLevel,inkColLevel); setState(MWarning,(inkColState[2]==1)?true:false); break; case 'InkBlk': setState(BKLevel,inkColLevel); setState(BKWarning,(inkColState[2]==1)?true:false); break; case 'InkYel': setState(YLevel,inkColLevel); setState(YWarning,(inkColState[2]==1)?true:false); break; case 'InkPbk': setState(PGBKLevel,inkColLevel); setState(PGBKWarning,(inkColState[2]==1)?true:false); break; case 'InkCia': setState(CLevel,inkColLevel); setState(CWarning,(inkColState[2]==1)?true:false); break; default: // do nothing } } } }); } else { log(error); log('Kein Drucker gefunden'); } }); }