Hier im Geschäft haben wir insgesamt vier HP Laserdrucker. Inzwischen wissen die meisten wir man die Toner selber wechselt, aber für die Bestellung bin immer noch ich zu ständig. Meistens funktioniert es auch, dass die leeren Toner an mich zurück kommen. Denn so habe ich einen Überblick wieviele Toner wir noch haben. Allerdings ist es auch schon ab und zu passiert, dass die Toner (fast) ausgegangen sind, ohne dass ich es wusste. Eine Möglichkeit um dem entgegen zu wirken, ist die Überwachung des Tonerstandes und was liegt da näher als
SNMP. Also mal einen snmpwalk auf den Drucker machen. Und siehe da, irgendwo versteckt sind die Daten zu Toner, Fixier- und Transporteinheit. Diese Daten sind von einem HP Color Laserjet 4650. Wie es bei anderen Druckern aussieht weiss ich nicht, aber bei den Laserjets siehts überall ähnlich aus.
root@serv02:~# snmpwalk -c public -v 2c 192.168.1.*
SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 = STRING: "Black Print Cartridge HP C9720A"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.2 = STRING: "Cyan Print Cartridge HP C9721A"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.3 = STRING: "Magenta Print Cartridge HP C9723A"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.4 = STRING: "Yellow Print Cartridge HP C9722A"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.5 = STRING: "Image Transfer Kit HP Q3675A"
SNMPv2-SMI::mib-2.43.11.1.1.6.1.6 = STRING: "Image Fuser Kit HP 110V-Q3676A, 220V-Q3677A"
SNMPv2-SMI::mib-2.43.11.1.1.8.1.1 = INTEGER: 9000
SNMPv2-SMI::mib-2.43.11.1.1.8.1.2 = INTEGER: 8000
SNMPv2-SMI::mib-2.43.11.1.1.8.1.3 = INTEGER: 8000
SNMPv2-SMI::mib-2.43.11.1.1.8.1.4 = INTEGER: 8000
SNMPv2-SMI::mib-2.43.11.1.1.8.1.5 = INTEGER: 120000
SNMPv2-SMI::mib-2.43.11.1.1.8.1.6 = INTEGER: 150000
SNMPv2-SMI::mib-2.43.11.1.1.9.1.1 = INTEGER: 5580
SNMPv2-SMI::mib-2.43.11.1.1.9.1.2 = INTEGER: 5200
SNMPv2-SMI::mib-2.43.11.1.1.9.1.3 = INTEGER: 6480
SNMPv2-SMI::mib-2.43.11.1.1.9.1.4 = INTEGER: 1520
SNMPv2-SMI::mib-2.43.11.1.1.9.1.5 = INTEGER: 38727
SNMPv2-SMI::mib-2.43.11.1.1.9.1.6 = INTEGER: 111571
Aber das bringt ja noch nicht allzu viel. Was kann man denn mit diesen Daten anfangen?
Nun mal zum schwarzen Toner. Hier haben wir die folgenden Daten.
SNMPv2-SMI::mib-2.43.11.1.1.6.1.1 = STRING: "Black Print Cartridge HP C9720A"
SNMPv2-SMI::mib-2.43.11.1.1.8.1.1 = INTEGER: 9000
SNMPv2-SMI::mib-2.43.11.1.1.9.1.1 = INTEGER: 5580
Die erste Zeilt zeigt, wie unschwer zu erkennen ist, den Namen des Toners an. So kommt man auch relativ schnell drauf, was es ist. Die nächste Zeile zeigt den maximalen Wert des Toners an, welche Einheit das ist, weiss ich nicht, aber das ist hier auch nicht so wichtig. Die letzte Zeile zeigt dann noch den aktuellen Stand des Toners an. Mit diesen Daten ist es nun keine Hexerei aus zurechnen wie voll der Toner noch ist.
100 * 5580 / 9000 = 62
Die Daten noch schnell mit dem Webinterface vergleichen und siehe da: Es stimmt.
Nun kann man das ganze auch noch ein wenig Automatisieren. Ich habe dazu ein kleines Script geschrieben, welches den aktuellen Stand der Toner und Einheiten anzeigt.
#!/bin/bash
# CONFIG
ip="192.168.1.*"
community="public"
num=1;
while [ ${num} -le 6 ]
do
name=`snmpwalk -v 2c -c ${community} ${ip} SNMPv2-SMI::mib-2.43.11.1.1.6.1.${num} | cut -d "\"" -f 2`
max=`snmpwalk -v 2c -c ${community} ${ip} SNMPv2-SMI::mib-2.43.11.1.1.8.1.${num} | cut -d " " -f 4`
current=`snmpwalk -v 2c -c ${community} ${ip} SNMPv2-SMI::mib-2.43.11.1.1.9.1.${num} | cut -d " " -f 4`
echo "${name} $((100 * $current /$max))%"
((num++))
done
Dieses Script gibt nun das folgende aus:
Black Print Cartridge HP C9720A 62%
Cyan Print Cartridge HP C9721A 65%
Magenta Print Cartridge HP C9723A 81%
Yellow Print Cartridge HP C9722A 19%
Image Transfer Kit HP Q3675A 32%
Image Fuser Kit HP 110V-Q3676A, 220V-Q3677A 74%
Und wenn man das mit dem Webinterface vergleicht:
Nur so als Shellscript, macht das natürlich wenig sinn, man könnte ja gleich auf das Webinterface. Wenn man die Daten aber ins RRDTool speist, oder sonst irgendwie zusammenfasst, kann man sich so einen schönen Überblick über den Tonerstand der Drucker verschaffen. Wenn ich Zeit habe, baue ich vielleicht mal so ein Tool mit PHP.