Wie Patronen Tintenfüllstands programmatisch (Epson Statusmonitor + Mac OS X) abrufen?
-
10-07-2019 - |
Frage
Ich bin für einen Weg, um den Tintenfüllstand für meinen Epson DX 4050 unter Mac OS X. Es gibt einige UI genannt EPSON Status Kartuschen Ebene grafisch darstellen abfragen, aber ich mag es von der Kommando- bekommen Linie, so dass es einen Roboter füttern.
Jede Idee?
Lösung
Das wird ein Unternehmen sein. Entweder kehren die Status Anwendungstechniker, um herauszufinden, wie es die Treiber fragt den Tintenstand oder suchen Sie für einige Dokumentation für sie zu finden. Es kann möglich sein, in die Status Anwendung zu stecken interne Werte, um herauszufinden, für seine Widgets (so etwas möglich ist, mit dem Windows, obwohl Hacky), aber der gesamte Prozess ist wahrscheinlich eine Doline für Zeit sein: (
Andere Tipps
Wenn der Drucker SNMP unterstützt Sie können sich glücklich schätzen, mit jedem SNMP-Kommandozeilen-Tool zur Abfrage. Es gibt Standarddefinitionen für Drucker und sie enthalten APIs, um den aktuellen und maximalen Tintenstand abzufragen.
Hier ist, wie ich es tun mit einfachen Unix-Shell-Befehle (erfordert net-snmp installiert ist). Dies ist nicht unbedingt Mac, aber Sie sollten eine Vorstellung bekommen.
#!/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);'