[APP][Pro] Network Printer - ink and toner levels from any network printer

Network Printer — every cartridge, in Homey.


Turn any network printer into a Homey device that tells you the ink is running out — before you find out halfway through printing.


Your printer knows exactly how much ink it has left. It just never mentions it until you are standing in front of it, and Homey has no idea the black cartridge is down to 20%.

This app reads the printer over SNMP — the protocol nearly every network printer already speaks, with nothing to install on it — and turns each cartridge into a Homey capability a Flow can act on.

:white_check_mark: There is nothing to look up: it searches your network and offers the printers that answer.


Test version

Source code :octopus:


What it does

  • :droplet: One level per cartridge, titled with the cartridge’s own name — Black Ink Cartridge 202/202XL is what you order, not supply 2
  • :printer: Any brand — everything read comes from the standard Printer-MIB, so Epson, HP, Brother, Canon, Kyocera, Lexmark, Ricoh, OKI, Xerox and Samsung all work the same way
  • :mag: It finds the printer for you — a sweep of your network, and anything that answers is offered. You can still add one by address
  • :bell: Low-supply alarm at a threshold you choose per printer. It fires as the level crosses the threshold — once — not every time the printer is read
  • :warning: Error alarm for what actually stops printing: paper jam, out of paper, open cover, missing cartridge. Low-ink warnings stay out of it, since the supply alarm already covers them
  • :page_facing_up: Status, panel message and page counter — including the text on the printer’s own screen
  • :wastebasket: Waste tanks reported as room left, so 100% always means nothing to do
  • :inbox_tray: One level per paper tray, named after the tray and the paper loaded in it — plus a paper-low alarm
  • :outbox_tray: Output tray — OK, half full or full, on printers that can sense it
  • :speech_balloon: Printer alerts — what the printer itself says is wrong, in its own words
  • :door: Cover-open alarm

Nothing is hard-coded per model

The number of consumables, their names and their colours are discovered from the printer itself. A four-cartridge office printer and a nine-cartridge photo printer both work without a line of code between them — and so does a laser, where the same table reports toner and a waste box instead of ink.


Flow cards

  • :arrow_forward: A supply runs low — carrying which one, and its level
  • :arrow_forward: The status changes, optionally to one status in particular
  • :arrow_forward: Pages have been printed, carrying how many
  • :arrow_forward: The printer reports an error
  • :heavy_check_mark: A supply is below a level (condition)
  • :arrows_counterclockwise: Read the printer now (action)

Every capability above also gets its own Flow card automatically.


Requirements

  • :house: Homey Pro — Homey Cloud and Homey Bridge cannot reach devices on your network, so they cannot reach a printer
  • :printer: SNMP left enabled on the printer — it is on by default on nearly every network printer, with the read community public
  • :pushpin: A fixed address for the printer — a changed DHCP lease is the most common reason a working printer goes quiet

Languages

  • :uk: English
  • :fr: French
  • :netherlands: Dutch

Feedback welcome :speech_balloon:

Running here against an Epson XP-6100 — five cartridges, read end to end: the sweep finds it, the levels come through with the cartridge names above, and the panel text and page counter with them.

:warning: That is one printer. The reading is standards-based rather than model-specific, so it should hold across brands — but a printer that reports its supplies oddly is exactly the thing I cannot find without you. If your levels look wrong, or your printer is not found at all, say so here: the app has a settings page that reads the printer live and shows what it sees, which usually settles it in one round trip.

Two known limits, stated plainly:

  • :x: Read-only. It reports; it does not print. HomeyPrint already does printing over IPP
  • :x: mDNS discovery does not work on every network. The app declares it, but multicast is filtered between wireless clients on many routers — mine included. The network sweep is what makes it work regardless, which is why both exist

What it looks like

Thanks for creating this handy app :+1:!

I connected my Lexmark C3326dw laser printer, which it found automatically:

  • The sensors tab has an active alarm ‘Low Consumable’. However I cannot see which consumable would be causing the alarm: all toner levels are ok as well as the toner waste bin level (which is empty = ok. The printer reports the values as either ok, half full and full). As well as the output tray is not full (though this sensor is not reported by the app). See screenshots below.
  • Is it possible to also add the ‘output tray’ as a capability? The printer either indicates: ok, half full and full as values in its configuration interface.
  • The capability icons are correctly displayed in the web app, but not in the mobile app:

