Epson Printer Configuration tool
Find a file
2023-08-06 23:10:26 +02:00
.github/workflows Add code python-syntax-checker and other github actions 2023-07-27 05:17:05 +02:00
.gitignore Initial commit 2023-07-24 14:37:10 +02:00
epson_print_conf.py Refinements 2023-08-06 23:10:26 +02:00
LICENSE Initial commit 2023-07-24 14:37:10 +02:00
README.md Refinements 2023-08-06 17:34:30 +02:00

epson_print_conf

Epson Printer Configuration tool via SNMP (TCP/IP)

Features

  • Access the Epson printer via SNMP (TCP/IP; printer connected over Wi-Fi)
  • Print the advanced status of the printer, with the possibility to restrict the query to specific information
  • Other inspection features:
    • Read and write EEPROM addresses
    • Dump a set of EEPROM addresses
    • Reset ink waste
    • Other admin stuffs and debug options
  • Command line tool (no GUI)
  • Python API interface

The software also provides a configurable printer dictionary, which can be easily extended.

Installation

git clone https://github.com/Ircama/epson_print_conf
pip3 install pyasn1==0.4.8
pip3 install git+https://github.com/etingof/pysnmp.git
cd epson_print_conf

Notes (at the time of writing):

This program exploits pysnmp, with related documentation.

It is tested with Ubuntu / Windows Subsystem for Linux, Windows.

Usage

usage: epson_print_conf.py [-h] -m MODEL -a HOSTNAME [-i] [-q QUERY] [--reset_waste_ink]
                           [--detect-key] [-d] [-e DUMP_EEPROM DUMP_EEPROM] [--dry-run]
                           [--write-first-ti-received-time YEAR MONTH DAY] [-R READ_EEPROM]
                           [-W WRITE_EEPROM] [-S WS_TO_STRING] [-t TIMEOUT] [-r RETRIES]
                           [-c CONFIG_FILE]

optional arguments:
  -h, --help            show this help message and exit
  -m MODEL, --model MODEL
                        Printer model. Example: -m XP-205 (use ? to print all supported models)
  -a HOSTNAME, --address HOSTNAME
                        Printer host name or IP address. (Example: -m 192.168.1.87)
  -i, --info            Print all available information and statistics (default option)
  -q QUERY, --query QUERY
                        Print specific information. (Use ? to list all available queries)
  --reset_waste_ink     Reset all waste ink levels to 0
  --detect-key          Detect the read_key via brute force
  -d, --debug           Print debug information
  -e DUMP_EEPROM DUMP_EEPROM, --eeprom-dump DUMP_EEPROM DUMP_EEPROM
                        Dump EEPROM (arguments: start, stop)
  --dry-run             Dry-run change operations
  --write-first-ti-received-time YEAR MONTH DAY
                        Change the first TI received time
  -R READ_EEPROM, --read-eeprom READ_EEPROM
                        Read the values of a list of printer EEPROM addreses. Format is: address [,
                        ...]
  -W WRITE_EEPROM, --write-eeprom WRITE_EEPROM
                        Write related values to a list of printer EEPROM addresses. Format is:
                        address: value [, ...]
  -S WS_TO_STRING, --write-sequence-to-string WS_TO_STRING
                        Convert write sequence of numbers to string.
  -t TIMEOUT, --timeout TIMEOUT
                        SNMP GET timeout (floating point argument)
  -r RETRIES, --retries RETRIES
                        SNMP GET retries (floating point argument)
  -c CONFIG_FILE, --config CONFIG_FILE
                        read a configuration file including the full log dump of a previous operation
                        with '-d' flag (instead of accessing the printer via SNMP)

Epson Printer Configuration via SNMP (TCP/IP)

Examples:

# Print informations (-i is not needed):
python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 -i

# Reset all waste ink levels to 0:
python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 --reset_waste_ink

# Change the first TI received time to 31 December 2016:
python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 --write-first-ti-received-time 2016 12 31

# Detect the read_key via brute force:
python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 --detect-key

# Only print status information:
python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 -q printer_status

