Comment récupérer le niveau d'encre des cartouches par programmation (Epson StatusMonitor + Mac OS X)?

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

  •  10-07-2019
  •  | 
  •  

Question

Je cherche un moyen d'interroger le niveau d'encre de mon Epson DX 4050 sous Mac OS X. Une interface utilisateur, appelée EPSON StatusMonitor, permet d'afficher les niveaux de cartouche de manière graphique, mais j'aimerais les obtenir à l'aide de la commande- ligne afin qu'il puisse nourrir un robot.

Une idée?

Était-ce utile?

La solution

Cela va être une entreprise. Effectuez un reverse engineering de l’application StatusMonitor pour savoir comment il interroge les pilotes pour trouver le niveau d’encre, ou recherchez de la documentation à ce sujet. Il est peut-être possible d’intervenir dans l’application StatusMonitor pour connaître les valeurs internes de ses widgets (une telle chose est possible avec Windows, bien que désordonné), mais l’ensemble du processus risque d’être un gouffre temporel: (

Autres conseils

Si l’imprimante prend en charge SNMP, vous aurez peut-être la chance d’interroger tout outil de ligne de commande SNMP. Il existe des définitions standard pour les imprimantes et elles contiennent des API permettant d’interroger les niveaux d’encre actuel et maximal.

Voici comment je le fais avec de simples commandes shell Unix (nécessite l'installation de net-snmp). Ce n’est pas strictement Mac, mais vous devriez vous faire une idée.

#!/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);'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top