我正在寻找一种方法来在Mac OS X上查询我的Epson DX 4050的墨水量。有一些名为EPSON StatusMonitor的用户界面以图形方式显示墨盒级别,但我想从命令中获取它 - 它可以为机器人提供动力。
有什么想法吗?
答案 0 :(得分:1)
这将是一项承诺。对StatusMonitor应用程序进行反向工程,以了解它如何查询驱动程序以查找墨水量或查找某些文档。有可能进入StatusMonitor应用程序以找出其小部件的内部值(虽然hacky可能会出现这种情况),但整个过程很可能是时间的漏洞:(
答案 1 :(得分: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);'