Mobile app


Web app

Thanks for the app!

I’m going to use it with my Epson ET-3850, the app did find it!

Tried out of fun Maintenance: error getting file.

Thanks — all three were real, and two were my bugs. Point by point:

I cannot see which consumable would be causing the alarm

Your screenshot has it: Waste Toner Bottle, 0 %. Your printer reports that bottle as life left (100 = new); the app assumed any waste part fills up and inverted it, so a new bottle read as a full one. Fixed in v1.0.5.

Is it possible to also add the ‘output tray’ as a capability?

Done, with your three values: OK / half full / full.

The capability icons are correctly displayed in the web app, but not in the mobile app

They were outlines, and the mobile app fills paths instead of stroking them — hence the blobs. Redrawn as filled shapes.

Also in v1.0.5: paper trays, a paper-low and a cover-open alarm, and the printer’s own alert text — plus the low-supply alarm now names the consumable that tripped it, so “which one?” shouldn’t come up again.

In review with Athom now. If the bottle still shows 0 % after you update, the settings page prints each supply’s raw level and class — paste that line here.

A wish: could you kind of set the icon to gray, like an off state, when the printer is offline? I switch it of when not using it for a longer time.

Tried out of fun Maintenance: error getting file.

Real bug, thanks. The repair view was in the wrong folder, so Homey couldn’t find the file — repair views resolve from drivers/<id>/repair/, which isn’t documented anywhere and homey app validate doesn’t check, so it shipped clean and only broke when someone actually pressed the button.

Fixed and confirmed on a Homey Pro. v1.0.6 is in review now.

could you kind of set the icon to gray, like an off state, when the printer is offline?

It already does — Homey greys out a device once the app marks it unavailable. But that took three unanswered checks, which at the default 5-minute interval is a quarter of an hour of a printer that’s plainly off still looking fine.

That three is now a device setting, Show as offline after. Set it to 1 and the tile greys on the next check. In v1.0.7, in review now.

(The status capability already flipped to offline on the first missed check, so Flows were never waiting — only the tile was.)

Thanks for the quick follow-up! I checked version v1.0.6.

The consumables alarm is still on, but I assume it it triggered by the new paper tray capability: the device tile shows and alternating message Consumable low > Paper nearly empty, which is actually the case. Also the sensors tab shows that as reason for the alarm in the new capability you were referring to.

However, if I open the device tile (in the mobile app), I get an orange badge at the top of the screen indicating that the Waste Toner Bottle is low, which should not trigger a warming (it is supposed to fill up). Note that the waste bottle level is indeed reported as 0%, as you suspected.

The badge does not show the paper nearly empty message, which I would expect instead in this case.

I also made a screenshot of the raw values you were referring to:

Let me know if you want me to provide any additional information.

I tried to connect my Ricoh SP C242sf (older one, but supports snmp v1/2), but does not connect.
Not by automatic search and not by adding the IP. Using v1.0.7 of your app.
It is discoverable by Homey…
Any idea?

After an app install the printer is flagged as unavailable. Homey wants me to repair. On the repair page the okay button is missing.

Your raw-values screenshot cracked it. Thank you for that.

the waste bottle level is indeed reported as 0%

15000 / 15000 impressions · class 4 — and the bug was my inversion, not your printer. RFC 3805 defines a receptacle’s level as the remaining space, so a waste bottle already counts down as it fills, exactly like a cartridge. Inverting it turned a brand-new bottle into a full one. The inversion is gone.

The badge does not show the paper nearly empty message

Two separate faults there. The warning only ever named cartridges, never trays — fixed. And your Manual Envelope and Manual Paper at 0 % were what kept the paper alarm on: a bypass slot is empty by design, so manual feeders are now exempt. With Tray 1 full you should see no paper alarm at all.

