Tech Tuesday – Brother Printers & SNMP
March 2, 2021 4 Comments Productivity TSmidwest Admin

For anyone who likes peeking under the covers, Tech Tuesday is for you.

If you’re a small business owner or local government official and have questions or need assistance with any of your technology needs, or have more questions about TSmidwest’s printPilot services, please e-mail info@tsmidwest.com.

This post is all about printers…Brother printers, and more specifically, monitoring them. There’s no shortage of opinions on anything in the tech world, but let’s face it, Brother printers fill a pretty broad swath of needs for a lot of small businesses. Brother has a fairly diverse product line including both black & white as well as color devices, laser and inkjet printing, single and multi-function, duplexing and non-duplexing, networked…the list goes on. Overall, Brother printers are fairly reliable and inexpensive machines. Keep in mind, though, Brother’s consumable costs tend to be on the high side, so if you have anything beyond a fairly low print volume, it might be better to look for a solution with lower consumables costs.

If you’re familiar with the network world, you’ve probably heard of the Simple Network Management Protocol, or SNMP. In it’s simplest form, SNMP allows a device on a network to query a second device on the network about some operating data from that second device. This operating data is identified by Object Identifiers, or OID’s. OID’s are hierarchical strings of decimal notated numbers (which have accompanying labels), and when you request a specific OID endpoint in the hierarchy, the data should be provided to you.

Printers have a standard, defined OID hierarchy so they can be monitored, generally for activity, errors and consumables status. As an example, on most laser printers that support SNMP monitoring and adhere to the standards, OID endpoint .1.3.6.1.2.1.43.11.1.1.9.1.1 (prtMarkerSuppliesLevel) will generally hold the value of the remaining life of the black toner cartridge in relation to the OID endpoint .1.3.6.1.2.1.43.11.1.1.8.1.1 (prtMarkerSuppliesMaxCapacity). In this scenario, if the value returned by the level endpoint is 92 and the value returned by the associated max capacity endpoint is 100, then there is 92/100, or 92%, of life remaining in that object, the black toner cartridge in this case.

So…what does this have to do with Brother printers? Well, for some reason that I can’t figure out (although I do have suspicions), Brother has chosen to go a different route and not put any meaningful data in most OID endpoints defined by the hierarchy standard, and instead, encode it in their private location. Just as there’s a standard location for print info, vendors can request private locations which they can include their own data. For Brother, their private hierarchy is .1.3.6.1.4.1.2435. Inside Brother’s private hierarchy is a lot of data, some repetitive, some not…but we’re specifically interested in three OID endpoints:

brInfoMaintenance: .1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.8.0

brInfoCounter: .1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.10.0

brInfoNextCare: .1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.11.0

A pattern emerges in the data for these three endpoints that allows for third party monitoring, such as TSmidwest’s printPilot service, that can monitor machine health and consumables status, as well as track usage for contract billing and auto-replenishment of consumables. There are other interesting OID endpoints in Brother’s private hierarchy; however, these three were able to provide the data I needed.

I’m going to focus on one of these specific endpoints, and one particular value in the endpoint, for example purposes. First, though…what does the data look like? If you’re familiar with SNMP, then you’re probably familiar with the snmpwalk utility. The data returned for the brInfoMaintance endpoint looks like this for a MFC-9330CDW:

76 01 04 00 00 00 01 77 01 04 00 00 00 01 78 01 04 00 00 00 01 7F 01 04 00 00 00 01 68 01 04 00 00 00 01 55 01 04 00 00 00 01 31 01 04 00 00 00 01 32 01 04 00 00 00 01 33 01 04 00 00 00 01 34 01 04 00 00 00 01 70 01 04 00 00 16 A8 82 01 04 00 00 00 3C 71 01 04 00 00 15 18 83 01 04 00 00 00 3C 72 01 04 00 00 15 18 84 01 04 00 00 00 3C 6F 01 04 00 00 1B 58 81 01 04 00 00 00 46 79 01 04 00 00 1F 40 7A 01 04 00 00 1F 40 7B 01 04 00 00 1F 40 80 01 04 00 00 1F 40 69 01 04 00 00 23 8C 73 01 04 00 00 0B DB 74 01 04 00 00 0B DB 75 01 04 00 00 0B DB 7E 01 04 00 00 0B DB 54 01 04 00 00 00 01 35 01 04 00 00 00 01 6A 01 04 00 00 24 B8 6D 01 04 00 00 25 80 FF

If you stare at that long enough and don’t develop a migraine, then you’ll notice a pattern emerging. The pattern consists of a number of a string of 7 byte values terminated by a 0xFF character. Each 7 byte value consists of an identifier (first byte), 0x01, 0x04 and then four bytes of (presumably) data. On the machines I have to test with, I could only confirm the last three bytes contain data.

Let’s look a little closer at some specific values, particularly those with identifiers of 0x81, 0x82, 0x83 and 0x84, as they represent the percentage of black, cyan, magenta and yellow toner life remaining, respectively.

