FHEM Forum

FHEM => fhem-users => Thema gestartet von: Guest am 19 August 2011, 09:09:09

Titel: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: Guest am 19 August 2011, 09:09:09
Originally posted by: <email address deleted>

Hallo,

vielleicht interessiert es jemand, wie man seinen Drucker über FHEM
erst von dem Druck einschaltet und nach einer Zeit wieder aus.
Meine Konfiguration ist ein Mac OS X Server, geht aber mit allen cups
Installationen und mit mehreren Druckern.
Der Drucker hängt an einem ST20-ST Schalter und wird über lpd
angesprochen. Geht aber auch mit USB o.ä.

Das Prinzip ist, dass man ein Pseudo-Backend erstellt, welches sich in
den Datenstrom hängt und den Schalter aktiviert. Danach wird das
Original-Backend aufgerufen.

Zuerst in der /etc/cups/printers.conf das Backend ändern.
Da steht z.B. "DeviceURI lpd://fs3800.domain.com/"
Hier kann man sich etwas einfallen lassen, bei mir:

"DeviceURI fs3800://fs3800.domain.com/"


In /usr/libexec/cups/backend stehen die Backends und hier wird sich
mit ein Pseudo-Backend erstellt.
Nach dem obigen Beispiel muss die Datei dann "fs3800" heissen.

Also sieht /usr/libexec/cups/backend/fs3800 so aus:

#! /bin/bash

PATH=/usr/sbin:/sbin:$PATH

n=1
ret=1

while [ "$n" -le 3 -a "$ret" -ne 0 ]
do
   echo "set FS3800 on-for-timer 960" | \
      /usr/bin/nc 127.0.0.1 7072 > /dev/null 2>&1

   n=`expr "$n" + 1`

   ping -t 15 -o fs3800.domain.com > /dev/null 2>&1
   ret=$?
done

exec -a lpd /usr/libexec/cups/backend/lpd "$@"


Damit in FHEM die Plots schön aussehen habe ich folgendes in /etc/
fhem.cfg:

define FS3800 FS20 1234 07
attr FS3800 model fs20st
attr FS3800 room Buero

define FS3800_fl FileLog /var/log/fhem/FS3800-%Y-%m.log FS3800
attr FS3800_fl logtype fs20:On/Off,text
attr FS3800_fl room Buero

define FS3800_wl weblink fileplot FS3800_fl:my_fs20:CURRENT
attr FS3800_wl label "Laserdrucker FS-3800"
attr FS3800_wl room Plot_Energie,Buero


