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:
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
/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.
Depois de um boot tudo deve funcionar. Para testar use:
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
Essa linha faz uma leitura genérica no nobreak, e contorna o bug de repetir o shutdown.
O desligamento pode ser testado com:
#!/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.