Como recuperar o nível de tinta cartuchos de programação (Epson StatusMonitor + Mac OS X)?

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

  •  10-07-2019
  •  | 
  •  

Pergunta

Eu estou procurando uma maneira de consultar o nível de tinta para minha Epson DX 4050 no Mac OS X. Há alguma UI chamado EPSON StatusMonitor para cartuchos de exibição níveis graficamente, mas eu gostaria de obtê-lo a partir do Comando- linha para que ele possa alimentar um robô.

Qualquer idéia?

Foi útil?

Solução

Esta vai ser uma empresa. De qualquer engenharia reversa do aplicativo StatusMonitor para descobrir como ele consulta os motoristas para encontrar o nível de tinta ou procurar alguma documentação para ele. Pode ser possível para picar no aplicativo StatusMonitor para descobrir valores internos para seus widgets (tal coisa é possível com o Windows, embora hacky), mas todo o processo é susceptível de ser um sumidouro de tempo: (

Outras dicas

Se a impressora suporta SNMP que você pode ser a sorte de consulta com qualquer ferramenta de linha de comando SNMP. Há definições padrão para impressoras e contêm APIs para consultar os níveis atuais e tinta max.

Aqui está como eu fazê-lo com simples comandos unix shell (requer net-snmp instalado). Isto não é estritamente Mac, mas você deve ter uma idéia.

#!/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 em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top