v1.0.8 is in review. Your seven rows are now a test case, so this particular mistake can’t come back.

Getting the paper low warning because the manual feeds are (naturaly) empty. The paper tray is loaded.
Sorry was still on version 1.0.7. with 1.0.8 it’s okay

Ricoh SP C242sf … does not connect. Not by automatic search and not by adding the IP.

Your SNMP settings look right, so I went at the pairing code instead and found two faults that would both produce exactly this:

  • pairing waited 2 seconds with no retry, while normal polling waits 5 and retries. Too tight for an older agent waking up — the printer fails to pair and then polls perfectly once added.
  • if the printer answered but didn’t return one of the six identity OIDs, it was reported as not reachable. On SNMP v1 a single missing OID fails the whole request, so that shape is common. It’s now offered anyway, named after its address.

Both fixed in v1.0.8, in review now.

If it still won’t connect on v1.0.8: app settings → Test an address reports the printer’s actual error instead of a generic one. Paste that here and I’ll know which of the two it was.

On the repair page the okay button is missing.

Correct, and thank you — that one was invisible from my side. The view’s only control was a Homey navigation button, and a repair session doesn’t render the navigation bar, so the screen opened with the address fields and nothing to press. Hitting Enter in the address field still worked, which is exactly why I never noticed.

It’s a real button in the page now, so it can’t vanish with the chrome around it. v1.0.9, in review.

Getting the paper low warning because the manual feeds are (naturaly) empty. The paper tray is loaded.

Exactly right, and you’re the second person to hit it — my fault for adding the paper alarm without thinking about bypass slots. An empty manual feed is its resting state, not a shortage.

Manual feeders are now exempt from the alarm, so a loaded cassette means no warning. Fixed in v1.0.8, which is folded into v1.0.9 now in review.

Getting interesting.
Printer was of while installing 1.0.9. So it got flagged by homey as unavailable. Tried repair, the App found the now on printer but homey flags the printer still as unavailable. Have to restart the app to resolve this.

Tried repair, the App found the now on printer but homey flags the printer still as unavailable. Have to restart the app to resolve this.

Real bug, and a nastier one than it looks. Repair stored the new address but never applied it — setSettings() from code doesn’t fire onSettings(), so the device kept reading the old address, kept its failure count, and never cleared the unavailable flag. Restarting the app was the only thing that re-read the settings.

You got off lightly because your address hadn’t actually changed: it would have healed itself at the next poll, within five minutes. If the printer had genuinely moved to a new IP, it would have kept reading the old one for ever — which is the exact situation repair exists for, and the one nobody had tried.

Fixed in v1.0.10, in review. Repair now rebuilds the connection and reads straight away, so the flag clears the moment the printer answers.

You’re quick :grinning_face:.

I checked version 1.0.9. The empty paper alarm is now gone; there are no current alarms anymore. Also the waste toner bottle is now reported as 100%.

However, when I open de device tile I keep getting the orange badge (Low: Waste Toner Bottle). Somehow that message is not cleared and is displayed every time I open the device tile. Should I remove and re-pair the printer?

Another observation. I removed the default paper tray (tray 1) to check what the app would report: the percentage of Tray 1 went from 100% to ‘-’ and the Printer Message capability indicated ‘Tray 1 Missing’. Which is ok.

Then I reinserted the paper tray. The Tray 1 capability changed to 100% again. However the Printer Message capability is not cleared. It keeps saying ‘Tray 1 Missing’:

Should I remove and re-pair the printer?

No — don’t. That badge is my bug, not stale pairing data.

A Homey device warning is persistent, it survives an app restart. The cache that stops the app rewriting the same warning every five minutes started at “no warning” instead of “unknown”, so after the update the first check compared no warning against a cache that already said no warning, matched, and skipped the line that clears it. Homey went on holding the text the old version wrote, and no later check could ever disagree either — hence “every time I open the device tile”, for ever.

Fixed in v1.0.11, in review. The first check after any app start now always writes, so the badge will clear itself.

And thank you for the confirmation on the rest — bottle at 100 %, no alarms, paper alarm gone. Those three were exactly what your screenshots pinned down.