Avr 162013
 

J’étais déjà très content de ma Raspberry Pi en tant que serveur CUPS pour ma HP LaserJet 4 : elle ne consomme que quelques watts, ce qui permet de la laisser tourner en permanence sans problème de conscience en matière d’économie d’énergie.

Elle est donc prête à recevoir un travail d’impression à tout moment, depuis n’importe quel ordinateur de mon réseau, ce qui est plutôt pratique.

Par contre, ma vieille HP LaserJet n’est pas très économique, d’abord parce la technologie laser est gourmande en elle-même, et ensuite parce qu’on ne se souciait pas trop de cette problématique dans les années 90. D’après la fiche technique : 660 Watts en mode marche, 55 Watts en veille / sommeil.

Et puis, même au repos, elle est assez bruyante.

Je ne l’allume donc que quand j’en ai besoin, et puis je l’éteins dès que je pense que je n’en aurai plus besoin, ce qui n’est pas trop fastidieux quand je suis au bureau mais bien plus quand je suis ailleurs.

Je me suis donc dit récemment qu’il me restait un canal non utilisé sur le relais électrique branché à ma Raspberry Pi et que j’allais l’utiliser pour gérer automatiquement l’allumage et l’extinction de ma LaserJet !

Voici donc comment j’ai mis en place le script d’allumage qui s’exécute quand un travail d’impression est reçu par CUPS, avant que le travail ne soit envoyé à l’imprimante, et le script d’extinction qui éteint l’imprimante après un temps défini d’inactivité.

 

Script d’allumage

Voici le script d’allumage que j’ai appelé /root/prnpoweron.sh (penser à le chmod +x )

#!/bin/bash

# on consigne la date à laquelle ce script est exécuté
date +"%Y-%m-%d %H:%M:%S" > /etc/cups/power.lock

# le canal du relais est commandé par le pin 11
power=`/usr/local/bin/gpio read 0`

# si l'imprimante est éteinte
if [ $power -eq 0 ]
then
        /usr/local/bin/gpio mode 0 out ;
        /usr/local/bin/gpio write 0 1 ;
        # attendre une minute que l'imprimante démarre
        sleep 60 ;
fi

Ce script sera lancé par tea4cups quand un travail d’impression arrivera pour cette imprimante.

 

Installation de tea4cups

  • Copier tea4cups.conf dans le dossier de configuration de CUPS, habituellement /etc/cups/
  • Copier tea4cups dans le dossier des backends CUPS, habituellement /usr/lib/cups/backend/
  • Modifier les droits du fichier tea4cups :
 chown root:root /usr/lib/cups/backend/tea4cups ; chmod 700 /usr/lib/cups/backend/tea4cups ;

 

Configuration de tea4cups

  • Éditer le fichier /etc/cups/tea4cups.conf et rajouter les lignes :
serialize : yes
prehook_poweron : /root/prnpoweron.sh
  • Éditer le fichier /etc/cups/printers.conf et rajouter « tea4cups:// » devant l’URI de l’imprimante à gérer :
DeviceURI tea4cups://usb://HP/LaserJet%204%20Plus
  • Redémarrer CUPS :
service cups restart

 

Dès à présent, la Raspberry devrait allumer l’imprimante quand on lui envoie un travail d’impression.

 

Script d’extinction

Voici le script d’extinction que j’ai appelé /root/prnpoweroff.sh (penser à le chmod +x ), et qui éteint l’imprimante si la date du dernier travail d’impression est supérieure à 30 minutes.

#!/bin/bash
datepoweron=`cat /etc/cups/power.lock`
datepoweroff=`date --date "$datepoweron 30 minutes" +"%s"`
datenow=`date +"%s"`

if [ "$datenow" -gt "$datepoweroff" ]
then
    /usr/local/bin/gpio mode 0 out ;
    /usr/local/bin/gpio write 0 0 ;
fi

 

Configuration du cron

Il suffit d’éditer les tâches cron

crontab -e

Et de rajouter le script d’extinction toutes les 5 minutes

*/5 *   * * *   /root/prnpoweroff.sh

 

Sources :

Tea4Cups : http://www.pykota.com/software/tea4cups/download
Calculs dates : http://www.unix.com/tips-tutorials/31944-simple-date-time-calulation-bash.html