sexta-feira, 9 de março de 2018

Nobreak TS Shara Soho II - NUT - Linux - Raspberry PI - Como configurar

Este deve ser o post final de como configurar o NUT no linux para utilizar o nobreak TS Shara - SOHO. Vários detalhes tansformaram essa tarefa que devia ser fácil em um luta de algumas semanas. O objetivo era ter um nobreak que desligue e ligue automaticamente meu servidor de forma controlada no caso de falta e retorno de energia.

O maior problema encontrado é que nobreak parece repetir o ultimo comando enviado para ele sempre que a usb é reconectada. Isso é um problema quando o último comando pede que o nobreak seja desligado, aí quando ele é ligado novamente ele executa o comando de desligamento e apaga no meio do boot. E fica assim até voce desligar a usb ou executar alguma combinação de ligar no botão, tirar da tomada, etc.

Outro comando que não funciona corretamente neste nobreak é o desligar e ligar o nobreak após alguns minutos, que é o comando default utilizado durante o shutdown no NUT. No caso de falta de energia ele deveria ficar desligado até a energia voltar, e ligar automaticamente após os minutos configurados. Oque ele realmente faz é ficar ligando com ou sem energia.

O comando que funcionou corretamente é para somente desligar o nobreak. Quando ele é executado na falta de energia ele desliga o nobreak e liga quando a energia voltar. Isso esta ok. O problema é quando o comando é executado e ainda existe energia: neste caso ele desliga definitivamente e só liga manualmente no botão. Além disso caso aparece o problema de repetir o ultimo comando, e o nobreak apaga durante o boot.

Para contornar todos esse problemas a configuração encontrada foi esta:

Instalei somente o básico do nut:
sudo apt-get install nut-client nut-server

Fiz a configuração dele adicionando o texto abaixo em cada arquivo:

/etc/nut/nut.conf
MODE=standalone

/etc/nut/ups.conf
[tsshara]
        driver = nutdrv_qx
        desc = "tsshara"
        port = auto
        protocol = "megatec"
        offdelay = 60
        ondelay = 0

É importante ter ondelay = 0, para que o comando de shutdown correto seja enviado para o nobreak. Se alterar esse delay ele não funciona direito.

/etc/nut/upsd.users
[upsmon]
        password = "123456"
        upsmon master
        actions = SET
        instcmds = ALL

/etc/nut/upsmon.conf
MONITOR tsshara@localhost 1 upsmon "123456" master
NOTIFYFLAG ONBATT SYSLOG+WALL+EXEC
NOTIFYFLAG ONLINE SYSLOG+WALL+EXEC

Teste do driver. Ele deve mostrar algum erro se não funcionar.
sudo upsdrvctl start

Depois de um boot tudo deve funcionar. Para testar use:
upsc tsshara

Que deve apresentar algo assim:
Init SSL without certificate database
battery.charge: 92
battery.voltage: 12.80
battery.voltage.high: 13.00
battery.voltage.low: 10.40
battery.voltage.nominal: 12.0
device.mfr: UPS  700 VA AUT
device.model: TS Shara
device.type: ups
driver.name: nutdrv_qx
driver.parameter.pollfreq: 30
driver.parameter.pollinterval: 2
driver.parameter.port: auto
driver.parameter.protocol: megatec
driver.parameter.synchronous: no
driver.version: 2.7.4
driver.version.data: Megatec 0.06
driver.version.internal: 0.28
input.current.nominal: 4.0
input.frequency: 60.0
input.frequency.nominal: 60
input.voltage: 0.0
input.voltage.fault: 0.0
input.voltage.nominal: 115
output.voltage: 111.0
ups.beeper.status: enabled
ups.delay.shutdown: 30
ups.delay.start: 180
ups.firmware: 20070731-5
ups.productid: 0035
ups.status: OB
ups.type: offline / line interactive
ups.vendorid: 0483

Para evitar o problema de repetir o último comando foi adicionada a última linha no arquivo /lib/systemd/system-shutdown/nutshutdown

#!/bin/sh
/sbin/upsmon -K >/dev/null 2>&1 && /sbin/upsdrvctl shutdown
# Comando para fazer uma leitura simples no nobreak e evitar bug de repeticao de shutdown
/lib/nut/nutdrv_qx -a tsshara 

Essa linha faz uma leitura genérica no nobreak, e contorna o bug de repetir o shutdown.

O desligamento pode ser testado com:
sudo upsmon -c fsd

Se o sistema estiver sem energia ele vai voltar quando a energia voltar. Se ele estiver com energia então isso vai desligar o sistema, e neste caso é necessário ligar manualmente o nobreak.

Essa configuração parece ser a que melhor funciona. Ela garante que o sistema seja desligado corretamente quando falta energia, e retorne quando a energia voltar. Existe uma chance que ela não funcione corretamente: se a energia voltar antes do sistema terminar o desligamento automático o nobreak não vai religar, o sistema vai ficar desligado. Será necessário religamento manual do nobreak. Entretando essa configuração protege o sistema do bug de repetição de comando e evita que o nobreak desligue no meio do próximo boot. Conclusão: pelo menos os sitema de arquivos não vai estragar. Se vc tiver muito azar as vezes vai precisar religar o sistema manualmente.

Em resumo esse nobreak da forma que está não é indicado para aplicações onde o nobreak precisa ligar/desligar automaticamente computador. Se eu soubesse de toda a dificuldade em fazer ele funcionar teria comprado outro modelo...(mas nada garante que outros modelos de nobreak não tenham bugs).

Importante notar que versões antigas do nutdrv_qx não funcionam no TS Shara. Outro ponto é que sistema linux diferentes do Raspberry podem ter o script the shutdown localizados em outro lugar. As versões utilizadas aqui podem ser vistas nos dados mostrados acima.


5 comentários:

  1. Muito bom tutorial, você conseguiu fazer ele mostrar o tempo de duração das baterias?

    ResponderExcluir
    Respostas
    1. Oi Lucas, não sei se esse nobreak mostra isso. Acho que ele só avisa que a bateria esta baixa e que precisa desligar. Se o nobreak medir a corrente de carga é possível calcular o tempo de duração, mas não sei se tem isso. Faz algum tempo que não mexo nesse nobreak.

      A lógica de controle desse nobreak também parece ter bastante bug, por isso ele não se comporta muito bem quando é desligado por software. As vezes ele fica desligando sozinho após reiniciar, e não fica desligado quando quero que ele fique desligado.
      Tentei passar isso para o suporte da Tsshara, mas o suporte técnico é mais um firewall...não ajudaram muito.

      Excluir
  2. Cara, você já teve problema relacionado ao USB ficar aparecendo e sumindo e com isso o Linux ficar te alertando que perdeu a comunicação com o Nobreak?

    ResponderExcluir
    Respostas
    1. Sim, acontece mais quando utilizei USB3. Usando na USB2 acontece menos.
      Isso acontece com o software original no Windows.
      Mas como eu utilizava isso no raspberry eu não via as messagens.

      Excluir
  3. Olá. Segui as orientações acima, no entanto, não funcionou. O nobreak é idêntico. Será que a placa de gerenciamento é a mesma? Saída do lsusb:
    Bus 001 Device 003: ID 0835:1601 Action Star Enterprise Co., Ltd

    ResponderExcluir