define FS3800_check notify (FS3800:on-for-timer.*) { \
        my $fhem_cmd;; \
        my @@args= split(" ", "%");; \
        if($defs{"FS3800_off"}) { \
                $fhem_cmd= sprintf("modify FS3800_off +%%02d:%%02d:%
%02d", \
                        $args[1] / 3600, ($args[1] / 60) %% 60, \
                        $args[1] %% 60);; \
        } else { \
                $fhem_cmd= sprintf("define FS3800_off at " . \
                        "+%%02d:%%02d:%%02d set FS3800 off", \
                        $args[1] / 3600, ($args[1] / 60) %% 60, \
                        $args[1] %% 60);; \
        } \
        fhem("$fhem_cmd");; \
}

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: Guest am 19 August 2011, 11:28:48
Originally posted by: <email address deleted>

Ui cool.
Machst Du 'n Wiki draus?
=8-)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: csaba am 31 August 2011, 21:30:07
                                               

Hallo

Die Idee hat mir gefallen, deshalb habe ich es auch auf meiner
Guruplug mit SlackWare umgesetzt, Drucker haengt direkt am usb port.
Es gab schon einiges das geaendert werden musste deshalb anbei eine
kurze Zusammenfassung.
Der Skript soll unter /usr/lib/cups/backend landen z. B. mit dem Namen
hpusb und muss ausfuehrbar sein.
In /etc/cups/printers.conf DeviceURI usb://HP/LaserJet auf DeviceURI
hpusb://HP/LaserJet aendern und speichern, danach cups neustarten.

#! /bin/bash
# put this script under /usr/lib/cups/backend and make it executable

PATH=/usr/sbin:/sbin:$PATH

# uncomment for debugging purposes
#set -x

# if no arguments answer with printer model and quit
# the text in the echo can be retrieved by running manually /usr/lib/
cups/backend/usb
if [ "$#" = "0" ]
  then echo 'direct usb://HP/LaserJet "HP LaserJet" "HP LaserJet"
  exit 0
fi

# if printer is not started yet start it up using FS20ST2
# replace "Hewlett" with some word shown in your lsusb output when
printer is powered on
if [[ `lsusb | grep Hewlett` = "" ]]
then
    n=1
    ret=1

    while [ "$n" -le 3 -a "$ret" -ne 0 ]
    do
        # power up the printer using fhem
        echo "set PrinterCellar on-for-timer 640" | /usr/bin/nc -q 0
127.0.0.1 7072 > /dev/null 2>&1
        n=`expr "$n" + 1`
        ret=$?
    done
fi

# repeat lsusb until printer is detected
# replace "Hewlett" with some word shown in your lsusb output when
printer is powered on
while [[ `lsusb | grep Hewlett` = "" ]]
do
          sleep 1
done

# give control to the original backend
# the text for the DEVICE_URI can be retrieved by running manually /
usr/lib/cups/backend/usb, it's the second string after the word
"direct"
export DEVICE_URI="usb://HP/LaserJet"
exec -a "${DEVICE_URI}" /usr/lib/cups/backend/usb "$@"

Gruss,

Csaba

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: Guest am 07 September 2011, 23:00:45
Originally posted by: <email address deleted>

Wow, das ist wirklich cool. Bitte ins FhemWiki einstellen!

Ciao, Arno


2011/8/31 Csaba :
> Hallo
>
> Die Idee hat mir gefallen, deshalb habe ich es auch auf meiner
> Guruplug mit SlackWare umgesetzt, Drucker haengt direkt am usb port.
> Es gab schon einiges das geaendert werden musste deshalb anbei eine
> kurze Zusammenfassung.
> Der Skript soll unter /usr/lib/cups/backend landen z. B. mit dem Namen
> hpusb und muss ausfuehrbar sein.
> In /etc/cups/printers.conf DeviceURI usb://HP/LaserJet auf DeviceURI
> hpusb://HP/LaserJet aendern und speichern, danach cups neustarten.
>
> #! /bin/bash
> # put this script under /usr/lib/cups/backend and make it executable
>
> PATH=/usr/sbin:/sbin:$PATH
>
> # uncomment for debugging purposes
> #set -x
>
> # if no arguments answer with printer model and quit
> # the text in the echo can be retrieved by running manually /usr/lib/
> cups/backend/usb
> if [ "$#" = "0" ]
>  then echo 'direct usb://HP/LaserJet "HP LaserJet" "HP LaserJet"
>  exit 0
> fi
>
> # if printer is not started yet start it up using FS20ST2
> # replace "Hewlett" with some word shown in your lsusb output when
> printer is powered on
> if [[ `lsusb | grep Hewlett` = "" ]]
> then
>    n=1
>    ret=1
>
>    while [ "$n" -le 3 -a "$ret" -ne 0 ]
>    do
>        # power up the printer using fhem
>        echo "set PrinterCellar on-for-timer 640" | /usr/bin/nc -q 0
> 127.0.0.1 7072 > /dev/null 2>&1
>        n=`expr "$n" + 1`
>        ret=$?
>    done
> fi
>
> # repeat lsusb until printer is detected
> # replace "Hewlett" with some word shown in your lsusb output when
> printer is powered on
> while [[ `lsusb | grep Hewlett` = "" ]]
> do
>          sleep 1
> done
>
> # give control to the original backend
> # the text for the DEVICE_URI can be retrieved by running manually /
> usr/lib/cups/backend/usb, it's the second string after the word
> "direct"
> export DEVICE_URI="usb://HP/LaserJet"
> exec -a "${DEVICE_URI}" /usr/lib/cups/backend/usb "$@"
>
> Gruss,
>
> Csaba
>
> --
> To unsubscribe from this group, send email to
> fhem-users+unsubscribe@googlegroups.com
>



--
Arno Willig

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: Guest am 08 September 2011, 14:03:51
Originally posted by: <email address deleted>

Hi,
da sich ja hier recht viele FB-user tummeln: Gibt es auch einen
Lösungsansatz, wenn fhem auf der FB läut, der Drucker aber am PC
hängt?
Würde heissen, man müsste sich in die Printqueue des PC einhängen und
bei Bedarf den fhem-Schalter via Fritzbox triggern.
Was müsste man auf dem PC ein/umbauen, was auf der FB? Kriegt das
jemand hin?
Gespannte Gruesse,
Uli

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: Guest am 08 September 2011, 14:58:22
Originally posted by: <email address deleted>

On 09/08/2011 02:03 PM, UliM wrote:
> da sich ja hier recht viele FB-user tummeln: Gibt es auch einen
> Lösungsansatz, wenn fhem auf der FB läut, der Drucker aber am PC
> hängt?

Wenn Du mit PC einen Linux-PC mit cups meinst, dann musst Du fast
garnichts ändern (nur statt mit nc auf 127.0.0.1 auf die IP vom FHEM
connecten).

Wenn Du ein anderes Printsystem oder Betriebssystem nutzt, müsstest Du
schon sagen, welches.

Grüße,
Thomas

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: Guest am 08 September 2011, 16:46:40
Originally posted by: <email address deleted>

Hi,
oops - Windows 7 :-)
=8-)

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: Guest am 08 September 2011, 21:04:33
Originally posted by: <email address deleted>

