Shell para extrair informações de impressoras Brother
Publicado por Incrivel Monstro Verde Cabeludo (última atualização em 03/09/2018)
[ Hits: 2.928 ]
Download le_estado_impressoras_brother.sh
Este script, muito simples, extrai informações de impressoras Brother, como nível do toner (com nivel de alerta), contador de páginas, páginas impressas no periodo, e monta um página html para consulta.
Foi testado com vários modelos de Brother (mas não todos) e deve rodar no cron do linux, para buscar dados da impressora e gerar estatísticas. Opcionalmente, pode fazer FTP para algum site, também.
Mude as variáveis no inicio do script, de acordo com a sua preferência, e informe o IP das impressoras a serem consultadas, conforme o modelo.
Utilizo na empresa em que trabalho, que possui mais de 30 impressoras e serve para acompanhar uso dos usuários e o nível dos toners, para substituição.
P.S.: para que o script pegue o nome/contato da impressora, é necessário, na configuração da impressora, feita via browser, configurar as opções "Contact" e "Location".
#!/bin/bash
# (C) serginho was here 20out2016 - IncrivelMonstroVerdeCabeludo@hotmail.com
#
# Script simples para gerar informacoes (Impressora, nivel de toner, paginas impressas...)
# a informacao de paginas impressas, sera sempre a partir do primeiro dia do mes (que houver leitura da impressora)
# o script precisa rodar no cron
# ex: 30 8,10,12,16 * * 1-5 /usr/local/bin/le_estado_impressoras_brother.sh
#
# Paginas impressoras BROTHER - gera estatistica e envia por ftp ao site
# http://localhost/status_impressoras.html
#
# Variaveis configuraveis
FILE_TEMP1="/tmp/x1"
FILE_TEMP2="/tmp/x2"
# onde ficara pagina html gerada
DIR_HTML="/tmp"
# nome do arquivo html
HTML="status_impressoras.html"
ARQ_HTML="$DIR_HTML/$HTML"
# arquivo que guardara estatisticas das impressoras
ARQ_CSV="/tmp/toner_level.txt"
# Percentual de alerta toner. Se < que ...
NIVEL_ALERTA=20
#
HORA=`date +%H`;
CONTGERAL=0
CONTA_PAGINAS_TOTAL=0
# Coloque aqui os IPs das impressoras segundo o modelo da mesma
# para modelos DCP-L5652DN e compativeis
arrayIP=('192.168.77.80' '192.168.77.88' '192.168.77.224' '192.168.77.225' '192.168.77.115' '192.168.77.146' '192.168.77.144' '192.168.77.86' '192.168.77.162');
# para modelos MFC-J6520DW e compativeis (color comunicacao)
arrayIP2=('192.168.77.168');
# para modelos 7440 e 8085 e 8080 - admin/access
arrayIP3=('192.168.77.128' '192.168.77.244' '192.168.77.214' '192.168.77.161' '192.168.77.67' '192.168.77.179' '192.168.77.141' )
arrayIP3nome=('Almoxarifado Tipo4' 'Suporte Tipo4' 'Tecnica Tipo2' 'Vendas Tipo4' 'RH Tipo2' 'Atendimento' 'Compras Color Tipo 1')
# para lexmark
arrayIP4=('192.168.77.149')
# para modelo DCP-8157DN
arrayIP5=('192.168.77.215' '192.168.77.222' '192.168.77.211')
# -------------------------
#------ FUNCOES --------
guarda_em_arquivo () {
DATE=`date +%d-%m-%Y`
TL=$(($4 * 100/50))
#soh guarda no arquivo quando hora <= 10
# if [ $HORA -le 8 ]; then echo "$DATE, $1, $2, $3, $TL" >> $ARQ_CSV; fi
# guarda sempre
echo "$DATE, $1, $2, $3, $TL" >> $ARQ_CSV
}
CONTA_PAGINA() {
ip=$1
LAST_CONT_PAG=$2
mes=`date +%m`
ano=`date +%Y`
FILE=$ARQ_CSV
pattern="$mes-$ano";
result=`grep $ip $FILE | grep $pattern | head -1`
DT_INI=`echo $result | cut -d\, -f1`
PAG_INI=`echo $result | cut -d\, -f4`
result=`grep $ip $FILE | grep $pattern | tail -1`
DT_FIM=`echo $result | cut -d, -f1`
PAG_FIM=`echo $result | cut -d, -f4`
# pega contagem atual, senao busca do arquivo (pq nem todas consultas sao gravadas)
if [ $LAST_CONT_PAG > 0 ]; then PAG_FIM=$LAST_CONT_PAG; fi
CONT=$((PAG_FIM-PAG_INI))
CONTA_PAGINAS_TOTAL=$((CONTA_PAGINAS_TOTAL+CONT))
}
MONTA_PAGINA() {
i=$1
LOCATION=$2
PAGINAS_IMPRESSAS=$3
TN=$4
echo "<tr><td>(<a href=http://$i>$i</a>) - <b>$LOCATION</b></td>" >> $ARQ_HTML
echo "<td align=right><b>$PAGINAS_IMPRESSAS</b></td>" >> $ARQ_HTML
echo -n "<td>" >> $ARQ_HTML
# -- CALC toner level
if [ $TN -le $NIVEL_ALERTA ]; then
TXT_TN="<font color=red>$TN %</font>"
else
TXT_TN="$TN %"
fi
echo "$TXT_TN </td>" >> $ARQ_HTML
guarda_em_arquivo "$LOCATION" $i $PAGINAS_IMPRESSAS $TONER_LEVEL
# chama contador
CONTA_PAGINA $i $PAGINAS_IMPRESSAS
echo "<td><font face=arial size=1>Entre $DT_INI ($PAG_INI) e $DT_FIM ($PAG_FIM):</font> $CONT </td></tr>" >> $ARQ_HTML
if [ -f $FILE_TEMP1 ]; then rm $FILE_TEMP1; fi
if [ -f $FILE_TEMP2 ]; then rm $FILE_TEMP2; fi
((CONTGERAL++))
}
# end FUNCTION
#----------------------------------------------------
# monta cabecalho html
echo "<html><title>Status Impressoras</title>
<head>
<meta charset=\"UTF-8\">
</head>
<style> /* unvisited link */
a:link {
color: black;
text-decoration: none;
}
a:visited {
color: black;
text-decoration: none;
}
a:hover {
color: black;
text-decoration: underline;
}
a:active {
color: black;
text-decoration: none;
}
table-hover thead tr:hover th, .table-hover tbody tr:hover td {
background-color: #6699ff;
}
</style>
<body>
<font face=arial size=5>Relatorio gerado em `date` <font size=3>
<table class=\"table table-hover\" style=\"border:1px solid black;\">
<tr style=\"border:1px solid black; background-color=#eaeded;\">
<td>Local</td><td>Páginas impressas</td><td>Nivel Toner</td> <TD>Consumo</TD></tr>" > $ARQ_HTML
# IMPRESSORA TIPO 1
for i in "${arrayIP[@]}"
do
if fping -c 2 $i; then
wget --tries=3 http://$i/general/information.html?kind=item -O $FILE_TEMP1
PAGINAS_IMPRESSAS=`grep Counter $FILE_TEMP1 | sed 's/<!/\n/g' | grep -A1 Counter | tail -1 | cut -d\> -f4 | cut -d\< -f1`
wget --tries=3 http://$i/general/status.html -O $FILE_TEMP2
TONER_LEVEL=`grep black $FILE_TEMP2 | sed 's/</\n/g' | grep bla -A3 | head -1 | cut -d= -f5 | sed 's/[^0-9]//g'`
LOCATION=`grep black $FILE_TEMP2 | sed 's/</\n/g' | grep Contac -A3 | tail -1 | cut -d\> -f2`
TN=$(($TONER_LEVEL * 100/56))
MONTA_PAGINA $i $LOCATION $PAGINAS_IMPRESSAS $TN
else
echo "<tr><td>$i <font color=red>desligada</font></b></td><td><b> - </td><td></td></tr>" >> $ARQ_HTML
fi
done
# IMPRESSORA TIPO 2
for i in "${arrayIP2[@]}"
do
if fping -c 2 $i; then
wget --tries=3 http://$i/general/information.html?kind=item -O $FILE_TEMP1
PAGINAS_IMPRESSAS=`grep Counter $FILE_TEMP1 | sed 's/</\n/g' | grep -A2 Counter | tail -1 | cut -d\> -f2`
wget --tries=3 http://$i/general/status.html -O $FILE_TEMP2
TONER_LEVEL=`grep black $FILE_TEMP2 | sed 's/</\n/g' | grep bla -A3 | head -1 | cut -d= -f5 | sed 's/[^0-9]//g'`
LOCATION=`grep black $FILE_TEMP2 | sed 's/</\n/g' | grep Contac -A3 | tail -2 | cut -d\> -f2`
TN=$(($TONER_LEVEL * 100/56))
MONTA_PAGINA $i $LOCATION $PAGINAS_IMPRESSAS $TN
else
echo "<tr><td>$i <font color=red>desligada</font></b></td><td><b> - </td><td></td></tr>" >> $ARQ_HTML
fi
done
# IMPRESSORA TIPO 3
# cheio=■ vazio=□
# ■■■■■■■□□□
z=0
for i in "${arrayIP3[@]}"
do
if fping -c 2 $i; then
LOCATION=${arrayIP3nome[$z]}
wget --tries=3 http://$i/etc/mnt_info.html?kind=item -O $FILE_TEMP1
PAGINAS_IMPRESSAS=`grep -A2 "Page Counter" $FILE_TEMP1 | tail -1`
TONER_LEVEL=`grep -A2 Toner $FILE_TEMP1 | head -3 | tail -1 | sed 's/■/@\n/g' | grep @ | wc -l`
TN=$(($TONER_LEVEL * 10))
MONTA_PAGINA $i "$LOCATION" $PAGINAS_IMPRESSAS $TN
else
echo "<tr><td>$i <font color=red>desligada ${arrayIP3nome[$z]}</font></b></td><td><b> - </td><td></td></tr>" >> $ARQ_HTML
fi
((z++))
done
# IMPRESSORA TIPO 4
for i in "${arrayIP4[@]}"
do
if fping -c 2 $i; then
wget --tries=3 http://$i/cgi-bin/dynamic/printer/config/reports/devicestatistics.html -O $FILE_TEMP1
PAGINAS_IMPRESSAS=`grep -A4 "Folhas impressas" $FILE_TEMP1 | tail -1 | cut -d\> -f8 | cut -d\< -f1 | sed 's/ //g'`
wget --tries=3 http://$i/cgi-bin/dynamic/topbar.html -O $FILE_TEMP2
LOCATION=`grep contato $FILE_TEMP2 | cut -d: -f2 | cut -d\< -f1`
# wget --tries=3 http://$i/cgi-bin/dynamic/printer/PrinterStatus.html -O $FILE_TEMP1
# TONER_LEVEL=`grep Preto $FILE_TEMP1 | cut -d~ -f2 | sed 's/[^0-9]//g'`
TN=0
MONTA_PAGINA $i $LOCATION $PAGINAS_IMPRESSAS $TN
else
echo "<tr><td>$i <font color=red>desligada</font></b></td><td><b> - </td><td></td></tr>" >> $ARQ_HTML
fi
done
# IMPRESSORA TIPO 5
for i in "${arrayIP5[@]}"
do
if fping -c 2 $i; then
wget --tries=3 http://$i/general/information.html?kind=item -O $FILE_TEMP1
PAGINAS_IMPRESSAS=`grep Counter $FILE_TEMP1 | sed 's/</\n/g' | grep -A2 Counter | tail -1 | cut -d\> -f2`
TN=`grep Life $FILE_TEMP1 | sed 's/</\n/g' | grep -A8 "Drum Unit" | grep -A2 Remain | tail -1 | cut -d"." -f1 | sed 's/[^0-9]//g'`
wget --tries=3 http://$i/general/status.html -O $FILE_TEMP2
LOCATION=`grep Contac $FILE_TEMP2 | sed 's/</\n/g' | grep Contac -A2 | tail -1 | cut -d\> -f2`
MONTA_PAGINA $i $LOCATION $PAGINAS_IMPRESSAS $TN
else
echo "<tr><td>$i <font color=red>desligada</font></b></td><td><b> - </td><td></td></tr>" >> $ARQ_HTML
fi
done
# ---- ------ #
echo "</table><br><br>" >> $ARQ_HTML
echo "<br><font face=arial size=1>his</font></a> $CONTGERAL $CONTA_PAGINAS_TOTAL" >> $ARQ_HTML
# Quer fazer FTP para algum site ?
# descomente e preencha abaixo
#ftp -v -n >> /tmp/ftpb.log <<END_SESSION
# open ftp.xxx.com.br
# user USUARIO SENHA
# ascii
# lcd $DIR_HTML
# put $HTML
# bye
#END_SESSION
# eof
Script de instalação do Mplayer, com todas as fontes e codecs - new release
Instalação automática de programas
IA Turbina o Desktop Linux enquanto distros renovam forças
Como extrair chaves TOTP 2FA a partir de QRCODE (Google Authenticator)
Linux em 2025: Segurança prática para o usuário
Desktop Linux em alta: novos apps, distros e privacidade marcam o sábado
IA chega ao desktop e impulsiona produtividade no mundo Linux
Como instalar o repositório do DBeaver no Ubuntu
Como instalar o Plex Media Server no Ubuntu
Digitando underscore com "shift" + "barra de espaços"
Como ativar a lixeira e recuperar aquivos deletados em um servidor Linux
Como mudar o nome de dispositivos Bluetooth via linha de comando
O programa assinador digital (5)
Assinador JNLP do Site Portal da Nota Fiscal Eletrônica (5)









