mirror of
https://github.com/Ircama/epson_print_conf.git
synced 2024-10-18 09:10:36 -04:00
Added ET-2700 Espon printer model
This commit is contained in:
parent
b0aa62f0ca
commit
adb7dc5d04
2 changed files with 111 additions and 11 deletions
77
README.md
77
README.md
|
@ -115,6 +115,83 @@ python3 epson_print_conf.py -m XP-205 -a 192.168.1.87 -R 173,172
|
||||||
|
|
||||||
Note: resetting the ink waste counter is just removing a warning; not replacing the tank will make the ink spill.
|
Note: resetting the ink waste counter is just removing a warning; not replacing the tank will make the ink spill.
|
||||||
|
|
||||||
|
## Utilities and notes
|
||||||
|
|
||||||
|
```
|
||||||
|
import epson_print_conf
|
||||||
|
import pprint
|
||||||
|
printer = epson_print_conf.EpsonPrinter()
|
||||||
|
|
||||||
|
# Decode write_key:
|
||||||
|
printer.reverse_caesar(bytes.fromhex("48 62 7B 62 6F 6A 62 2B")) # last 8 bytes
|
||||||
|
|
||||||
|
# Decode status:
|
||||||
|
pprint.pprint(printer.status_parser(bytes.fromhex("40 42 44 43 20 53 54 32 0D 0A ....")))
|
||||||
|
|
||||||
|
# Decode the level of ink waste
|
||||||
|
byte_sequence = "A4 2A"
|
||||||
|
divider = 62.06 # divider = ink_level / waste_percent
|
||||||
|
ink_level = int("".join(reversed(byte_sequence.split())), 16)
|
||||||
|
waste_percent = round(ink_level / divider, 2)
|
||||||
|
|
||||||
|
# Print the read key sequence in byte and hex formats:
|
||||||
|
printer = epson_print_conf.EpsonPrinter(model="ET-2700")
|
||||||
|
'.'.join(str(x) for x in printer.parm['read_key'])
|
||||||
|
" ".join('{0:02x}'.format(x) for x in printer.parm['read_key'])
|
||||||
|
|
||||||
|
# Print the write key sequence in byte and hex formats:
|
||||||
|
printer = epson_print_conf.EpsonPrinter(model="ET-2700")
|
||||||
|
printer.caesar(printer.parm['write_key'])
|
||||||
|
printer.caesar(printer.parm['write_key'], hex=True).upper()
|
||||||
|
|
||||||
|
# Print hex sequence of reading the value of EEPROM address 30 00:
|
||||||
|
" ".join('{0:02x}'.format(int(x)) for x in printer.eeprom_oid_read_address(oid=0x30).split(".")[15:]).upper()
|
||||||
|
|
||||||
|
# Print hex sequence of storing value 00 to EEPROM address 30 00:
|
||||||
|
" ".join('{0:02x}'.format(int(x)) for x in printer.eeprom_oid_write_address(oid=0x30, value=0x0).split(".")[15:]).upper()
|
||||||
|
|
||||||
|
# Print EEPROM write hex sequence of the raw ink waste reset:
|
||||||
|
for key, value in printer.parm["raw_waste_reset"].items():
|
||||||
|
" ".join('{0:02x}'.format(int(x)) for x in printer.eeprom_oid_write_address(oid=key, value=value).split(".")[15:]).upper()
|
||||||
|
```
|
||||||
|
|
||||||
|
### Byte sequences
|
||||||
|
|
||||||
|
Header:
|
||||||
|
|
||||||
|
```
|
||||||
|
1.3.6.1.4.1. [SNMP_OID_ENTERPRISE]
|
||||||
|
1248. [SNMP_EPSON]
|
||||||
|
1.2.2.44.1.1.2. [OID_PRV_CTRL]
|
||||||
|
1.
|
||||||
|
```
|
||||||
|
|
||||||
|
Full header sequence: `1.3.6.1.4.1.1248.1.2.2.44.1.1.2.1.`
|
||||||
|
|
||||||
|
Read EEPROM (EPSON-CTRL), after the header:
|
||||||
|
|
||||||
|
```
|
||||||
|
124.124.7.0. [7C 7C 07 00]
|
||||||
|
<READ KEY (two bytes)>
|
||||||
|
65.190.160. [41 BE A0]
|
||||||
|
<LSB EEPROM ADDRESS (one byte)>.<MSB EEPROM ADDRESS (one byte)>
|
||||||
|
```
|
||||||
|
|
||||||
|
Example: `1.3.6.1.4.1.1248.1.2.2.44.1.1.2.1.124.124.7.0.73.8.65.190.160.48.0`
|
||||||
|
|
||||||
|
Write EEPROM, after the header:
|
||||||
|
|
||||||
|
```
|
||||||
|
7C 7C 10 00 [124.124.16.0.]
|
||||||
|
<READ KEY (two bytes)>
|
||||||
|
42 BD 21 [66.189.33.]
|
||||||
|
<LSB EEPROM ADDRESS (one byte)>.<MSB EEPROM ADDRESS (one byte)>
|
||||||
|
<VALUE (one byte)>
|
||||||
|
<WRITE KEY (eight bytes)>
|
||||||
|
```
|
||||||
|
|
||||||
|
Example: `7C 7C 10 00 49 08 42 BD 21 30 00 1A 42 73 62 6F 75 6A 67 70`
|
||||||
|
|
||||||
## API Interface
|
## API Interface
|
||||||
|
|
||||||
### Specification
|
### Specification
|
||||||
|
|
|
@ -239,7 +239,7 @@ class EpsonPrinter:
|
||||||
},
|
},
|
||||||
"XP-3150": {
|
"XP-3150": {
|
||||||
"read_key": [80, 9],
|
"read_key": [80, 9],
|
||||||
"serial_number": range(0x644, 0x64e),
|
"serial_number": range(1604, 1614),
|
||||||
"printer_head_id_h": [171, 189, 190, 175],
|
"printer_head_id_h": [171, 189, 190, 175],
|
||||||
"printer_head_id_f": [191, 188],
|
"printer_head_id_f": [191, 188],
|
||||||
"stats": {
|
"stats": {
|
||||||
|
@ -295,6 +295,26 @@ class EpsonPrinter:
|
||||||
}
|
}
|
||||||
# uncompleted
|
# uncompleted
|
||||||
},
|
},
|
||||||
|
"ET-2700": { # Epson EcoTank ET-2700 Series
|
||||||
|
"read_key": [73, 8],
|
||||||
|
"write_key": b'Arantifo',
|
||||||
|
"serial_number": range(1604, 1614),
|
||||||
|
"main_waste": {"oids": [48, 49], "divider": 109.125},
|
||||||
|
"second_waste": {"oids": [50, 51], "divider": 16.31},
|
||||||
|
"stats": {
|
||||||
|
"Maintenance required level of 1st waste ink counter": [54],
|
||||||
|
"Maintenance required level of 2nd waste ink counter": [55],
|
||||||
|
},
|
||||||
|
"raw_waste_reset": {
|
||||||
|
48: 0, 49: 0, 47: 0, # Data of 1st counter
|
||||||
|
52: 0, 53: 0, # another store of 1st counter
|
||||||
|
54: 94, # Maintenance required level of 1st counter
|
||||||
|
50: 0, 51: 0, # Data of 2nd counter
|
||||||
|
55: 94, # Maintenance required level of 2st counter
|
||||||
|
28: 0 # ?
|
||||||
|
}
|
||||||
|
# uncompleted
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
CARTRIDGE_TYPE = { # map cartridge number with color
|
CARTRIDGE_TYPE = { # map cartridge number with color
|
||||||
|
@ -429,10 +449,13 @@ class EpsonPrinter:
|
||||||
logging.info(f"No value for method '{method}'.")
|
logging.info(f"No value for method '{method}'.")
|
||||||
return stat_set
|
return stat_set
|
||||||
|
|
||||||
def caesar(self, key):
|
def caesar(self, key, hex=False):
|
||||||
"""Convert the string write key to a sequence of numbers"""
|
"""Convert the string write key to a sequence of numbers"""
|
||||||
|
if hex:
|
||||||
|
return " ".join('{0:02x}'.format(b + 1) for b in key)
|
||||||
return ".".join(str(b + 1) for b in key)
|
return ".".join(str(b + 1) for b in key)
|
||||||
|
|
||||||
|
|
||||||
def reverse_caesar(self, eight_bytes):
|
def reverse_caesar(self, eight_bytes):
|
||||||
"""
|
"""
|
||||||
Convert a bytes type sequence key (8 bytes length) to string.
|
Convert a bytes type sequence key (8 bytes length) to string.
|
||||||
|
@ -466,8 +489,8 @@ class EpsonPrinter:
|
||||||
return None
|
return None
|
||||||
return (
|
return (
|
||||||
f"{self.eeprom_link}"
|
f"{self.eeprom_link}"
|
||||||
".124.124" # || (0x7C 0x7C)
|
".124.124" # || (7C 7C)
|
||||||
".7.0" # read
|
".7.0" # read (07 00)
|
||||||
f".{self.parm['read_key'][0]}"
|
f".{self.parm['read_key'][0]}"
|
||||||
f".{self.parm['read_key'][1]}"
|
f".{self.parm['read_key'][1]}"
|
||||||
".65.190.160"
|
".65.190.160"
|
||||||
|
@ -500,11 +523,11 @@ class EpsonPrinter:
|
||||||
return None
|
return None
|
||||||
write_op = (
|
write_op = (
|
||||||
f"{self.eeprom_link}"
|
f"{self.eeprom_link}"
|
||||||
".124.124" # || (0x7C 0x7C)
|
".124.124" # || 7C 7C
|
||||||
".16.0" # write
|
".16.0" # write (10 00)
|
||||||
f".{self.parm['read_key'][0]}"
|
f".{self.parm['read_key'][0]}"
|
||||||
f".{self.parm['read_key'][1]}"
|
f".{self.parm['read_key'][1]}"
|
||||||
".66.189.33"
|
".66.189.33" # 42 BD 21
|
||||||
f".{oid}.{msb}.{value}"
|
f".{oid}.{msb}.{value}"
|
||||||
f".{self.caesar(self.parm['write_key'])}"
|
f".{self.caesar(self.parm['write_key'])}"
|
||||||
)
|
)
|
||||||
|
@ -1113,7 +1136,7 @@ class EpsonPrinter:
|
||||||
|
|
||||||
def get_firmware_version(self) -> str:
|
def get_firmware_version(self) -> str:
|
||||||
"""Return firmware version."""
|
"""Return firmware version."""
|
||||||
oid = f"{self.eeprom_link}.118.105.1.0.0"
|
oid = f"{self.eeprom_link}.118.105.1.0.0" # 76 69 01 00 00
|
||||||
label = "get_firmware_version"
|
label = "get_firmware_version"
|
||||||
logging.debug(
|
logging.debug(
|
||||||
f"SNMP_DUMP {label}:\n"
|
f"SNMP_DUMP {label}:\n"
|
||||||
|
@ -1138,7 +1161,7 @@ class EpsonPrinter:
|
||||||
|
|
||||||
def get_cartridges(self) -> str:
|
def get_cartridges(self) -> str:
|
||||||
"""Return list of cartridge types."""
|
"""Return list of cartridge types."""
|
||||||
oid = f"{self.eeprom_link}.105.97.1.0.0"
|
oid = f"{self.eeprom_link}.105.97.1.0.0" # 69 61 01 00 00
|
||||||
label = "get_cartridges"
|
label = "get_cartridges"
|
||||||
logging.debug(
|
logging.debug(
|
||||||
f"SNMP_DUMP {label}:\n"
|
f"SNMP_DUMP {label}:\n"
|
||||||
|
@ -1185,7 +1208,7 @@ class EpsonPrinter:
|
||||||
|
|
||||||
def get_printer_status(self):
|
def get_printer_status(self):
|
||||||
"""Return printer status and ink levels."""
|
"""Return printer status and ink levels."""
|
||||||
address = f"{self.eeprom_link}.115.116.1.0.1"
|
address = f"{self.eeprom_link}.115.116.1.0.1" # 73 74 01 00 01
|
||||||
logging.debug(f"PRINTER_STATUS:\n ADDRESS: {address}")
|
logging.debug(f"PRINTER_STATUS:\n ADDRESS: {address}")
|
||||||
tag, result = self.snmp_mib(address, label="get_printer_status")
|
tag, result = self.snmp_mib(address, label="get_printer_status")
|
||||||
if not result:
|
if not result:
|
||||||
|
@ -1253,7 +1276,7 @@ class EpsonPrinter:
|
||||||
"""Return list of cartridge properties."""
|
"""Return list of cartridge properties."""
|
||||||
response = []
|
response = []
|
||||||
for i in range(1, 9):
|
for i in range(1, 9):
|
||||||
mib = f"{self.eeprom_link}.105.105.2.0.1." + str(i)
|
mib = f"{self.eeprom_link}.105.105.2.0.1." + str(i) # 69 69 02 00 01
|
||||||
logging.debug(
|
logging.debug(
|
||||||
f"Cartridge {i}:\n"
|
f"Cartridge {i}:\n"
|
||||||
f" ADDRESS: {mib}"
|
f" ADDRESS: {mib}"
|
||||||
|
|
Loading…
Reference in a new issue