¿Cómo recuperar cartuchos de nivel de tinta mediante programación (Epson StatusMonitor + Mac OS X)?

StackOverflow https://stackoverflow.com/questions/314054

  •  10-07-2019
  •  | 
  •  

Pregunta

Estoy buscando una forma de consultar el nivel de tinta de mi Epson DX 4050 en Mac OS X. Hay una interfaz de usuario llamada EPSON StatusMonitor para mostrar los niveles de los cartuchos gráficamente, pero me gustaría obtenerla del comando línea para que pueda alimentar a un robot.

¿Alguna idea?

¿Fue útil?

Solución

Esto va a ser una empresa. Realice ingeniería inversa de la aplicación StatusMonitor para averiguar cómo consulta a los controladores para encontrar el nivel de tinta o busque documentación para ello. Puede ser posible ingresar a la aplicación StatusMonitor para encontrar valores internos para sus widgets (tal cosa es posible con Windows, aunque sea hacky), pero es probable que todo el proceso sea un sumidero de tiempo :(

Otros consejos

Si la impresora admite SNMP, es posible que tenga la suerte de consultar con cualquier herramienta de línea de comandos SNMP. Existen definiciones estándar para impresoras y contienen API para consultar los niveles de tinta actuales y máximos.

Así es como lo hago con comandos simples de shell de Unix (requiere net-snmp instalado). Esto no es estrictamente Mac, pero debes tener una idea.

#!/bin/sh

me="${0##*/}"

host="${1:-wp4535}"

base=1.3.6.1.2.1.43.11.1.1

name="WP-4535"

type=$(snmpget -v1 -c public ${host} SNMPv2-MIB::sysDescr.0)

case "$type" in
"SNMPv2-MIB::sysDescr.0 = STRING: EPSON"*)
    type=epson
    ofs=1
;;
*)
    echo "! unknown printer type" 1>&2
    exit 1
;;
esac
echo "# $host $type $name"

# get current ink levels
eval $(snmpwalk -v1 -Ov -OQ -c public ${host} ${base}.6.${ofs} |
perl -ne 'print "c[",++$c,"]=$1\n" if(m!"(\w+) ink!i);')

# get max ink level per cartridge
eval $(snmpwalk -v1 -Ov -OQ -c public ${host} ${base}.8.${ofs} |
perl -ne 'print "max[",++$c,"]=$1\n" if(m!(\d+)!i);')

snmpwalk -v1 -Ov -OQ -c public ${host} ${base}.9.${ofs} |
perl -ne '
    my @c=("","'${c[1]}'","'${c[2]}'","'${c[3]}'","'${c[4]}'");
    my @max=("","'${max[1]}'","'${max[2]}'","'${max[3]}'","'${max[4]}'");
    my $v=$c[++$c];
    printf"# $v=$1 (%.0f)\n",$1/$max[$c]*100 if(m!(\d+)!i);'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top