[APP][Pro] Canon

Connect your Canon printer with Homey and use the ink levels in your Flows.

If it doesn’t work with your model, please let me know so that I can add support for it. The app was tested on TS5050 and iX6850, but it works on more models.

Version 1.0.2

  • Added forum topic ID to the app manifest

Version 1.0.3

  • Increased compatibility

Cool

unfortunally does not work with MG3600 series

Can you share a screenshot of the web interface? The web interface can be found at http://[your printer ip address]/. You can find the IP address on your printer’s display or with an app like Fing.

Also, does the printer even have a web interface? I couldn’t find anything about it online. Can you create a diagnostics report right after attempting to add the printer?

Your printer has a combined color cartridge instead of separate for each color. Can you share the contents of this file? http://[your printer ip]/JS_MDL/model.js

Version 1.0.4

  • Increased polling interval from every 5 minutes to every 2 minutes
var g_Administrator = 0;
var inktank=[];
inktank[0]=[6,10,1];
inktank[1]=[7,10,1];
var g_help_url = 'http://rs.ciggws.net/rd.cgi?FNC=RUI_HELP&RES=4&DEV=MG3600+series&CNM_SEP=0&DEV=MG3600+series&SFV=1.0&CTV=1.0&LNG=DE&CTN=SDP%2Fsdp-os.html';
var g_eid_url = 'dummy';
var g_ink_url = 'http://rs.ciggws.net/rd.cgi?FNC=RUI_INK&RES=4&DEV=MG3600+series&CNM_SEP=0&DEV=MG3600+series&LNG=DE&HRI=D';
var g_sup_url = 'http://canon.com/support/';
var g_err_url = 'http://rs.ciggws.net/rd.cgi?FNC=RUI_ERR&RES=4&DEV=MG3600+series&CNM_SEP=0&DEV=MG3600+series&LNG=DE&PDR=4&ERR=NO';
var g_pass_url = 'http://rs.ciggws.net/rd.cgi?FNC=RUI_PASS&RES=4&DEV=MG3600+series&CNM_SEP=0&DEV=MG3600+series&LNG=DE&CTN=PW%2Fpw_certifications.html';
var g_signal_strength = '35';
var g_link_quality = '34';
var g_err_msg_id = 'HTTP_ERR_DISP_IDLE';
var g_bst_st = '0';
var g_battery_lv = 'AC_ON';
var g_prndoc = '0';
var g_firm_up_date=0;
var g_micro_ap=0;
var g_wifi_direct=0;
var g_nfc_mode=0;
var g_ipp_over_usb=0;
var g_network_mode='NORMAL';
var g_fax_model=0;
var g_scanner=1;
var g_adf=0;
var g_mobile=0;
var g_scanto_folder=0;
var g_lan_if = 'LAN_IF_WIRELESS';
var g_password_enable=1;
var g_logon_screen = '0';

According to that information, both ink cartridges are empty, right? I can’t see from this information which cartridge is for color and for black. When you replace them, can you only replace 1 of the cartridges and then get the information from the http://[your printer ip]/JS_MDL/model.js file again? Also note down which ink cartridge you replaced.

Version 1.1.0 [LIVE]

  • Added support for iX6800 series (only supports signal strength, the iX6800 doesn’t expose the ink levels via its web interface)

I have a Canon iP7250 inkjet printer and it only shows signal strength in Homey. Home Assistant manages to show all 5 ink levels of this printer. Would that be possible with Homey and this Canon app?

Home Assistant values in the Internet Printing Protocol app:

Not to my knowledge, I have no idea how Home Assistant gets the ink values (does it use the Canon Cloud Printing Center to get the ink levels?). Does the Canon PRINT mobile app show the ink levels?

I can’t find in the Android Canon PRINT mobile app any ink levels.

