Bei Druckauftrag Drucker automatisch einschalten u. wieder ausschalten | Idee/Anleitung | Tasmota

  • Einleitung:

    Ich habe einen Laserdrucker (HP), den ich bisher für einen Ausdruck manuell eingeschaltet habe. Natürlich habe ich dann auch gerne vergessen ihn wieder auszuschalten (Standby 7 Watt).

    Problemstellung:

    So habe ich überlegt wie ich mit einer smarten Steckdose und der Firmware Tasmota es umsetzen kann, dass der Drucker automatisch bei einem Druckauftrag ein und nach dem Druck wieder ausgeschaltet wird.

    Der Druckertreiber von HP unterstützt bei einem Druckjob den Aufruf einer URL (Tasmota-Steckdose) leider nicht (warum können das Treiber heutzutage nicht?).

    Nach etwas hin und her bin ich zu einer Lösung gekommen, die ich hier gerne vorstellen möchte:

    Lösung:

    Ich habe CUPS (Druckersoftware für Linux) auf einem Raspberry installiert, der mit ioBroker sowieso immer an und im Netzwerk ist. Vom PC drucke ich nun nicht mehr direkt zum Drucker, sondern zu CUPS. CUPS wiederum schickt das Dokument an den Drucker, der es wiederum ausdruckt. Das klappt reibungslos und ohne spürbare Zeitverzögerung.

    CUPS unterstützt leider auch keinen Aufruf einer URL, wenn ein Druckauftrag vorliegt.

    Dafür gibt es aber das kleine Tool "inotifywait" (apt-get inotify-tools). Ein Script überwacht mittels inotifywait nun das Spoolverzeichnis von CUPS. Sobald dort ein Druckjob auftaucht, ruft das Script die URL der Steckdose auf und schaltet sie ein. In der Steckdose ist eine Pulstime von 900 Sekunden (Wert 1000) eingestellt und die Steckdose schaltet den Drucker nach 15 Minuten wieder aus.

    Das Script pausiert 870 Sekunden um bei mehreren Druckaufträgen mehrfache Einschaltungen zu verhindern. Danach überwacht es wieder das Verzeichnis und wartet auf den nächsten Druckauftrag.

    Vorgehensweise:

    CUPS installieren

    Drucker in CUPS auswählen

    Druckertreiber installieren und Pfad vom Drucker hinterlegen

    Das folgende Script irgendwo nach Wahl abspeichern (und anpassen) und als Systemdienst (/etc/systemd/system/abcdefg.service) laufen lassen.

    Script:

    Verbesserungen:

    Ich habe noch zusätzlich eine Zeitschaltung (von 8 bis 20 Uhr) eingefügt, sowie eine Logfunktion eingebaut. Wer an dem Codeschnipsel Interesse hat, bitte melden.

    Meine Hardware@home: Fritzbox 7590AX, 15xTasmota-Geräte, Syno NAS, Raspberry Pi 4 f. PiHole, ioBroker, Docker, TasmoAdmin, Portainer

    Einmal editiert, zuletzt von Marc (24. August 2020 um 02:35)

  • Finde ich total spannend, sitze allerdings gerade vor den Umkleidekabinen eines Klamotten-Outlets und gebe Kommentare zur Auswahl meiner Liebsten ab. Schaue ich mir nach dem Wochenende genauer an. So eine Lösung brauche ich auch! Kannst du auch unter Mein Projekt posten.:thumbup:

  • gebe Kommentare zur Auswahl meiner Liebsten ab

    Du Ärmster... das ist ja noch schlimmer als ein Ikea-Besuch. =O:)

    So eine Lösung brauche ich auch!

    Ich wundere mich immer noch, dass kein Druckertreiber, den ich ausprobiert habe, den einfachen Aufruf einer URL unterstützt. Ich fand eine solche Funktion so nahe liegend. Auch das es kaum dazu in anderen Foren was zu finden gibt, empfand ich etwas befremdlich.

    unter Mein Projekt posten

    Bitte verschiebe es, damit es nicht zweimal im Forum rumgeistert.

    Meine Hardware@home: Fritzbox 7590AX, 15xTasmota-Geräte, Syno NAS, Raspberry Pi 4 f. PiHole, ioBroker, Docker, TasmoAdmin, Portainer

  • Also dein Skript funktioniert auf mit anderen Druckern, die über das CUPS-Subsystem installiert sind. Bei mir ist es ein Kyocera Ecosys M5521cdn. Der relevante Vorgang ist ja zu überwachen, ob eine Datei geschrieben wurde.

    Weil du es auf einem Raspberry Pi benutzt, taucht ein "Problem" nicht auf, das es auf "normalen" Linux-Systemen gibt: Auf dem Raspi darf der Benutzer pi Administrationsarbeiten ohne Eingabe des Passworts machen. Das geht auf anderen Systemen nicht, denn dort müsste man das Skript mit sudo ... starten und entsprechend das Admin-Passwort eingeben.

    Folgende Lösung bietet sich an: Das Skript wird automatisch beim Systemstart als Systemd-Dienst gestartet. Zu diesem Zeitpunkt gibt es sowieso nur den Nutzer root. Der Code dafür sieht z. B. so aus:

    Pfade und Dateinamen musst du natürlich entsprechend deinen Gegebenheiten anpassen. Dieses Skript bitte speichern unter Pfad und Namen:

    /etc/systemd/system/smart-printer.service und mit sudo systemctl start smart-printer.service starten und abschließend mit der Eingabe sudo systemctl enable smart-printer.service dafür sorgen, dass es bei jedem Systemstart automatisch geladen wird. Was nun nicht mehr zu sehen ist, sind die Echo-Meldungen. Das macht m. E. aber auch nichts. Wahrscheinlich kann man die Meldungen sowieso unterdrücken (oder in ein Log-File schreiben).

    So läuft es schon auf meinem Linux Produktivsystem (Ubuntu 20.04). Danke für die tolle Idee, die du da hattest! Ich werde schauen, ob ich für Windows 10 portiert bekomme. Wenn das gelingt, dann werden sich viele Smart-Home-Bastler freuen! Kleiner Wermuthstropfen: Manche Drucker wollen lieber heruntergefahren werden und können es (auf Dauer) nicht so gut haben, wenn ihnen einfach der Saft abgedreht wird. Aber das ist ein Sekundärthema...

  • Wenn dieser Drucker als CUPS-Drucker (Common Unix Print System) installiert wird bzw. installiert werden kann, dann geht das, weil das Script nur darauf lauert, ob im Verzeichnis /var/spool/cups/ eine Datei geschrieben wird. Die Datei wird zunächst dort abgelegt und dann zum Drucker gesendet. Es gibt aber auch Drucker, die unter Linux mit proprietären Treibern und Methoden angesteuert werden.

    Sag mal, welchen Drucker du anschaffen willst, dann können wir dir sagen, ob er von CUPS unterstützt wird.

  • Jepp, coole Lösung.

    Wäre für mich ideal nachdem mein Netzwerklaserdrucker eh über Cups am Raspi läuft.

    Allerdings muss der dann noch manuell eingeschaltet (Powerbutton) werden wenn der Strom weg war. Da funzt das leider nicht.

    @Maxime2020 ... abgesehen von der Antwort von JoergZ zur Lösung von Marc wäre zu klären ob der Standby Stromverbrauch des Laserdruckers den so viel höher ist als der eines extra angeschafften Raspi's. Wenn nicht würde ich gleich einen Netztwerkfähigen Laser nehmen der dann prinzipiell im Standby läuft.

    Ich würde nur drauaf achten das so ein Drucker möglichst nicht nur mit Windows läuft sondern es auch Linux Treiber dafür gibt. Sollte dann doch mal eine Umstellung der Betriebssysteme geben oder das Ganze über nen Printserver (Cups) laufen ist das mit Linux vermutlich einfacher. Zumal es auch für Android Cups Client gibt bzw. in meinem Android9 schon von Haus aus enthalten ist (Drucken vom Smartphone/Tablett)

    Möchtest du gleich über Cups bzw Printserver dann drauf achten das der Drucker auch wirklich an ist wenn er mit Strom versorgt wird und nicht wie meiner erst immer noch zusätzlich seperat eingschaltet werden muss.

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • Davon hätte ich vor 2-3 Jahren geträumt.

    Da ich aber aktuell fast nichts mehr drucken muss (2-3 Blätter im Jahr) macht es für mich keinen Sinn mehr. Für Leute die mehr drucken aber sehr interessant.

    grüsse aus Heidelberg

    ca. 100 Tasmota Geräte teilweise mit SML Script.

    Alexa, Sonos, Pilot APP zur Steuerung, Domoticz und TasmoAdmin auf Raspberry mit Docker

  • wäre zu klären ob der Standby Stromverbrauch des Laserdruckers den so viel höher ist als der eines extra angeschafften Raspi's. Wenn nicht würde ich gleich einen Netztwerkfähigen Laser nehmen der dann prinzipiell im Standby läuft.

    Das ist in der Tat absolut zu berücksichtigen, wenn der Raspi nur für diesen Zweck (Druckserver) läuft. Wenn ohnehin bereits andere Serverdienste dort laufen (IOBroker, Videorecorder, etc.) - das Teil also 24/7 im Betrieb ist - dann belastet ihn ein Druckserver und -spooler kaum zusätzlich.

    Wie viel Watt ein Drucker im Standby zieht, ist in der Tat erstaunlich: Mein HP Officejet 6500 (Drucker/Scanner/Fax) zog sich im Standby locker 7 - 9 Watt rein, der Kyocera 4-C Farblaser (+Scanner +Fax) Modell M5521cdn braucht im Standby nur 2 Watt. Ich messe lieber nicht nach, was der Eigenverbrauch der S20 ist, an der er hängt....

  • Die S20 sollte mit Dynamic Sleep so bei etwa 0,5 bis 0,7 Watt liegen.

    Was ich mich nur Frage: mein Laserdrucker braucht nach dem Einschalten ca. 1 Minute bis er online ist. (WLAN-Drucker) kommt da von Cups nicht direkt ne Fehlermeldung (auch wenn die vielleicht nur irgendwo im Log auftaucht).

    --- Signaturen werden völlig überbewertet --- X/

  • Da CUPS die Warteschlangen des/der Druckers verwaltet, sollte der Server warten können, bis der Drucker sich online meldet und dann erst die Daten übertragen. Bei mir ist der Drucker zwar per LAN angeschlossen aber auch nicht gleich nach der Energiezufuhr empfangs- und druckbereit. Dennoch keine Probleme mit dem Ausdruck.

  • sollte der Server warten können, bis der Drucker sich online meldet und dann erst die Daten übertragen.

    Sollte nicht nur, ist so.

    Solange der Drucker offline ist liegt der Druckauftrag als "offen" im Cups cache bis der Drucker online geht. Unabhängig ob LAN/WLAN/USB

    benzino77 Tasmocompiler

    Gitpod Master Release

    Gitpod Development Release

    Sonoff-Basic / Sonoff-RF / Sonoff-Touch / Sonoff S20 / PowStro Basic / MagicHome / Sonoff-RF-Bridge mit diversen 433MHz RF Sender/Empfänger / Shelly_1 / ESP-WiFi-Dimmer / Gosund SP111 / ESP12E / WEMOS D1 Mini / ESP32Cam

    Sensoren: BME280/BMP280/HC-SR501/HC-SR04/ACS712/INA219/MHZ19B/DS3231

    Alexa Sprachsteuerung

    mosquitto/bash/html/cgi auf Wyse5070

  • Bei mir läuft das Script nun seit rund 2,5 Wochen. Ich lasse mir (zur Zeit noch) zur Sicherheit eine E-Mail zusenden und ein Log schreiben, wenn das Script den Drucker einschaltet. Bisher war die Trefferquote 100%, sprich kein Einschaltvorgang, wo kein Druckauftrag vorlag.

    Zum Stromverbrauch: Mein HP-Laser schluckt ohne Rot zu werden 7 Watt. Der Raspberry ist dank anderer Dienste sowieso immer online.

    Dazu kommt natürlich auch noch der Spielfaktor. Drucken macht wieder Spaß. Ich muss immer leicht lächeln, wenn ich den Druckerbutton anvisiere. ;)

    Meine Hardware@home: Fritzbox 7590AX, 15xTasmota-Geräte, Syno NAS, Raspberry Pi 4 f. PiHole, ioBroker, Docker, TasmoAdmin, Portainer

  • Bisher war die Trefferquote 100%, sprich kein Einschaltvorgang, wo kein Druckauftrag vorlag.

    Das wird auch so bleiben. Da hattest du mit dem Script eine richtig gute Idee! Das einzige Problem, was auftreten könnte, ist wenn du einen sehr großen Druckauftrag hast, der länger als deine Pausenzeit von 870 Sekunden braucht. Es macht übrigens nichts, wenn eine Steckdose, die bereits eingeschaltet ist, nochmals den Einschaltbefehl bekommt.

  • wenn du einen sehr großen Druckauftrag hast, der länger als deine Pausenzeit von 870 Sekunden braucht

    Nach meinem Verständnis müsste für ein Problem (Abschaltung vom Drucker während des Drucks) erstens der Druckjob genau knapp vor diesem Zeitfenster an den Drucker zu Ende übertragen sein, sowie der Druckerspeicher im Drucker mehr Seiten zum Drucken fassen wie er für 30 Sekunden (870s bis 900s) zum Drucken benötigt.

    Meine Hardware@home: Fritzbox 7590AX, 15xTasmota-Geräte, Syno NAS, Raspberry Pi 4 f. PiHole, ioBroker, Docker, TasmoAdmin, Portainer

  • Wenn man solche großen Druckaufträge hat, kann man die Sleepzeit im Script vergrößern und die Pulstime danach anpassen.

    Alles andere ist kompliziert(er).

    Meine Hardware@home: Fritzbox 7590AX, 15xTasmota-Geräte, Syno NAS, Raspberry Pi 4 f. PiHole, ioBroker, Docker, TasmoAdmin, Portainer

  • Wenn man solche großen Druckaufträge hat, kann man die Sleepzeit im Script vergrößern und die Pulstime danach anpassen.

    Schon klar, aber das weiß man meistens vorher nicht. Eine komplexe Plot-Datei braucht schon mal eine gewisse Zeit. Andererseits würde die Verlängerung der Sleepzeit in den meisten Fällen nur die Leerlaufzeit und den Stromverbrauch erhöhen. Das ganze Thema (Sleepzeit) ist ein bisschen akademisch. Wir sollten es wieder einpacken...

  • Hallo Marc.

    Mit dem Drucker das bekomme ich nicht hin. Ich habe einen Brother HL 2030 lokal am USB Port des Raspi angeschlossen. In CUPS ist er auch eingerichtet. Kann vom Mac, vom Ipad von W10 darauf drucken. wenn ich den s

    Startbefehl aus deiner Config in den Browser eingebe kann ich auch drucken. Wenn ich aber die Datei /etc/systemd/system/abcdefg.service speichere und drucken möchte passiert nichts. Wo ist mein Fehler?

    Im Vorraus danke für die Hilfe.

    LG

    Steffen

    Das Leben ist viel zu kurz, um sich über Nichtigkeiten aufzuregen.;)

  • Bei mir liegt folgender Inhalt in der Datei => /etc/systemd/system/cupstasmota.service

    Unter => /pfad/zum/script/cupstasmota.sh (Pfad anpassen!)

    liegt das eigentliche Script.

    Ich habe dann einmal einen Reboot gemacht, seitdem funktioniert es.

    Ich bin mit den Systemdiensten aber nicht der Profi. Die Anleitung dafür habe ich selbst "ergoogelt". ;)

    Meine Hardware@home: Fritzbox 7590AX, 15xTasmota-Geräte, Syno NAS, Raspberry Pi 4 f. PiHole, ioBroker, Docker, TasmoAdmin, Portainer