# Only print SNMP 'MAC Address' name:
python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 -q 'MAC Address'

# Only print SNMP 'Lang 5' name:
python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 -q 'Lang 5'

# Write value 1 to the EEPROM address 173 and value 0xDE to the EEPROM address 172:
python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 -W 173:1,172:0xde

# Read EEPROM address 173 and EEPROM address 172:
python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 -R 173,172

API Interface

import epson_print_conf
import logging

logging.basicConfig(level=logging.DEBUG, format="%(message)s")  # if logging is needed

printer = epson_print_conf.EpsonPrinter(
    printer_model="XP-205", hostname="192.168.1.87")

if not printer.parm:
    print("Unknown printer")
    quit()

stats = printer.stats()
print("stats:", stats)

ret = printer.get_snmp_info()
print("get_snmp_info:", ret)
ret = printer.get_serial_number()
print("get_serial_number:", ret)
ret = printer.get_firmware_version()
print("get_firmware_version:", ret)
ret = printer.get_printer_head_id()
print("get_printer_head_id:", ret)
ret = printer.get_cartridges()
print("get_cartridges:", ret)
ret = printer.get_printer_status()
print("get_printer_status:", ret)
ret = printer.get_ink_replacement_counters()
print("get_ink_replacement_counters:", ret)
ret = printer.get_waste_ink_levels()
print("get_waste_ink_levels:", ret)
ret = printer.get_last_printer_fatal_errors()
print("get_last_printer_fatal_errors:", ret)
ret = printer.get_stats()
print("get_stats:", ret)

printer.reset_waste_ink_levels()
printer.brute_force_read_key()
printer.write_first_ti_received_time(2000, 1, 2)

Exceptions

TimeoutError
ValueError

(And pysnmp exceptions.)

Output example

Example of advanced printer status with an XP-205 printer:

{'cartridge_information': [{'id': '0D081F172A0D04004C',
                            'ink_color': [1811, 'Black'],
                            'ink_quantity': 89,
                            'production_month': 8,
                            'production_year': 2013},
                           {'id': '15031D06230D080093',
                            'ink_color': [1814, 'Yellow'],
                            'ink_quantity': 77,
                            'production_month': 3,
                            'production_year': 2021},
                           {'id': '150317111905020047',
                            'ink_color': [1813, 'Magenta'],
                            'ink_quantity': 59,
                            'production_month': 3,
                            'production_year': 2021},
                           {'id': '14091716080501001D',
                            'ink_color': [1812, 'Cyan'],
                            'ink_quantity': 40,
                            'production_month': 9,
                            'production_year': 2020}],
 'cartridges': ['18XL', '18XL', '18XL', '18XL'],
 'firmware_version': 'RF11I5 11 May 2018',
 'ink_replacement_counters': {('Black', '1B', 1),
                              ('Black', '1L', 19),
                              ('Black', '1S', 2),
                              ('Cyan', '1B', 1),
                              ('Cyan', '1L', 8),
                              ('Cyan', '1S', 1),
                              ('Magenta', '1B', 1),
                              ('Magenta', '1L', 6),
                              ('Magenta', '1S', 1),
                              ('Yellow', '1B', 1),
                              ('Yellow', '1L', 10),
                              ('Yellow', '1S', 1)},
 'last_printer_fatal_errors': ['08', 'F1', 'F1', 'F1', 'F1', '10'],
 'printer_head_id': '...',
 'printer_status': {'cancel_code': 'No request',
                    'ink_level': [(1, 0, 'Black', 'Black', 89),
                                  (5, 3, 'Yellow', 'Yellow', 77),
                                  (4, 2, 'Magenta', 'Magenta', 59),
                                  (3, 1, 'Cyan', 'Cyan', 40)],
                    'jobname': 'Not defined',
                    'loading_path': 'fixed',
                    'maintenance_box_1': 'not full (0)',
                    'maintenance_box_2': 'not full (0)',
                    'maintenance_box_reset_count_1': 0,
                    'maintenance_box_reset_count_2': 0,
                    'paper_path': 'Cut sheet (Rear)',
                    'ready': True,
                    'replace_cartridge': '00000001',
                    'status': (4, 'Idle'),
                    'unknown': [('0x24', b'\x0f\x0f')]},
 'serial_number': '...',
 'snmp_info': {'Descr': 'EPSON Built-in 11b/g/n Print Server',
               'EEPS2 firmware version': 'EEPS2 Hard Ver.1.00 Firm Ver.0.50',
               'Emulation 1': 'unknown',
               'Emulation 2': 'ESC/P2',
               'Emulation 3': 'BDC',
               'Emulation 4': 'other',
               'Emulation 5': 'other',
               'Epson Model': 'XP-205 207 Series',
               'IP Address': '192.168.1.87',
               'Lang 1': 'unknown',
               'Lang 2': 'ESCPL2',
               'Lang 3': 'BDC',
               'Lang 4': 'D4',
               'Lang 5': 'ESCPR1',
               'MAC Address': '...',
               'Model': 'EPSON XP-205 207 Series',
               'Model short': 'XP-205 207 Series',
               'Name': '....',
               'Print counter': '0',
               'Print input': 'Auto sheet feeder',
               'URL': 'http://192.168.1.87:631/Epson_IPP_Printer',
               'URL_path': 'Epson_IPP_Printer',
               'UpTime': '00:57:48',
               'WiFi': '....',
               'device_id': 'MFG:EPSON;CMD:ESCPL2,BDC,D4,D4PX,ESCPR1;MDL:XP-205 '
                            '207 Series;CLS:PRINTER;DES:EPSON XP-205 207 '
                            'Series;CID:EpsonRGB;FID:FXN,DPN,WFA,ETN,AFN,DAN;RID:40;',
               'hex_data': 'A4 EE 57 DE FD 03'},
 'stats': {'First TI received time': '...',
           'Ink replacement cleaning counter': 78,
           'Maintenance required level of 1st waste ink counter': 94,
           'Maintenance required level of 2nd waste ink counter': 94,
           'Manual cleaning counter': 129,
           'Timer cleaning counter': 4,
           'Total print page counter': 11504,
           'Total print pass counter': 510136,
           'Total scan counter': 4967},
 'waste_ink_levels': {'borderless_waste': 4.63, 'main_waste': 90.45}}

