HA Printer Card: a printer that looks like a printer, with a sheet that actually comes out

My printer in Home Assistant was four percentages and one English word. It worked, it was ugly, and I still had to walk over to the machine to know whether it was doing anything.

So I drew the printer. While it prints, a sheet slides out on a loop and fades as if someone took it. A paper jam leaves it stuck half way with a warning triangle. Toners are drawn in their own colour instead of grey bars.

Four machines, each ejecting the page where it really does: an all in one into the recess under its scanner, an inkjet from its rear tray out the front, a laser onto its roof, an office multifunction into the bay above its drawers.

The drawing was not the hard part. Every integration names its sensors differently, so the card does not look for a name: it starts from the printer’s device and reads what is there. It then sorts what it finds into inks on one side and wear parts on the other (drum, fuser, belt, feed kits, maintenance box), each with its own alert.

Two things I cared about:

  • The low threshold is 20 %, not the marker_low_level printers advertise. They say 3 %, which is the point where pages come out streaked.
  • If you have a smart plug, printing_watts flips the card to printing as soon as the draw goes up. The ipp integration polls every 60 seconds, so a one page job starts and finishes between two polls and you never see it.

The rest: page counters per function (printed, scanned, copied), a visual editor for every option, a compact mode, 13 languages, prefers-reduced-motion honoured. No dependency, no build step, 266 tests in CI.

Verified on real hardware with ipp, HP Printers and SNMP Printer. Brother, SyncThru, Epson WorkForce and Dell are covered from their documented sensors, but I do not own the hardware, so feedback there is especially welcome.

Custom repository for now, the HACS store PR is filed.

5 Likes


Not bad :ok_hand:, few things come to mind:

  • make clickable entities so it can show history
  • url isn’t fetched somehow. On device page it has an URL, not sure how that exposes
  • state on printer is ’ idle’ , how does it map to ready on the card?

Thanks, all three are fair.

Clickable entities. Done. Every value now opens its entity: cartridges in all three layouts, wear parts, page counters, the name and state block, and the socket corner. I made it a toggle (more_info, on by default) because I share your instinct that a toner dropping in steps of ten has little history worth looking at, but you are right that a value which does not respond to a tap is a surprise in Home Assistant.

The URL. That one was a real miss on my side. I was deriving the address from the IPP uri_supported attribute and completely ignoring the configuration_url in the device registry, which is exactly what Home Assistant shows on the device page. It is now read first, with uri_supported kept as the fallback since the IPP integration is one of the few that sets no configuration_url. web_url: auto should just work for you now.

idle vs ready. The card reads every integration’s state through one keyword table and shows a single label, which is what lets it work with ipp, Brother, SyncThru, HP, Epson, SNMP and Dell without any configuration. idle, ready, online, normal and standby all land on Ready, and so do their translations, because a Brother says one thing and a Samsung another for the same machine doing the same nothing.

Fair criticism though, since the mapping was invisible. So: the raw state is now the tooltip on the state line, tapping that line opens the entity, and both READMEs carry the full table. state_map overrides any of it if you want your own wording.

All three are in the latest release. Thanks for taking the time to look properly.

1 Like