Auslesen der Druckerwarteschlange

Hallo,

ich habe vor meinem Drucker eine Schaltsteckdose, die ich zwar per IPS steuern kann. Leider weiß ich aber noch nicht, wie ich IPS dazu bringe, bei anliegenden Druckaufträgen die Steckdose einzuschalten. Ich hatte so etwas früher mal in Visual Basic programmiert und erinnere mich, dass es API-Funktionen gibt, um herauszufinden ob die Druckerwarteschlange eines bestimmten Druckers leer ist oder nicht. Eine solche Funktion in IPS fänd ich daher große Klasse. Selbst wenn der IPS-Server nicht zugleich Printserver ist - man kann den Drucker ja auch dann auf dem IPS-Server installieren, wenn er an einem anderen Printserver hängt. Das kann sogar ein beliebiger Clientrechner sein, hauptsache der Drucker ist freigegeben.

Mit diesem Feature ließe sich Strom sparen, ohne auf den Komfort beim Drucken verzichten zu müssen.

Schöne Idee. Ist im nächsten Update mit dabei.


print_r(Sys_GetSpooler());

paresy

Wow, das ging ja fix.

Und danke! IPS ist klasse und wird täglich besser… :smiley:

wie genau muß ich das

printr_(Sys_GetSpoolers());  

definieren ?

könnte ich ein Beispiel haben an dem ich mich Orientieren kann?

MFG

PW

Das Beispiel hatte einen Buchstabendreher drin. Habe es korrigiert.

Danke Horst so gehts,

ich als Dau habe jetzt natürlich noch ne Frage:
Ich habe mal geprüft was es mir so Liefert

<?
$drucker = print_r(Sys_GetSpooler());
echo "$drucker";
?>

Kleines Skript nur zum Prüfen und folgendes kommt raus


Array
(
    [Journalnotizverfasser] => Array
        (
        )

    [HP Color LaserJet 2600n] => Array
        (
        )

)
1

Wenn er nen Auftrag hat ändert sich nichts, auser das unter dem Drucker der Auftrag steht

Array
(
    [Journalnotizverfasser] => Array
        (
        )

    [HP Color LaserJet 2600n] => Array
        (
            [Document] => http://localhost:82/DUGTool/install.php
        )

)
1

Ok was muss ich tun jedes mal sagt der 1 also an auch wenn er nicht an ist
Im prinzip will ich auch nur das der Drucker an ist wenn einer der seltenen
Druckaufträge kommt vieleicht könntet ihr mir nochmal helfen.
danke im vorraus.

mfg

PW

Ich würde den Drucker prinzipell immer ausschalten. Und den Spooler zyklisch abfragen. Ist ein Dokument drin, dann Drucker an. Ist nichts drin, dann Drucker aus. Ist denk ich auch die einzige Möglichkeit, das zu nutzen.

Ja klar

aber wie baue ich mir ne funktion daraus

habt ihr mal ein Beispiel

MFG
PW

zB:

   $drucker = (Sys_GetSpooler());

	if ( $drucker['Brother HL-1250'] )
		{
                FS20_SwitchDuration ($InstanzID, true, 180 ) 
                }


Script alle Minute aufrufen.Wenn ein Druckauftrag da ist fuer meinen
Drucker dann einschalten fuer 180 Sekunden.Alle Minute wird solange
noch ein Auftrag da ist wieder gesendet.Wenn kein Auftrag mehr da ist
schaltet der Drucker nach 180 Sekunden aus.

Super hat geklappt,

muste bischen umstricken da ich nur Z-Wave schalter habe und es die funktion SwitchDuration bei ZW anscheinend noch nicht gibt.

aber vielen Dank!! das ist auf jedenfall besser, als meine bisherige IP abhängige ansteuerung

Als Dank will ich euch natürlich das Skript nicht vorenthalten


<?
$schalter = 29875 /*[Haus\Aktoren\Stromschalter\Erdgeschoss/Drucker]*/;// die ID des zuschaltenden Schalters
$Boolean = 37349 /*[Haus\Aktoren\Stromschalter\Erdgeschoss/Drucker\Status]*/;// die ID des Status des Schalters
$zeit1 = 5; //Setzt Die Zeit die der Drucker am netz bleibt
$zeit2 = 0.5; // Setzt Die Zeit wie oft das Skript abgefragt wird passt sich nur nach einem Vorgang an

// Ab Hier mus nichts mehr geändert Werden auser es werden andere Komponenten als Z-Wave genutzt
// Für FS20 muss nur die// vor FS20_Switchmode entfernt werden und vor die ZW_Switchmode
// gesetzt werden.

$status =  GetValueBoolean ($Boolean);
$drucker = (Sys_GetSpooler());//Liefert Druckerstatus
$EreignisID = @IPS_GetEventIDByName(ScriptTimer,$IPS_SELF);//Liefert die eigene ID


if ( $drucker ['HP Color LaserJet 2600n'])
		{
		      ZW_Switchmode ($schalter, true);// ausgelegt Für Z-Wave
		      //FS20_Switchmode ($schalter, true);// ausgelegt Für Fs20
        	   IPS_DeleteEvent($EreignisID);//loescht den Timer bevor er neu gesetzt wird
           	IPS_SetScriptTimer($IPS_SELF, $zeit1*60);//setzt im Programm ein event das in $zeit1 min ausgeloest wird
				}
else
		{if  ( $status == True )
		      {
	   	         ZW_Switchmode ($schalter, false);// ausgelegt Für Z-Wave
	      	      //FS20_Switchmode ($schalter, false); // ausgelegt Für FS20
              	   IPS_DeleteEvent($EreignisID);
	            	IPS_SetScriptTimer($IPS_SELF, $zeit2*60);//setzt den Timer auf $zeit2 mal 60sec 
				}
		}

// geschrieben by PW
?>

Habe versucht es so nutzerfreundlich als möglich zu schreiben, damit selbst Anfänger damit klar kommen.
An die Profis bin natürlich offen für eine Bewertung der schreibweise!
Ist mein erstes Veröffentlichte Skript und habe auser IPS keine PHP Erfahrung. Möchte aber gerade für Anfänger weitere Skrips Bereitstellen,
da ich weis wie schwer ich mich am Anfang getan habe.

MFG

PW

Funktioniert dieser Befehl nur bei lokal an den PC angeschlossenen Druckern oder auch bei Netzwerkdruckern?

Das wäre natürlich genial…

Der Funktionier auch bei Netzwerkdrucker (meiner Hängt im netzwerk) muß aber auf dem Server eingerichtet sein.
Den drucker auf dem Server must du freigeben, da das skript er nur die Druckerwarteschlange vom server liest.
Klapt aber einwandfrei solange du den server auf 24/7 hast.
Mein server steht zwar neben dem Drucker läuft aber über Wlan.

Noch ein kleiner Tipp nicht mit Tintenstralern machen. Die meisten spritzen sich nach dem start dann erstmal die düsen frei.

MFG

PW