81 01 04 00 00 00 46: 0x81 is black toner, 0x46 is the life remaining, converted to decimal, that’s 70.

82 01 04 00 00 00 3C: 0x82 is cyan toner, 0x3c is the life remaining, converted to decimal, that’s 60.

83 01 04 00 00 00 3C: 0x83 is magneta toner, 0x3c is the life remaining, converted to decimal, that’s 60.

84 01 04 00 00 00 3C: 0x84 is yellow toner, 0x3c is the life remaining, converted to decimal, that’s 60.

And that’s all there is to it. Different values do have some different encoding / conversion mechanisms. As an example, the 0x69 identifier corresponds to the percentage of the belt unit life remaining (69 01 04 00 00 23 8C). In this case, the last two bytes are converted to decimal (0x238c), which is 9100, convert this to a two-place number by dividing by 100, and you find the belt unit has 91% life remaining.

There are some variety in the data made available for different devices; however, after reviewing the six Brother devices I have immediate access to, there were some values fairly consistently provided among them (applicability varies by model and function):

IdentifierRepresented Value
0x00Page Counter Total (3 byte counter)
0x01Page Counter Black & White (3 byte counter)
0x02Page Counter Color (3 byte counter)
0x69Belt Unit Life Remaining (2 byte val%/100)
0x6AFuser Unit Life Remaining (2 byte val%/100)
0x73Fuser Unit Pages Remaining (2 byte counter)
0x77Paper Feeding Kit Pages Remaining (2 byte counter)
0x79
0x7A
0X7B
0x80
Drum Unit(s) Life Remaining (2 byte val%/100)
0x81
0x82
0x83
0x84
Toner Life Remaining (1 byte val%)
0x88Belt Unit Pages Remaining (2 byte counter)
0xA4
0xA5
0xA6
0xA7
Drum Unit(s) Pages Remaining (2 byte counter)
Brother Printer SNMP Encoded Value Identifiers

While it’s not as nice as most other printers that do adhere to standard SNMP OID endpoint definitions, it is possible to monitor and report on Brother devices as well. And even better, understanding how the data is encoded will allow most advanced NMS (such as Zabbix, Libre, Nagios, etc…) should be able to decode data within their existing capabilities.

Have questions, or have you identified other encoded value identifiers from your devices? Post a comment to share…

Tags
About The Author
Leave Comment
  1. 1

    Dustin

    Got your message from the SyncroMSP Users Group, I ran a walk against our in-house Brother MFC-L2750DW, and I do have questions. I’ve posted the 3 OIDs from my walk mentioned in your article, I’m curious what it is telling me.

    Name/OID: .1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.8.0; Value (OctetString): brInfoMaintenance
    0x63 01 04 00 00 00 01 41 01 04 00 00 22 C4 11 01 04 00 00 05 79 31 01 04 00 00 00 01 6F 01 04 00 00 20 6C 81 01 04 00 00 00 5A FF

    63 01 04 00 00 00 01
    41 01 04 00 00 22 C4
    11 01 04 00 00 05 79
    31 01 04 00 00 00 01
    6F 01 04 00 00 20 6C
    81 01 04 00 00 00 5A – Toner life remaining 0x5a = 90%

    Name/OID: .1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.10.0; Value (OctetString): brInfoCounter
    0x00 01 04 00 00 05 79 06 01 04 00 00 01 5E FF

    00 01 04 00 00 05 79 – Page Counter Total 0x0579 = 1401
    06 01 04 00 00 01 5E

    Name/OID: .1.3.6.1.4.1.2435.2.3.9.4.2.1.5.5.11.0; Value (OctetString): brInfoNextCare
    0x82 01 04 00 00 29 67 FF

    82 01 04 00 00 29 67 – Toner life remaining 0x2967 = 10599?

    On the Maintenance, what are the unnamed values? On InfoCounter? Why does NextCare have the same first byte at Toner life, but it’s 2 bytes of data?

    Reply
    1. 1

      Scott Wells

      There are a variety of other values that I didn’t find very important, and seemed to vary across models, so I didn’t document them.

      I did have one other device with a 0x82 value identifier in the brNextCare OID endpoint (a DCP-7065DN). I don’t know what that value is for; however, seeing that the rest of that OID endpoint has encoded values for consumables pages remaining, that would be my guess…that it’s likely number of pages remaining for something. Are there any consumables listed on the Maintenance Info with 10599 pages remaining?

      Reply
  2. 1

    saper_2

    Hi,
    You can take look at my github repo about those Brother OIDs: https://github.com/saper-2/BRN-Printer-sCounters-Info ,and you seems to be lucky to not have in those hex-strings fillers in form of ffffff

    Reply
    1. 1

      Scott Wells

      Looks like we’ve done a bit of the same reverse engineering. Looks like you’ve got a few more models confirmed that I was able to do, good work!

      Reply

Leave a reply

Your email address will not be published. Required fields are marked *