Hallo,

hier noch ein kleiner Nachtrag zu meinem ursprünglichen Posting.

Unter Mac OS X Lion habe ich immer mit Problemen kämpfen müssen,
welche ich auf das Backend als Shell-Skript zurückführen konnte.
Daher habe ich das Skript durch ein Binärprogramm ersetzt, welches das
Shell-Skript aufruft.
Auch gab es Probleme mit den relativen Pfaden, daher habe ich alle
Pfade jetzt absolut definiert.

Das Backend (fs3800) sieht jetzt so aus:

#include

int
main (int argc, const char *argv[]) {

   system ("/bin/sh -c /usr/libexec/cups/backend/fs3800.sh > /dev/null
2>&1");
   return (execv ("/usr/libexec/cups/backend/lpd", argv));
}

Und das dazugehörige Shell-Skript dann so:


#!/bin/bash

n=1
ret=1

echo "set FS3800 on-for-timer 1920" | \
   nc 127.0.0.1 7072 >> /dev/null 2>&1

while [ "$n" -le 3 -a "$ret" -ne 0 ]
do
   echo "set FS3800 on-for-timer 1920" | \
      nc 127.0.0.1 7072 > /dev/null 2>&1

   n=`expr "$n" + 1`

   ping -t 15 -o fs3800.domain.com > /dev/null 2>&1
   ret=$?
done

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: csaba am 09 September 2011, 13:17:27
                                               

Hi

Als Ansatz:

Moeglichkeit 1: netcat fuer windows installieren und 'nen vbscript
schreiben womit man
                       echo "set FSmeinDrucker on-for-timer 960" |
pfad_zu_nc.exeusr\nc.exe meineFHEMBoxIP 7072
                       ausfuehrt. Musst nur achtgeben in fhem.cfg das
fhem auch die externe netzwerkkarte belauscht, da sie default nur auf
der loopback antwortet.
                       Naeheres findest Du bei
http://www.codeproject.com/KB/vbscript/Exsead9.aspx
                       Den erstellten vbscript auf den Desktop stellen
und wann immer Du drucken moechtest ein doppel klick drauf genugt vor
dem drucken.
Moeglichkeit 2: such mal im forum nach "Grundriss mit Schaltflächen",
da wird beschrieben wie Du eine html Datei erstellen kannst mit links
oder buttons um den Drucker ein-/aus- zuschalten
Moeglichkeit 3: Falls Du einen linux server hast kannst Du dort cups
installieren. Cups unterstuezt remote Drucker das heisst Du kannst
deinen Windows Drucker in Cups einbinden somit
waere                die Beschriebene

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: Guest am 09 September 2011, 18:36:58
Originally posted by: <email address deleted>

Hi Csaba,
vielen Dank für Deine Ansätze.
zu 1) Wenn ich jedes mal doppelklicken muss, bevor ich drucke, kann
ich auch im fhem-frontend klicken. Das sympathische am urspr. Ansatz
ist ja, dass der Drucker automatisch eingeschaltet wird, sobald man
einen Druckauftrag absetzt.
zu 2) jepp, der zugehörige Wiki-Eintrag stammt von mir :-)  Würde aber
auch nen extra Klick erfordern, so weit bin ich ja schon :-)
zu 3) Die Fritzbox ist Linux-basiert. Leider weiss ich nicht ob cups
Bestandteil des FB-Linux ist.

