Shell para extrair informações de impressoras Brother
Publicado por Incrivel Monstro Verde Cabeludo (última atualização em 03/09/2018)
[ Hits: 2.719 ]
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
Uma loja de apps por linha de comando
User manager - o gerenciador de usuários para Slackware Linux
exenow - Habilitando suporte a executaveis windows no kernel do linux
Passkeys: A Evolução da Autenticação Digital
Instalação de distro Linux em computadores, netbooks, etc, em rede com o Clonezilla
Título: Descobrindo o IP externo da VPN no Linux
Armazenando a senha de sua carteira Bitcoin de forma segura no Linux
Enviar mensagem ao usuário trabalhando com as opções do php.ini
Instalando Brave Browser no Linux Mint 22
vídeo pra quem quer saber como funciona Proteção de Memória:
Encontre seus arquivos facilmente com o Drill
Mouse Logitech MX Ergo Advanced Wireless Trackball no Linux
Compartilhamento de Rede com samba em modo Público/Anônimo de forma simples, rápido e fácil
Programa duplicado no "Abrir com" e na barra de pesquisa do ... (1)
VMs e Interfaces de Rede desapareceram (13)
Como abrir o pycharm no linux [RESOLVIDO] (4)