Resources

snmpget (Linux)

Installation:

sudo apt-get install snmp

Usage:

# Read address 173.0
snmpget -v1 -d -c public 192.168.1.87 1.3.6.1.4.1.1248.1.2.2.44.1.1.2.1.124.124.7.0.25.7.65.190.160.173.0

# Read address 172.0
snmpget -v1 -d -c public 192.168.1.87 1.3.6.1.4.1.1248.1.2.2.44.1.1.2.1.124.124.7.0.25.7.65.190.160.172.0

# Write 25 to address 173.0
snmpget -v1 -d -c public 192.168.1.87 1.3.6.1.4.1.1248.1.2.2.44.1.1.2.1.124.124.16.0.25.7.66.189.33.173.0.25.88.98.108.98.117.112.99.106

# Write 153 to address 172.0
snmpget -v1 -d -c public 192.168.1.87 1.3.6.1.4.1.1248.1.2.2.44.1.1.2.1.124.124.16.0.25.7.66.189.33.172.0.153.88.98.108.98.117.112.99.106

References

epson-printer-snmp: https://github.com/Zedeldi/epson-printer-snmp (and https://github.com/Zedeldi/epson-printer-snmp/issues/1)

ReInkPy: https://codeberg.org/atufi/reinkpy/

ReInk: https://github.com/lion-simba/reink (especially https://github.com/lion-simba/reink/issues/1)

reink-net: https://github.com/gentu/reink-net

epson-l4160-ink-waste-resetter: https://github.com/nicootto/epson-l4160-ink-waste-resetter

epson-l3160-ink-waste-resetter: https://github.com/k3dt/epson-l3160-ink-waste-resetter

emanage x900: https://github.com/abrasive/x900-otsakupuhastajat/

GUI resources

epson_print_conf is a Python command line tool, including API.

The following GUIs are available.

Use at your risk.