Perl Skript zum Auslesen von Toner und Trommel Status

Einrichten des Druckers und des Drucksystems, Scannerkonfiguration und Software zum Scannen und Faxen.
Antworten
linux
Beiträge: 326
Registriert: 01.05.2007 21:58:17
Lizenz eigener Beiträge: MIT Lizenz

Perl Skript zum Auslesen von Toner und Trommel Status

Beitrag von linux » 27.04.2016 12:33:52

Hallo,
ich habe vor langer Zeit mal ein Perl Skript zum Auslesen des Toner und Trommel Status gefunden und jahrelang benutzt.
Irgendwann kamen nur noch Fehler anstatt von Werten.
Bei der aktuellen Systemkonfiguration bleibt die Shell Ausgabe stehen, nachdem der locale auf system default gesetzt wurde.
Was kann ich an der Perlkonfiguration ändern, damit das Skript wieder korrekt arbeitet?
Oder kann ich etwas am Skript ändern?

dmesg gibt /dev/usb/lp1 an. Das habe ich erfolglos auch schon ausprobiert.

Danke im Voraus und viele Grüße,
Christoph

NoPaste-Eintrag39270
Atombomben sind ja auch pipifax aus dem letzten Jahrhundert. Künstlich erzeugte Schwarze Löcher sind der letzte Schrei bei Weltuntergangs-Szenarien. Und da hätte wohl auch die Natur so ihre Probleme mit, wenn da was schief läuft ;)

Quelle: Die Menschheit ist der Natur scheißegal...; golem forum

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Perl Skript zum Auslesen von Toner und Trommel Status

Beitrag von rendegast » 02.05.2016 16:55:21

Irgendwann kamen nur noch Fehler anstatt von Werten.
Normalerweise mit Stellenangaben.
Ausgabe?

Das Skript Schritt um Schritt vereinfachen,
sodaß die Rohdaten ausgegeben werden.
In die Richtung

Code: Alles auswählen

#print  "Number of pages : $dinquire[0]\n";
#printf "Drum status     : %4.1f ($dinquire[1]/$dinquire[2])\n",
#        100*$dinquire[1]/$dinquire[2];
print  "TOTALPAGE $dinquire[0]\n";
print  "NEXTCAREDRM $dinquire[1]\n";
print  "LIFEDRM $dinquire[2]\n";
was schonmal die letzte Berechnung deaktiviert.


Spricht der Drucker denn noch PJL?
Vielleicht umgestellt?
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

linux
Beiträge: 326
Registriert: 01.05.2007 21:58:17
Lizenz eigener Beiträge: MIT Lizenz

Re: Perl Skript zum Auslesen von Toner und Trommel Status

Beitrag von linux » 30.05.2016 11:55:21

Hallo!
Ich weiss leider nicht ob der Drucker PJL spricht. Ich habe die ppd über cups-client direkt eingebunden. In der Server Configuration File in Cups ist über die Volltextsuche kein String mit dem Inhalt "pjl" zu finden.

Zur Zeit erscheint die Fehlermeldung:

Code: Alles auswählen

Can't open /dev/usb/lp0
dmesg | grep lp

Code: Alles auswählen

[    0.000000] On node 0 totalpages: 1572686
[    0.000025] Calibrating delay loop (skipped), value calculated using timer frequency.. 7200.49 BogoMIPS (lpj=14400984)
[   12.612921] lp: driver loaded but no devices found
[   96.269038] usblp 1-1.2:1.0: usblp1: USB Bidirectional printer dev 7 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0033
[   96.269057] usbcore: registered new interface driver usblp
[  100.109372] usblp1: removed
[  100.859435] usblp 1-1.2:1.0: usblp1: USB Bidirectional printer dev 7 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0033
[  661.437187] usblp1: removed
Das bearbeitete Tonerskript sieht zur Zeit so aus:

Code: Alles auswählen

#!/usr/bin/perl -w
use strict;

print  "TOTALPAGE $dinquire[0]\n";
print  "NEXTCAREDRM $dinquire[1]\n";
print  "LIFEDRM $dinquire[2]\n";
Und es kommt die Fehlermeldung:

Code: Alles auswählen

Global symbol "@dinquire" requires explicit package name (did you forget to declare "my @dinquire"?) at Tonerscript_neu line 4.
Global symbol "@dinquire" requires explicit package name (did you forget to declare "my @dinquire"?) at Tonerscript_neu line 5.
Global symbol "@dinquire" requires explicit package name (did you forget to declare "my @dinquire"?) at Tonerscript_neu line 6.
Execution of Tonerscript_neu aborted due to compilation errors.
Durch das Ergänzen von my @dinquire aus dem alten Skript erhalte ich die folgende Ausgabe:

Code: Alles auswählen

TOTALPAGE @PJL DINQUIRE TOTALPAGE
NEXTCAREDRM @PJL DINQUIRE NEXTCAREDRM
LIFEDRM @PJL DINQUIRE LIFEDRM
Atombomben sind ja auch pipifax aus dem letzten Jahrhundert. Künstlich erzeugte Schwarze Löcher sind der letzte Schrei bei Weltuntergangs-Szenarien. Und da hätte wohl auch die Natur so ihre Probleme mit, wenn da was schief läuft ;)

Quelle: Die Menschheit ist der Natur scheißegal...; golem forum

rendegast
Beiträge: 15041
Registriert: 27.02.2006 16:50:33
Lizenz eigener Beiträge: MIT Lizenz

Re: Perl Skript zum Auslesen von Toner und Trommel Status

Beitrag von rendegast » 30.05.2016 19:22:18

In der Art, wie Du Dein test-Skript konstruiert hast, scheint es nicht zu versuchen,
Werte auszulesen.
Es gibt wohl nur die Abfragestrings aus.
Die Abfrage steckt wohl in diesem Teil des Originalskriptes:

Code: Alles auswählen

my $command=
        "\e%-12345X\@PJL \r\n"
        . join("\n", @dinquire)."\n"
        . "\e%-12345X";
 
open LP, "+> $where" or die "Can't open $where\n";
print LP $command;
my $result="";
do {
        $result= join "", <LP>;
        sleep 1;
} while ($result eq "");
(Ich kann halt kein perl)


dmesg gibt /dev/usb/lp1 an. Das habe ich erfolglos auch schon ausprobiert.
Can't open /dev/usb/lp0
[ 96.269038] usblp 1-1.2:1.0: usblp1: USB Bidirectional printer dev 7 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0033
[ 96.269057] usbcore: registered new interface driver usblp
[ 100.109372] usblp1: removed
[ 100.859435] usblp 1-1.2:1.0: usblp1: USB Bidirectional printer dev 7 if 0 alt 0 proto 2 vid 0x04F9 pid 0x0033
[ 661.437187] usblp1: removed
Im Zweifel würde ich es mit dem Device versuchen, welches dmesg ausgibt.
"usblp1" ist hier nur eine logische Bezeichnung durch den Treiber usblp?
Nach der Abfrage
dmesg | grep lp
ist das device wohl nichts mit "lp" im Namen
Was gibt dmesg denn beim Anstecken des Druckers aus?

Oder ist es gar /dev/usblp1 ?
Beobachten beim An-/Abstecken

Code: Alles auswählen

watch -n 1  'ls -l /dev/*usb* /dev/usb/* /dev/*lp*'

alternativ
watch -n 1  'find /dev/ | egrep -i "usb|lp" '

oder etwas mehr
watch -n 1 -d=cum  'find /dev/ -maxdepth 2 -print0  | sed "s@/dev/@ /dev/@g" '


--------------------------------------------------------------------------------------
Hast Du hier den Stecker gezogen/ausgeschaltet?
[ 100.109372] usblp1: removed
...
[ 661.437187] usblp1: removed
Ich habe hier ein USB-cdrom, welches sich gelegentlich als anderes /dev/sr# reconnected.
(Bisher noch nie beim Auslesen/Schreiben)
mfg rendegast
-----------------------
Viel Eifer, viel Irrtum; weniger Eifer, weniger Irrtum; kein Eifer, kein Irrtum.
(Lin Yutang "Moment in Peking")

linux
Beiträge: 326
Registriert: 01.05.2007 21:58:17
Lizenz eigener Beiträge: MIT Lizenz

Re: Perl Skript zum Auslesen von Toner und Trommel Status

Beitrag von linux » 01.06.2016 23:03:14

Danke Dir!
Ich schaue mal in einem Perl Forum.
Oder vlt. mache ich tatsächlich mal eine Neuinstallation auf 64 Bit. Ein paar Jahre halte ich es aber noch aus (bin auf testing).
Atombomben sind ja auch pipifax aus dem letzten Jahrhundert. Künstlich erzeugte Schwarze Löcher sind der letzte Schrei bei Weltuntergangs-Szenarien. Und da hätte wohl auch die Natur so ihre Probleme mit, wenn da was schief läuft ;)

Quelle: Die Menschheit ist der Natur scheißegal...; golem forum

Antworten