Home Assistant does not seem to have an app for Canon printers. Below are the technical settings of Home Assistant Internet Printing Protocol app. Does that make any sense?:

  "integration_manifest": {
    "domain": "ipp",
    "name": "Internet Printing Protocol (IPP)",
    "codeowners": [
      "ctalkington"
    ],
    "config_flow": true,
    "documentation": "https://www.home-assistant.io/integrations/ipp",
    "integration_type": "device",
    "iot_class": "local_polling",
    "loggers": [
      "deepmerge",
      "pyipp"
    ],
    "requirements": [
      "pyipp==0.17.0"
    ],
    "zeroconf": [
      "_ipps._tcp.local.",
      "_ipp._tcp.local."
    ],
    "is_built_in": true,
    "overwrites_built_in": false
  },
  "setup_times": {
    "null": {
      "setup": 2.0441999993181525e-05
    },
    "01KBMKGR513X9M13QBXSGWMEMV": {
      "wait_import_platforms": -2.7679892660000007,
      "config_entry_setup": 2.9656283390000056
    }
  },
  "data": {
    "entry": {
      "data": {
        "base_path": "/ipp/print",
        "host": "192.168.178.38",
        "port": 631,
        "ssl": false,
        "uuid": null,
        "verify_ssl": false
      },
      "unique_id": null
    },
    "data": {
      "info": {
        "name": "Canon iP7200 series",
        "printer_name": "iP7200 series",
        "printer_uri_supported": [
          "ipp://192.168.178.38/ipp/print"
        ],
        "uptime": 98933,
        "command_set": "BJL,BJRaster3,BSCCe,NCCe,IVEC,IVECPLI,URF",
        "location": "",
        "manufacturer": "Canon",
        "model": "iP7200 series",
        "printer_info": "Canon iP7200 series",
        "serial": null,
        "uuid": null,
        "version": "2.0",
        "more_info": "http://192.168.178.38/mainmenu.html"
      },
      "state": {
        "printer_state": "idle",
        "reasons": null,
        "message": null
      },
      "markers": [
        {
          "marker_id": 1,
          "marker_type": "inkCartridge",
          "name": "Black(BK)",
          "color": "#2C2C2C",
          "level": 40,
          "low_level": 15,
          "high_level": 100
        },
        {
          "marker_id": 3,
          "marker_type": "inkCartridge",
          "name": "Black(PGBK)",
          "color": "#101010",
          "level": 70,
          "low_level": 15,
          "high_level": 100
        },
        {
          "marker_id": 4,
          "marker_type": "inkCartridge",
          "name": "Cyan",
          "color": "#39D2E7",
          "level": 70,
          "low_level": 15,
          "high_level": 100
        },
        {
          "marker_id": 0,
          "marker_type": "inkCartridge",
          "name": "Magenta",
          "color": "#D945DD",
          "level": 70,
          "low_level": 15,
          "high_level": 100
        },
        {
          "marker_id": 2,
          "marker_type": "inkCartridge",
          "name": "Yellow",
          "color": "#DFD31D",
          "level": 40,
          "low_level": 15,
          "high_level": 100
        }
      ],
      "uris": [
        {
          "uri": "ipp://192.168.178.38/ipp/print",
          "authentication": null,
          "security": null
        }
      ],
      "booted_at": "2026-03-16T07:28:15.947736+00:00"
    }
  }

I have no idea how it gets to that URL, it’s not existent in my case:

The result of http://192.168.178.38/mainmenu.html (192.168.178.38 = Canon ip address) is below. Would that help?

Wait, does that page actually exist on those printers as well? Can you share the page source: view-source:http://192.168.178.38/mainmenu.html

The page source as requested:

<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0, user-scalable=no">
<meta http-equiv="X-UA-Compatible" content="IE=8" >
<title>MES0001</title>
<link rel="stylesheet" type="text/css" href="./css/appress.css">
<script src="./js/appset.js" type="text/javascript" charset="UTF-8"></script>
<script src="./js/ncommon.js" type="text/javascript" charset="UTF-8"></script>
<script src="./js/model.js" type="text/javascript" charset="UTF-8"></script>
<script src="./js/messID.js" type="text/javascript" charset="UTF-8"></script>
<style type="text/css"> 
</style>
<script language="javascript">
</script>
</head>
 
<body>
<div class='MaskView' id='MaskView'>
	<div class='OverJobView' id='OverView'>
		<div class="LoadingBar">
			<img class="LoadingBar" src='./img/loader.gif' id="loadingbar">
		</div>
		<div class='OverMess' id='overmessage'></div>
	</div>
