Druckersteuerung

Begonnen von Sturi2011, 06 Januar 2013, 21:06:57

Vorheriges Thema - Nächstes Thema

Sturi2011

Hallo,

in Zeiten von Pads und Laptops usw. reifte bei mir den Entschluss einen Homeserver zu installieren.
Dieser stellt wie üblich auch über CUPS Airprint und LPD Drucker zur Verfügung. Um nun nicht trotzdem
jedes Mal in den Keller zum Drucker zu müssen habe ich dieses kleine einfache Script geschrieben.

cups.sh
#! /bin/sh
SpoolLength=$(lpstat -o)
SpoolLengthVal=$(expr length "$SpoolLength")
if [ "$SpoolLengthVal" != "0" ]
then echo "1"
else echo "0"
fi


In Fhem frage ich das ganze so ab:
define CUPSDM dummy
define AT_CUPS_Dummy at +*00:01:00 {fhem("set CUPSDM ".`/opt/fhem/cups.sh`)}


Jetzt kann man mit On-for-timer oder über Intertechno den Drucker anknipsen
und nach einigen Minuten leerer Warteschlange wieder aus.

Gruß Andreas

MarkusN

Hallo Andreas,

danke führe diesen Codeschnipsel. Sowas ähnliches habe ich schon länger vor umzusetzen. Cups inclusive AirPrint läuft schon auf meinem Pi, jetzt fehlt nur noch ein Aktor.

automatisierer

Hallo allerseits,
möchte einmal meine Lösung vorstellen.
Da mir das sh script nicht gefallen hat und ich mich eh mal etwas mit PERL beschäftigen wollte, habe ich mal eine sub für die 99_myUtils gebastelt.

#Cups Druckerabfrage
sub
myCupsAbf($$$)
{
my ($printer,$dummy,$ontime) = @_;
my $cupsws.=`lpstat -o $printer` ;
if($cupsws =~ /$printer/) {fhem ("set $dummy on-for-timer $ontime")};
#if($cupsws =~ /^$/) {fhem ("set $dummy off")};
}


und das ganze wird mittels dieser Zeile in der .cfg (bei mir nun alle 59 Sekunden) ausgelöst:

define CupsAbfWerk at +*00:00:59 {myCupsAbf("HP_CLJ_2605dn_cups", "PC_Drucker_Werk_SW", "1800");;}

"HP_CLJ_2605dn_cups"  steht für den Druckernamen unter CUPS
"PC_Drucker_Werk_SW" steht für den Aktor der geschaltet werden soll
und die "1800" ist die Zeit für die der Drucker angeschaltet werden soll.

also diese drei Variabelen müssen angegeben werden.

Gruß
Ingo

LuckyLuis

Hallo,

bisher hatte ich die Lösung aus dem ersten Beitrag umgesetzt (allerding mit 3 Rechnern im Netzwerk, die nicht immer an sind), jetzt aber festgestellt, dass dadurch die Reaktionszeit von FHEM sich immens verschlechtert (Überprüft via apptime). Nachdem ich diese Lösung deaktiviert habe, ist mein System wieder nutzbar. Anscheinend blockieren die Anfragen das System. Wie kann man eigentlich in FHEM steuern, ob ein Funktion das System lahmlegt, solange es läuft oder oder kann man gar eine Funktionn Parallel aufrufen? Ist die aus dem vorigen Beitrag vorgeschlagene Lösung in Bezug auf Belastung besser?

Vielen Dank für Antworten.

LuckyLuis

automatisierer

hi LL,
bei mir ist der per apptime gemessene max wert ca.100, andere funktionen brauchen da bedeutend länger. kannst ja mal die von mir gepostete lösung testen und per apptime überprüfen. dann hätte wir einen vergleichbaren wert.
gruß ingo

LuckyLuis

Hi automatisierer,

habe endlich Zeit gefunden, Deine Sub zu testen. Dabei habe ich festgestellt, dass mein größtes Laufzeitproblem mit einem lpstat -h ServerIP -o mit einem ausgeschalteten Rechner ist. Sprich lpstat läuft zu lange. Eine TimeOut-Funktion wie bei Ping gibt es bei lpstat nicht. Habe div. Dinge probiert (cpan Time::Out), aber auch dass hilft nicht (wahrscheinlich mache ich was falsch). Ansonsten funktioniert Deine Sub wie gedacht.


#Cups Druckerabfrage
sub
myCupsQuqueQuery($$$$)
{
my ($host,$printer,$dummy,$ontime) = @_;
my $cupsws.= timeout 1 => sub {`lpstat -h $host -o` ; };
if($cupsws =~ /$printer/) {
fhem ("set $dummy on-for-timer $ontime")
};
}


Vielleicht hat ja jemand eine Idee wegen dem Timeout ....

Viele Grüße

LL

automatisierer

hab das mit den drei rechnern iwie überlesen. wie sieht deine konfiguration denn aus?
ich habe cups und fhem auf dem raspi laufen. meine pc's und laptops und auch die handys und tablets drucken an cups auf dem raspi und der schickt es weiter an meine drucker. daher läuft die abfrage "lpstat" quasi nur raspi intern und nicht an andere rechner. daher läuft die abfrage nicht ins leere.

LuckyLuis

Habe einen MacMini als Server laufen, wollte aber (da ich einen Netzwerk-Multifunktionsdrucker nutze), das jeder Client separat den Drucker ansprechen kann.

automatisierer

