Как получить уровень чернил в картриджах программным способом (Epson StatusMonitor + Mac OS X)?

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

  •  10-07-2019
  •  | 
  •  

Вопрос

Я ищу способ запроса уровня чернил для моего Epson DX 4050 в Mac OS X. Существует некоторый пользовательский интерфейс EPSON StatusMonitor для графического отображения уровней картриджей, но я хотел бы получить его из командной строки. линии, чтобы он мог кормить робота.

Есть идеи?

Это было полезно?

Решение

Это будет мероприятие. Либо перепроектируйте приложение StatusMonitor, чтобы узнать, как оно запрашивает драйверы, чтобы определить уровень чернил, либо найдите некоторую документацию для него. Может оказаться возможным заглянуть в приложение StatusMonitor, чтобы выяснить внутренние значения его виджетов (такое возможно в Windows, хотя и хакерски), но весь процесс, скорее всего, будет провалом во времени: (

Другие советы

Если принтер поддерживает SNMP, возможно, вам повезет запросить любой инструмент командной строки SNMP. Существуют стандартные определения для принтеров, и они содержат API для запроса текущего и максимального уровня чернил.

Вот как я делаю это с помощью простых команд оболочки Unix (требуется установленный net-snmp). Это не строго Mac, но вы должны понять.

#!/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);'
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top