</div>
<div class="UserView Lcd_small Portrait" id="userviewArea">
	<div class="MainContainer" id="mcontainer">
		<!-- Main Page -->  
		<div class="MenuPage" id="menuArea">
			<div class="TitleBar">
				<div id="TNameMain" class="TitleName"><span class="TXT_MES0003"></span></div>
			</div>
			<div class="ContentArea">
				<!-- Main Menu -->  
				<div class="MenuItem" id="MList0">
					<div class="ListText"><span class="TXT_MES0004"></span></div>
					<!--<div class="ListImg"><img src="SMBPrefs.gif" /></div>-->
				</div>
				<div class="MenuItem" id="MList1">
					<div class="ListText"><span class="TXT_MES0005"></span></div>
					<!--<div class="ListImg"><img src="Stumbler.gif" /></div>-->
				</div>
				<div class="MenuItem" id="MList2">
					<div class="ListText"><span class="TXT_MES0006"></span></div>
					<!--<div class="ListImg"><img src="iTunes.gif" /></div>-->
				</div>
				<div>
					<a href="index.html" class="NetConfig" id="NetConfig">Network Configuration</a>
				</div>						
			</div>
		</div>
		<div class="ContentPage" id="contentArea">
			<div class="ContentFix">
				<div class="SubContainer SlideNum_1" id="scontainer0">

					<!-- Sub Page -->  
					<div class="SubPage">
						<div class="TitleBar">
							<div id="TLbtn00" class="TitleLeft LRBtn"></div>
							<div id="TName00" class="TitleName"></div>
							<div id="TRbtn00" class="TitleRight LRBtn"></div>
						</div>
						<div class="ContentArea" id="ConAreaSub00">
							<div class="PageContent">
								<div class="ItemArea">
									<div><span class="TXT_MES0010"></span> <span class="TXT_MES0066"></span></div>
									<input type="text" id="bnjName" class="InputText" maxlength="48">
								</div>
								<div class="ItemArea">
									<div><span class="TXT_MES0011"></span> <span class="TXT_MES0067"></span></div>
									<input type="text" id="bnjNote" class="InputText" maxlength="15">
								</div>
								<div class="ItemArea">
									<div><span class="TXT_MES0012"></span></div>
                                    <div class="ItemAreaSub">
                                       						<div><span class="TXT_MES0013"></span>:</div>
                                       						<div class="NS">
                                       							<div class="Radio">
                                       								<input type="radio" name="geo_loc1_ns" id="geo_loc1_ns_1"><label for="geo_loc1_ns_1">N</label>
                                        							<input type="radio" name="geo_loc1_ns" id="geo_loc1_ns_2"><label for="geo_loc1_ns_2">S</label>
                                        						</div>
                                        						<div class="One">
                                        							<input type="text" id="geo_loc1_time" class="InputTextsGeo1" maxlength="2"><span class="SuperText">&#176;</span>
                                        							<input type="text" id="geo_loc1_min" class="InputTextsGeo1" maxlength="2"><span class="SuperText">&#8242;</span>
                                        							<input type="text" id="geo_loc1_sec1" class="InputTextsGeo1" maxlength="2"><span class="SubText">&#183;</span>
                                        							<input type="text" id="geo_loc1_sec2" class="InputTextsGeo2" maxlength="3"><span class="SuperText">&#8243;</span>
                                        						</div>
                                        					</div>
                                    </div>
                                    <div class="ItemAreaSub">
                                        					<div><span class="TXT_MES0014"></span>:</div>
		                                        			<div class="EW">
		                                        				<div class="Radio">
		                                        					<input type="radio" name="geo_loc2_ew" id="geo_loc1_ew_1"><label for="geo_loc1_ew_1">E</label>
		                                        					<input type="radio" name="geo_loc2_ew" id="geo_loc1_ew_2"><label for="geo_loc1_ew_2">W</label>
		                                        				</div>
		                                        				<div class="One">
		                                        					<input type="text" id="geo_loc2_time" class="InputTextsGeo2"maxlength="3"><span class="SuperText">&#176;</span>
		                                        					<input type="text" id="geo_loc2_min" class="InputTextsGeo1"maxlength="2"><span class="SuperText">&#8242;</span>
		                                        					<input type="text" id="geo_loc2_sec1" class="InputTextsGeo1"maxlength="2"><span class="SubText">&#183;</span>
		                                        					<input type="text" id="geo_loc2_sec2" class="InputTextsGeo2"maxlength="3"><span class="SuperText">&#8243;</span>
		                                        				</div>
		                                        			</div>
                                    </div>
									<div class="ItemAreaSub">
										<div><span class="TXT_MES0022"></span>(m) :</div>
										<input type="text" id="geo_loc3" class="InputTexts" maxlength="6">
									</div>
								</div>
