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');
}
});
}