Shell para extrair informações de impressoras Brother
Publicado por Incrivel Monstro Verde Cabeludo (última atualização em 03/09/2018)
[ Hits: 3.006 ]
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
Faz uma busca no OpenSubtitles por um filme.
Automatizar backup do PostgreSQL
tira_usb.sh - Remover dispositivo USB
Cirurgia para acelerar o openSUSE em HD externo via USB
Void Server como Domain Control
Modo Simples de Baixar e Usar o bash-completion
Monitorando o Preço do Bitcoin ou sua Cripto Favorita em Tempo Real com um Widget Flutuante
[Resolvido] VirtualBox can't enable the AMD-V extension
Como verificar a saúde dos discos no Linux
Como instalar , particionar, formatar e montar um HD adicional no Linux?
Como automatizar sua instalação do Ubuntu para desenvolvimento de software.
Não consigo instalar distro antiga no virtualbox nem direto no hd (15)
Quais os códigos mais dificeis que vcs sabem fazer? (12)
systemd-resol... precisa ser reiniciado periodicamente [RESOLVIDO] (7)