<!--								<div class="ItemArea OneLine">-->
								<div class="ItemArea">
									<div><span class="TXT_MES0015"></span></div>
									<div class="ItemAreaSub">
										<input type="checkbox" id="setAAP">
									</div>
<!--
									<div class="ItemAreaSub ToggleButtonArea">
										<input type="checkbox" class="ToggleButton" id="setAAP"><label for="setAAP" class="ToggleButtonLabel"><span class="TXT_MES0016"></span><span class="TXT_MES0116"></span></label>
									</div>
-->
								</div>

						        <div id="SendBtn0" class="PrmBtn SendBtn"><span class="TXT_MES0009"></span></div>

								<div id="pageend00"></div>
							</div>
						</div>
					</div>
				  
				</div>


				<div class="SubContainer SlideNum_3" id="scontainer1">

					<!-- Sub Page -->  
					<div class="SubPage">
						<div class="TitleBar">
							<div id="TLbtn10" class="TitleLeft LRBtn"></div>
							<div id="TName10" class="TitleName"></div>
							<div id="TRbtn10" class="TitleRight LRBtn"></div>
						</div>
						<div class="ContentArea" id="ConAreaSub10">
							<!-- Sub1 Menu -->  
							<div class="PageContent">
<!--
								<div class="ItemArea">
									<div><span class="TXT_MES0017"></span></div>
									<select class="InputText" id="papersize">
										<option class="TXT_MES0023" value="0"></option>
										<option class="TXT_MES0024" value="1"></option>
										<option class="TXT_MES0025" value="2"></option>
										<option class="TXT_MES0026" value="3"></option>
										<option class="TXT_MES0027" value="4"></option>
										<option class="TXT_MES0028" value="5"></option>
										<option class="TXT_MES0029" value="6"></option>
									</select>
								</div>
								<div class="ItemArea">
									<div><span class="TXT_MES0030"></span></div>
									<select class="InputText" id="papertype">
										<option class="TXT_MES0031" value="0"></option>
										<option class="TXT_MES0032" value="1"></option>
										<option class="TXT_MES0033" value="2"></option>
										<option class="TXT_MES0034" value="3"></option>
										<option class="TXT_MES0035" value="4"></option>
										<option class="TXT_MES0036" value="5"></option>
										<option class="TXT_MES0037" value="6"></option>
									</select>
								</div>
-->

								<div class="ItemArea">
									<!--<div><span class="TXT_MES0005"></span></div>-->
								</div>

								<div id="SList10" class="ListItem">
									<div class="ListTexts"><span id="trayname0"></span></div>
									<div class="ListSubText"><span class="TXT_MES0017"></span>  :  <span id="refer100"></span></div>
									<div class="ListSubText"><span class="TXT_MES0030"></span>  :  <span id="refer101"></span></div>
								</div>
								<div id="SList11" class="ListItem">
									<div class="ListTexts"><span id="trayname1"></span></div>
									<div class="ListSubText"><span class="TXT_MES0017"></span>  :  <span id="refer110"></span></div>
									<div class="ListSubText"><span class="TXT_MES0030"></span>  :  <span id="refer111"></span></div>
<!--
									<div class="ListSubText"><span id="refer110"></span>  /  <span id="refer111"></span></div>
-->
								 </div>
								<div id="pageend10"></div>
							</div>
					   </div>
					</div>
					 <!-- SubSub Page -->  
					<div class="SubPage">
						<div class="TitleBar">
							<div id="TLbtn11" class="TitleLeft LRBtn"></div>
							<div id="TName11" class="TitleName"></div>
							<div id="TRbtn11" class="TitleRight LRBtn"></div>
						</div>
						<div class="ContentArea" id="ConAreaSub11">
							<!-- Sub0 Menu -->  
							<div class="PageContent">
								<div class="ItemArea">
