Controle e veja o status do ar-condicionado Daikin Split EcoSwing Smart R-32 e Daikin Split EcoSwing Smart Gold R-32.
Para poder comunicar com o ar-condicionado é preciso de uma secret key e saber o endereço de IP do ar-condicionado.
Essa secret key é gerada pelo aplicativo
Daikin Smart AC - Brasil
durante a configuração do ar-condicionado, ela também é salva no servidor que o aplicativo utiliza, dessa forma é
possível instalar o aplicativo em diferentes dispositivos e controlar o mesmo aparelho.
O ar condicionado possui duas formas de comunicação, por rede local utilizando a secret key ou por MQTT falando com um
servidor da AWS tópicos específicos, quando o aplicativo está fora da rede que o ar foi configurado, ele utiliza o
servidor MQTT para comunicação.
- Encontrar dispositivos na rede.
- Suporte a extrair o
secret keyutilizando login e senha. - Suporte a configurar o ar-condicionado sem necessidade de aplicativo.
- Consultar estado do ar-condicionado (servidor http).
- Enviar comandos para o ar-condicionado (servidor http).
- Consultar estado do ar-condicionado (mqtt).
- Enviar comandos para o ar-condicionado (mqtt).
Deve ser compatível com todos os aparelhos que utilizam o aplicativo Daikin Smart AC - Brasil.
| Unidade interna | Status |
|---|---|
| FTKP09Q5VL | Deve funcionar |
| FTKP12Q5VL | Funcionando |
| FTKP18Q5VL | Deve funcionar |
| FTKP24Q5VL | Deve funcionar |
| FTHP09Q5VL | Funcionando |
| FTHP12Q5VL | Funcionando |
| FTHP18Q5VL | Funcionando |
| FTHP24Q5VL | Deve funcionar |
| Unidade interna | Status |
|---|---|
| FTKP09S5VL | Deve funcionar |
| FTKP12S5VL | Funcionando |
| FTKP18S5VL | Deve funcionar |
| FTKP24S5VL | Deve funcionar |
| FTHP09S5VL | Deve funcionar |
| FTHP12S5VL | Funcionando |
| FTHP18S5VL | Funcionando |
| FTHP24S5VL | Deve funcionar |
| Modelo |
|---|
| FTKR35U |
| FTKR50U |
| FTKR60U |
Durante o processo de criação de integrações para o Home Assistant baseada no código desse repositório, a Daikin liberou uma integração oficialmente criada por eles, caso seu objetivo seja utilizar com Home Assistant, consulte os seguintes links:
O primeiro passo é configurar o ar utilizando o aplicativo oficial, durante o processo de configuração é criado
a secret key.
Depois disso, você pode conseguir a secret key de duas formas, inspecionando as requests que o
aplicativo oficial faz, especificamente para o endpoint https://dmb.iotalabs.co.in/devices/thinginfo/managething.
Você também pode utilizar o seguinte
site https://daikin-extract-secret-key.fly.dev/.
O código do serviço está presente em cmd/extract-secret-key e nenhuma informação de login/senha/dispositivo é
coletada.
Você também pode executar o serviço localmente.
Todo o processo de descoberta e implementação foi baseado na engenharia reversa do aplicativo para Android e da leitura da biblioteca nativa que o aplicativo utiliza.
O aplicativo é extremamente lento considerando que faz algo tão simples, o motivo disso é que ele não guarda
nenhum dado local não guarda todos os dados localmente, toda vez que o aplicativo é aberto ou restaurado (onResume)
ele faz requests para o Amazon Cognito para validar o cadastro do usuário,
conseguir chaves de autenticação para depois fazer requests para o servidor de registros dispositivos, só para então
tentar se comunicar com ar localmente. Ele também faz algumas requests para verificação de versão do aplicativo e algum
tipo de logging de comportamento do usuário (fora as requests para o firebase de logging de aplicação).
Os servidores AWS utilizados ficam nos Estados Unidos, tornando as requests ainda mais lentas, considerando que são diversas e em cascata (uma request aguarda a outra completar para poder continuar).
O servidor de registros dispositivos armazena diversos dados do dispositivo, é feito tracking de versões do Android, timezone, linguagem, localização (latitude, longitude), modelo dos aparelhos de ar-condicionado e também alguns dados da rede wireless (como nome).
O aplicativo parece ser uma cópia do Daikin AC Manager-India feito pelo iota labs e adaptado para o mercado brasileiro.
O aplicativo tem uma usabilidade terrível, com controles lentos e capacidades básicas.
O ar-condicionado possui um servidor http não conformante aos specs, tornando complicada comunicação (golang http
e curl não aceitam a resposta inválida), além disso, a forma de comunicação é no minima peculiar, as requests são
compostas por um conjunto de bytes base64 encodados, onde o conteúdo dos bytes é o seguinte:
- Initialization vector: 16 bytes
- Payload: N bytes começando da posição 16
- CRC16: checksum de 2 bytes, sendo os últimos 2 bytes.
O conteúdo é criptografado utilizando AES no modo CFB, sendo o CRC ignorado no processo de descriptografia.
Quando mandando uma mensagem criptografada devemos adicionar BZ ao final do payload por algum motivo obscuro.
É possível encontrar dispositivos na rede local utilizando o programa /cmd/find-devices.
Existem diversos exemplos de código de comunicação com servidor local:
- Programa de terminal que exibe o estado do ar em loop
/cmd/ac-server-read-loop. - Serviço http que retorna estado do ar na porta 8080
/cmd/ac-server-http-service.GET /: Retorna um JSON com o estado do ar.POST /state: Aceita um JSON com o estado desejado para o ar.
- Programa controla o estado do ar
/cmd/daikin.daikin get: Retorna o estado do ar.daikin set: Define o estado do ar, para ver os possíveis estados do ar, veja o arquivo state.md.
Todos os exemplos acima trabalham com duas informações secretKey e targetAddress, que devem ser fornecidas como
flags para os programas, por exemplo: daikin --secretKey=<SecretKey> --targetAddress=http://192.168.0.70:15914/ get.
Os tópicos utilizados no MQTT são:
$aws/things/{ID_DO_DISPOSITIVO}/shadow/get: Solicita o estado do dispositivo.$aws/things/{ID_DO_DISPOSITIVO}/shadow/get/accepted: Retorna o estado do dispositivo.$aws/things/{ID_DO_DISPOSITIVO}/shadow/update: Atualiza o estado do dispositivo, deve ser enviado como payload um JSON com as alterações de estado desejada.$aws/things/{ID_DO_DISPOSITIVO}/shadow/update/accepted: Retorna o resultado da solicitação de atualziação do estado do dispositivo.
Conseguir conectar no servidor MQTT é um processo mais complicado, já que exige a troca de diferentes chaves de autenticação e tokens de identificação com a AWS.
Mais informações sobre os tópicos e implementação nesse link.
Para ver um exemplo de código MQTT consulte a pasta /cmd/mqtt-test.
O exemplo acima trabalha com login e senha da conta criada no aplicativo móvel, já que é preciso de troca de
informações com servidores da AWS, também é preciso saber o ID do dispositivo (thingID) antes, você
pode https://daikin-extract-secret-key.fly.dev/ para conseguir o ID do
dispositivo.
É possível utilizar os binários daikin e ac-server-http-service diretamente de um container docker:
docker run --rm ghcr.io/crossworth/daikin:latest /app/daikin -secretKey=<SecretKey> -targetAddress=http://192.168.0.71:15914/ get
{
"port1": {
"power": 1,
"mode": 3,
"temperature": 25,
"fan": 17,
"h_swing": 0,
"v_swing": 0,
"coanda": 1,
"econo": 1,
"powerchill": 0,
"good_sleep": 0,
"streamer": 0,
"out_quite": 0,
"on_timer_set": 0,
"on_timer_value": 0,
"off_timer_set": 0,
"off_timer_value": 0,
"sensors": {
"room_temp": 25,
"out_temp": 22
},
"rst_r": 12,
"fw_ver": "p1.0.3.28"
},
"idu": 1
}
docker run --rm -p 8080:8080 ghcr.io/crossworth/daikin:latest /app/ac-server-http-service -secretKey=<SecretKey> -targetAddress=http://192.168.0.71:15914/
2025/01/24 00:13:06 starting http server at :8080
