NEWS

Tintenstand für Canon TR8550 (als Netzwerkdrucker)

  • Developer

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

Suggested Topics

2.2k
Online

35.1k
Users

41.1k
Topics

565.1k
Posts