<!--									<div><span class="TXT_MES0017"></span></div>-->
									<div class="ListArea">
										<div id="SLItem100" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0050"></span></div>
										</div>
										<div id="SLItem101" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0051"></span></div>
										</div>
										<div id="SLItem102" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0052"></span></div>
										</div>
										<div id="SLItem103" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0053"></span></div>
										</div>
										<div id="SLItem104" class="LItemChk CheckOn">
											<div class="ListTextSel"><span class="TXT_MES0054"></span></div>
										</div>
										<div id="SLItem105" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0055"></span></div>
										</div>
										<div id="SLItem106" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0056"></span></div>
										</div>
										<div id="SLItem107" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0057"></span></div>
										</div>
										<div id="SLItem108" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0058"></span></div>
										</div>
										<div id="SLItem109" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0059"></span></div>
										</div>
										<div id="SLItem10A" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0060"></span></div>
										</div>
										<div id="SLItem10B" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0061"></span></div>
										</div>
										<div id="SLItem10C" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0062"></span></div>
										</div>
										<div id="SLItem10D" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0063"></span></div>
										</div>
									</div>
								</div>
								<div id="pageend11"></div>
							</div>
						</div>
					</div>
					 <!-- SubSub Page -->  
					<div class="SubPage">
						<div class="TitleBar">
							<div id="TLbtn12" class="TitleLeft LRBtn"></div>
							<div id="TName12" class="TitleName"></div>
							<div id="TRbtn12" class="TitleRight LRBtn"></div>
						</div>
						<div class="ContentArea" id="ConAreaSub12">
							<!-- Sub1 Menu -->  
							<div class="PageContent">
								<div class="ItemArea">
									<div><span class="TXT_MES0017"></span></div> 
<!--									<div class="ItemAreaSub"><span class="ListSelectedItem TXT_MES0026" id="selected110"></span></div>  -->
									<div class="ItemAreaSub"><span class="ListSelectedItem" id="selected110"></span></div>
								</div>

								<div class="space"> </div>
								
								<div class="ItemArea">
									<div><span class="TXT_MES0030"></span></div>
									<div class="ListArea">
										<div id="SLItem110" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0031"></span></div>
										</div>
										<div id="SLItem111" class="LItemChk">
											<div class="ListTextSel"><span class="TXT_MES0032"></span></div>
										</div>
										<div id="SLItem112" class="LItemChk CheckOn">
											<div class="ListTextSel"><span class="TXT_MES0033"></span></div>
										</div>
									</div>
								</div>

								<div id="SendBtn1" class="PrmBtn SendBtn"><span class="TXT_MES0009"></span></div>

							<div id="pageend12"></div>
			
							</div>
						</div>
					</div>
					 <!-- SubSub Page -->  

				</div>
				
				<div class="SubContainer SlideNum_1" id="scontainer2">
					<!-- Sub Page -->  
					<div class="SubPage">
						<div class="TitleBar">
							<div id="TLbtn20" class="TitleLeft LRBtn"></div>
							<div id="TName20" class="TitleName"></div>

							<div id="TRbtn20" class="TitleRight LRBtn"></div>
<!--							<div id="reloadbtn2" class="TitleRight ReloadBtn"></div> -->
						</div>
						<div class="ContentArea" id="ConAreaSub20">
							<!-- Sub2 Menu -->  
							<div class="PageContent">
								<div class="ItemArea">
									<div><span class="TXT_MES0018"></span></div>
									<div class="ListArea InkBack">



										<div class="InkPattern" id="inktank0">
											<div class="InkMess"></div>
											<div class="InkArea"><div class="InkBar"></div></div>
										</div>
										<div class="InkPattern" id="inktank1">
											<div class="InkMess"></div>
											<div class="InkArea"><div class="InkBar"></div></div>
										</div>
										<div class="InkPattern" id="inktank2">
											<div class="InkMess"></div>
											<div class="InkArea"><div class="InkBar"></div></div>
										</div>
										<div class="InkPattern" id="inktank3">
											<div class="InkMess"></div>
											<div class="InkArea"><div class="InkBar"></div></div>
										</div>
										<div class="InkPattern" id="inktank4">
											<div class="InkMess"></div>
											<div class="InkArea"><div class="InkBar"></div></div>
										</div>
										<div class="InkPattern" id="inktank5">
											<div class="InkMess"></div>
											<div class="InkArea"><div class="InkBar"></div></div>
										</div>
										<div class="InkPattern" id="inktank6">
											<div class="InkMess"></div>
											<div class="InkArea"><div class="InkBar"></div></div>
										</div>



									</div>
								</div>
								<div id="pageend20"></div>
							</div>
					   </div>
					</div>
				</div>
			</div>
		</div>
	</div>


</div>
 
</body>
</html>

Using F12 on http://192.168.178.38/mainmenu.html shows this (color and level (see red arrows)):

Okay I will add support for it now. I think we can extract those values with regex.