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.
Muito bom tutorial, você conseguiu fazer ele mostrar o tempo de duração das baterias?
ResponderExcluirOi 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.
ExcluirA 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.
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?
ResponderExcluirSim, acontece mais quando utilizei USB3. Usando na USB2 acontece menos.
ExcluirIsso acontece com o software original no Windows.
Mas como eu utilizava isso no raspberry eu não via as messagens.
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:
ResponderExcluirBus 001 Device 003: ID 0835:1601 Action Star Enterprise Co., Ltd