1

我正在寻找一种在 Mac OS X 上查询我的 Epson DX 4050 墨水量的方法。有一些名为 EPSON StatusMonitor 的 UI 可以以图形方式显示墨盒水平,但我想从命令行获取它所以它可以喂机器人。

任何的想法 ?

4

2 回答 2

1

这将是一项事业。要么对 StatusMonitor 应用程序进行逆向工程,以了解它如何查询驱动程序以查找墨水量,要么为其查找一些文档。可能可以深入到 StatusMonitor 应用程序以找出其小部件的内部值(Windows 可以做到这一点,虽然很老套),但整个过程很可能是时间的一个天坑:(

于 2008-11-24T12:49:33.590 回答
0

如果打印机支持 SNMP,您可能很幸运能够使用任何 SNMP 命令行工具进行查询。打印机有标准定义,它们包含用于查询当前和最大墨水量的 API。

下面是我如何使用简单的 unix shell 命令(需要安装 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);'
于 2017-03-30T16:33:54.763 回答