Wie Patronen Tintenfüllstands programmatisch (Epson Statusmonitor + Mac OS X) abrufen?

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

  •  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?

War es hilfreich?

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);'
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top