Driver que faz o display do air cooler Rise Mode Temp 6 Pro funcionar no Linux, mostrando temperatura e uso da CPU em tempo real — o mesmo que o software oficial faz no Windows.
O protocolo foi obtido por engenharia reversa do DeviceDriver.exe oficial e
confirmado contra o report descriptor do próprio dispositivo. Este repositório
contém apenas código próprio e a documentação do protocolo; nenhum arquivo da
Rise Mode é redistribuído.
- Dispositivo: USB
1a2c:4984(identifica-se como "SEMICO USB Gaming Keyboard") - Testado em: Ubuntu, kernel 7.0
- Não precisa de root para rodar (só para instalar a regra udev)
Provavelmente funciona também no Temp 8 e em outros air coolers Rise Mode com display, já que compartilham o mesmo software oficial. Se você testar em outro modelo, abra uma issue contando o resultado.
git clone https://github.com/aseriosouza/risemode-temp6pro-linux.git
cd risemode-temp6pro-linux
./install.shO install.sh faz tudo: instala o python3-psutil se faltar, cria a regra
udev (pede sudo) e registra um serviço de usuário que sobe no login.
Pronto — o display já deve estar mostrando a temperatura.
./install.sh --uninstallO serviço roda sozinho. Para controlá-lo:
systemctl --user status risemode-display # ver estado
systemctl --user restart risemode-display # reiniciar
systemctl --user stop risemode-display # parar
journalctl --user -u risemode-display -f # acompanhar o logRodando na mão:
./rise_temp6pro.py # loop com valores reais
./rise_temp6pro.py --demo # alterna 11 e 99, para conferir a olho
./rise_temp6pro.py --test # 88 °C / 88% fixo
./rise_temp6pro.py --fahrenheit # temperatura em Fahrenheit
./rise_temp6pro.py --interval 2 # atualiza a cada 2 segundosQuase sempre é o driver usbhid desanexado — acontece se algum script com
pyusb/libusb pegou o dispositivo antes. Conserto:
sudo ./reanexar.shDepois:
./rise_temp6pro.py --demoMesma causa acima. Se o reanexar.sh não resolver, desconecte e reconecte o
cabo USB do cooler.
./detectar.shDeve aparecer 1a2c:4984 na lista. Se não aparecer, o problema é o cabo USB —
esses coolers ligam num header USB interno da placa-mãe, e é comum o conector
estar mal encaixado ou deslocado um pino.
Feature report ID 0x07, buffer de 64 bytes, enviado pelo ioctl
HIDIOCSFEATURE em /dev/hidrawN — o equivalente exato do HidD_SetFeature
que o software do Windows usa.
buf[0] = 0x07 report ID
buf[1] = temperatura / 100 % 10
buf[2] = temperatura / 10 % 10
buf[3] = temperatura % 10
buf[4] = flags: bit0 (0x01) = Fahrenheit (0 = Celsius)
bit4 (0x10) = o segundo valor é uso de CPU em %
buf[5] = uso / 100 % 10
buf[6] = uso / 10 % 10
buf[7] = uso % 10
buf[8..63] = 0
Temperatura é limitada a 999, uso a 100. Não há checksum. O software oficial envia a cada 1000 ms.
O próprio dispositivo declara isso no report descriptor, numa collection
vendor-defined 0xFF01:
06 01 ff Usage Page (Vendor-defined 0xFF01)
09 01 Usage 1
a1 01 Collection (Application)
85 07 Report ID 0x07
09 03 Usage 3
15 00 Logical Minimum 0
26 ff 00 Logical Maximum 255
75 08 Report Size 8 bits
95 3f Report Count 63
b1 02 FEATURE (Data,Var,Abs)
Existe ainda um handshake [0x07, 0xFD, 0, ...] que o software oficial envia
ao conectar e cuja resposta traz a versão do firmware, mas ele não é
necessário para o display funcionar.
Ficam registrados porque não são óbvios e podem poupar horas de quem for mexer em displays parecidos:
1. Use hidraw, não pyusb/libusb. Esta é a lição principal. Mandar o mesmo
report por ctrl_transfer do pyusb parece funcionar — o dispositivo aceita
tudo e retorna sucesso — mas nada aparece na tela.
2. O dispositivo precisa estar ligado ao usbhid. Se um script com pyusb
desanexar o driver do kernel, a interface fica em usbfs, o /dev/hidraw
some, e o controlador entra num estado que engana o diagnóstico: aceita
qualquer coisa em silêncio. Sinais desse estado:
STALLao tentar ler o report descriptorGET_REPORTdevolvendo sempre07 00 02 00...para qualquer report ID, o que parece uma resposta válida mas é enlatada
3. O display apaga se o fluxo parar. É preciso reenviar continuamente. Mandar um ou dois pacotes só faz a tela piscar.
4. O nó hidraw certo é o da segunda interface. O dispositivo cria dois nós;
o do display é o que tem 85 07 e b1 02 no report_descriptor. O driver
escolhe sozinho.
5. O flag 0x10 no buf[4] é obrigatório para o segundo número ser
interpretado como uso de CPU. Sem ele o display ignora o valor.
| Arquivo | O que faz |
|---|---|
rise_temp6pro.py |
O driver |
install.sh |
Instala regra udev + serviço de usuário |
reanexar.sh |
Devolve o dispositivo ao usbhid (precisa de sudo) |
detectar.sh |
Diagnóstico: lista os dispositivos USB |
Ponto de partida: evozniak/risemode-driver,
que faz o mesmo para o water cooler Rise Mode Aura Ice Black (USB aa88:8666,
protocolo diferente deste).
MIT — veja LICENSE.