プログラムでカートリッジのインクレベルを取得する方法(Epson StatusMonitor + Mac OS X)

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

  •  10-07-2019
  •  | 
  •  

質問

Mac OS XでEpson DX 4050のインクレベルを照会する方法を探しています。EPSONStatusMonitorと呼ばれるUIがあり、カートリッジレベルをグラフィカルに表示しますが、コマンドから取得したいのですが、ロボットに餌を与えることができます。

何かアイデアはありますか?

役に立ちましたか?

解決

これは事業となるでしょう。 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