Nota · ios

Como usei a IA para controlar minhas Bluetti

Uma das minhas estações Bluetti não tem Wi-Fi. Conto como usei agentes de código de IA para transformar um PC em casa e um app de iPhone numa forma de vê-la e controlá-la de qualquer lugar, com uma saída AC que só liga quando a energia cai.

Uma das minhas duas estações Bluetti não tem Wi-Fi. Ela só fala Bluetooth, então, no instante em que saio de casa, ela some. Não vejo a bateria, não vejo o que ela está alimentando e não consigo ligar nem desligar nada.

Eu queria resolver isso, e queria mais uma coisa: a saída AC dela deveria ficar desligada enquanto a rede está normal e ligar só quando a energia cai.

Esse caso de uso foi pensado quando a energia da minha casa caiu e eu liguei o ventilador no quarto da minha filha enquanto ela dormia. Só que, quando a energia retornasse, o ar-condicionado ligaria novamente e eu teria o AC e o ventilador ligados ao mesmo tempo. Congelaria minha filha.

O app da bluetti não supria

A resposta óbvia é o app do fabricante. Ele funciona enquanto eu estiver a poucos metros da estação, porque o Bluetooth não vai além disso. Longe de casa, não há nada para abrir.

A automação era o maior problema. Ligar o AC quando a rede cai exige algo que vigie a estação o dia inteiro e reaja em segundos, e um celular no bolso não faz isso. O Bluetooth ainda impõe mais uma regra: só um app pode segurar a estação por vez, então o que eu construísse teria de dividir a conexão com o app do fabricante.

Então a pergunta deixou de ser qual app usar. Passou a ser onde mora o código que conversa com a estação.

Um PC em casa que fala pelo celular

Meu computador está sempre ligado (inclusive na propria Bluetti), então pensei: vou fazer um hub dos meus devices lá.

O PC ainda precisava falar a língua da Bluetti, e nisso eu não comecei do zero. O bluetti-monitor é um projeto open source em Python, feito por engenharia reversa pelo próprio autor, que conversa com estações Bluetti por Bluetooth, inclusive as criptografadas. O meu hub é construído em cima dele. Tudo em volta é o que o Voltaris acrescenta: um hub que serve as duas estações por uma API HTTP pequena, um app de iPhone, a automação e as notificações.

O celular chega no hub pelo Tailscale, uma rede privada em que só entram os meus aparelhos, então não preciso construir login e nada fica exposto na internet. Quando quero o app do fabricante de volta, um botão no meu app, "Liberar para o app oficial", faz o hub soltar aquela estação. Um segundo botão pega a conexão de novo.

Alcançar a estação era metade do caminho. A outra metade era o que o hub faria depois de enxergá-la.

Como saber quando a energia caiu

Para o "AC só na queda de energia", o hub precisa saber que houve uma queda, e o número óbvio mente. A estação informa quanta potência puxa da rede, e isso marca 0 W quando a rede caiu. Marca os mesmos 0 W quando a rede está normal, a bateria está cheia e nada puxa energia. Duas situações diferentes representadas pelo mesmo estado.

A estação informa mais uma coisa: a tensão da própria entrada de rede. Essa é 0 V só quando a energia da rede some, passando carga ou não. A página abaixo mostra 223 V e 60 Hz na AC2A com a rede ligada.

1.00

Desse número saiu uma regra curta. Enquanto a tensão está lá, o hub mantém o AC desligado. Quando ela cai, o hub liga o AC. Depois que a rede fica de volta por um tempo, ele desliga o AC de novo, mas só se foi a automação que o ligou. Não é um nobreak: existe um intervalo de alguns segundos, e uma carga que não aguenta isso deve ficar no modo UPS da própria estação. Quem roda a regra é o PC, então ela não espera o celular.

Com o hub decidindo sozinho, o celular só precisava me mostrar o que estava acontecendo.

Um app para ver de qualquer lugar

Para o visual, pedi aos agentes três direções a partir de cores amostradas de shots reais do Dribbble, e escolhi uma: um quase preto com lima para a energia que entra e areia para a que sai.

Abro o app de onde estiver e a visão geral mostra o consumo agora, a bateria média e um card por estação, cada um com o seu fluxo de energia.

1.00

A página de uma estação abre o fluxo completo, com rede, solar, bateria e as duas saídas, a tensão da rede e os últimos 10 minutos de potência de entrada e saída.

1.00

Desligar uma saída, ou ligar e desligar a automação, pede uma confirmação antes, porque cortar uma saída corta tudo que estiver ligado nela.

Quem fica de olho é o hub. Ele manda um push quando a rede cai e outro quando volta, com quanto tempo durou o corte e quanta energia a bateria entregou, e manda um aos 20% e outro aos 10% de bateria enquanto descarrega. Cada estação mostra o tempo que resta de bateria, como "acaba em ~1 h 20 min", e um registro de quedas guarda cada corte. Se o próprio hub ficar mudo, um programa pequeno num servidor separado percebe em uns 3 minutos e manda um push avisando.

Como o trabalho foi dividido com os agentes

Isso é o que ele faz. Como foi construído é a outra metade do título.

O app e o hub não nasceram de uma conversa longa. Dividi o trabalho em três lotes paralelos, contra um contrato escrito que fixava a fronteira entre as partes: um lote para o shell do app, outro para os visuais animados, e o tema, os tipos da API e a configuração ficaram comigo. Cada lote podia mexer na sua própria pasta sem quebrar os outros. A minha parte foi decidir o que as estações deveriam fazer, escolher o visual e conferir o resultado nas minhas próprias estações. A parte dos agentes foi o código.

O que vem agora

O mesmo hub já está pronto para uma fechadura e lâmpadas Tuya, que ainda não testei nos aparelhos reais. O registro de quedas segue vazio, então a cadeia toda ainda não encontrou uma queda de energia de verdade. E se você já leu a tensão da rede em outro modelo Bluetti, quero saber se ela fica na mesma página de dados.

Algo a acrescentar, ou uma parte de que você discorda? Me responda.

Responder por e-mail