Am liebsten wäre mir ne Lösung wie oben beschrieben: Irgendetwas, das
den fhem-trigger sendet, sobald der Drucker in Windows einen
Druckauftrag erhält.
Obwohl - genaugenommen ist der Drucker an ein QNAP-NAS TS109-II
angeschlossen, vll geht ja damit was?
Grüßle,
Uli

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: Guest am 09 September 2011, 22:42:38
Originally posted by: <email address deleted>

On 09/09/2011 06:36 PM, UliM wrote:
> Obwohl - genaugenommen ist der Drucker an ein QNAP-NAS TS109-II
> angeschlossen, vll geht ja damit was?

Naja, also doch Linux. Dann sollte das doch relativ einfach sein. Ich
verwende auch ein QNAP TS119P und hatte vorher ein TS109-II, und daher
bin ich mir relativ sicher, dass das auch cups ist unter der Haube.

Grüße,
Thomas

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: csaba am 09 September 2011, 22:53:32
                                               

Hi

Entschuldigung aber mein vorheriger Post ist so unbeendet geraten da
ich auf den falschen Knopf gedrueckt hab.
Also es sieht so aus das dein QNAP debianisiert werden kann
(wewewepunktcyriuspunktcom_debian_orion_qnap_ts-109) somit kannst du
hoechst wahrscheinlich auch cups und fhem (naturlich kann fhem auch
auf der fritzbox bleiben) draufspielen. Danach muesste man das backend
zum debian anpassen. Das heisst aber auch das der QNAS quasi-permanent
eingeschaltet sein muss (in der nacht wahrscheinlich nicht)
Cups auf den fritzbox zu kriegen waere wahrscheinlich kompliziert
wegen der dependencies  und er ist auch im Freetz nicht drin.
Zu windows habe ich nur eine Seite bei google gefunden die eventuell
als inspiration dienen koennte wenn man den prnjobs,vbs auch finden
koennte.
Google mal nach "dont-overlook-these-windows-xp-vbscript-print-
utilities". Auf meinem pc gibt es aber sowas nicht.

Gruss,

Csaba

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com
Titel: Re: FHEM und Drucker bei Bedarf einschalten (cups)
Beitrag von: csaba am 09 September 2011, 23:10:08
                                               

Hallo Arno

Dazu benotige ich einen user zum Zugang zur Wiki. Wenn moeglich ...

Gruss,

Csaba

> Wow, das ist wirklich cool. Bitte ins FhemWiki einstellen!

> Ciao, Arno

--
To unsubscribe from this group, send email to
fhem-users+unsubscribe@googlegroups.com