oh ha, der angebissene apfel des verderbens...[emoji12] ok,  das umstellen auf einen cups server wäre ja nicht allzu schwierig. und birgt jabauch keinerlei nachteile.

ansonsten müsstest du eventuell auf den rechnern nen script laufen lassen, welches via http befehl über fhem den drucker einschaltet... wäre mir aber zu kompliziert. da würd ich eher den cups server auf dem mini_mac_dings_server laufen lassen.

LuckyLuis

Hi,

Habe das jetzt über das Presence-Modul gelöst. Keine Verzögerungen mehr.

Spezialtrick

#10
Zitat von: automatisierer am 21 September 2014, 19:50:53
Hallo allerseits,
möchte einmal meine Lösung vorstellen.
Da mir das sh script nicht gefallen hat und ich mich eh mal etwas mit PERL beschäftigen wollte, habe ich mal eine sub für die 99_myUtils gebastelt.

#Cups Druckerabfrage
sub
myCupsAbf($$$)
{
my ($printer,$dummy,$ontime) = @_;
my $cupsws.=`lpstat -o $printer` ;
if($cupsws =~ /$printer/) {fhem ("set $dummy on-for-timer $ontime")};
#if($cupsws =~ /^$/) {fhem ("set $dummy off")};
}


und das ganze wird mittels dieser Zeile in der .cfg (bei mir nun alle 59 Sekunden) ausgelöst:

define CupsAbfWerk at +*00:00:59 {myCupsAbf("HP_CLJ_2605dn_cups", "PC_Drucker_Werk_SW", "1800");;}

"HP_CLJ_2605dn_cups"  steht für den Druckernamen unter CUPS
"PC_Drucker_Werk_SW" steht für den Aktor der geschaltet werden soll
und die "1800" ist die Zeit für die der Drucker angeschaltet werden soll.

also diese drei Variabelen müssen angegeben werden.

Gruß
Ingo

Hallo Ingo,

nach dem Umzug auf einen Cubietruck wollte ich auch die Druckersteuerung umbauen und deine Lösung ausprobieren. Leider bekomme ich es nicht hin. Folgendes habe ich die 99_myUtils.pm eingefügt:

package main;
use strict;
use warnings;
use POSIX;
sub
myUtils_Initialize($$)
{
  my ($hash) = @_;
}
##########################################################
#Cups Druckerabfrage
sub
myCupsAbf($$$)
{
my ($printer,$dummy,$ontime) = @_;
my $cupsws.=`lpstat -o $printer` ;
if($cupsws =~ /$printer/) {fhem ("set $dummy on-for-timer $ontime")};
#if($cupsws =~ /^$/) {fhem ("set $dummy off")};
}
1;


Ist der Aufbau korrekt? Habe die Infos von dieser Seite:

http://www.fhemwiki.de/wiki/99_myUtils_anlegen

Meine Definition in Fhem sieht so aus:

#################################################################################
##### Drucker Steuerung #####
### Drucker Steckdose ###
define FHEMduino_PT2262_12_29 FHEMduino_PT2262 0FF00FFF0F 0F F0
attr FHEMduino_PT2262_12_29 IODev FHEMduino
attr FHEMduino_PT2262_12_29 ITrepetition 9
attr FHEMduino_PT2262_12_29 alias Samsung ML-2240
attr FHEMduino_PT2262_12_29 devStateIcon on.*:black_Steckdose.on off.*:black_Steckdose.off
attr FHEMduino_PT2262_12_29 group Samsung ML-2240
attr FHEMduino_PT2262_12_29 room Wohnzimmer

define CupsAbfWerk at +*00:00:59 {myCupsAbf("samsung_ML-2240_Series", "FHEMduino_PT2262_12_29", "240");;}


Findest du/ihr meinen Fehler?
FHEM - Debmatic - Zigbee2MQTT - Homekit

automatisierer

Hallo Spezialtrick,
joa, sieht gut aus.

Ezähl mal ein weng mehr...
Was für ein Device willst du da Schalten, kann das überhaupt 'on-for-timer', oder kann es evtl. nur 'on' und 'off'?
Stimmt der Druckername? was für eine Antwort bekommst du, wenn du 'lpstat -p' auf der Konsole eingibst?
Wie sieht deine Installation aus? Hast du auf dem Cubietruck Cups als Druckerserver laufen?

Gruß
Ingo


Rohan

Moins,

Zitat von: Spezialtrick am 11 Februar 2015, 22:14:21
Findest du/ihr meinen Fehler?

Welchen Fehler? Was genau funktioniert denn nicht? Du schreibst ja lediglich:

Zitat von: Spezialtrick am 11 Februar 2015, 22:14:21
Leider bekomme ich es nicht hin.

Also "etwas" mehr Input wird da schon benötigt.

Gruß
Thomas

Fhem auf Mini-ITX mit Celeron 2-Core, HMLAN (> 55 Devices), CUL (FS20 und EM), RFXtrx 433E, Arduino (einige DS18B20), RPi mit 1-Wire (DS2423 für S0-Signale, DS18B20+), RPi/Arduino mit MQ-5 und MQ-9 (CO- und CNG/LPG-Sensor), CO-20 IAQ Sensor

Mitch

Ich habe mal eine "etwas andere" Frage dazu: geht bei jamdn Aiprint mit CUPS und iOS 8?

Meine iDevices sehen zwar den Drucker, aber es wird nichts gedruckt  >:(
FHEM im Proxmox Container

automatisierer

eiprint hab ich nicht, ich nutze es aber mit android, dass funzt prima!