Olá pessoal! Recentemente fiz a aquisição do robô Smart 700 da Kabum (v.2023), ao utilizá-lo, eu percebi que não há possibilidades de integrar a limpeza por área ou local no Home Assistant e na Alexa.
Foi então que decidi explorar uma maneira de realizar essa ação, e cheguei nesse formato que vou mostrar aqui nesse tutorial. Bem importante frisar utilizei unicamente para o meu caso, é uma tentativa de abrir para outras pessoas auxiliarem e evoluirmos essa solução.
Nota: Ainda não consegui implementar a limpeza por local marcado ou múltiplas áreas. Ajuda será muito bem vinda.
Pré Requisitos
- PyScript instalado e configurado (via HACS).
- Conhecimento mínimo de Python e conseguir rodar um arquivo .py no terminal.
- Conhecimento de como usar a Conta Cloud da Tuya, com ela criada e conectada com os dispositivos.
- Robô conectado no app da Kabum ou Smart Life (no tutorial vou utilizar o Smart Life).
1) Resgatando IP e Local Key do Robo
Pode pular essa etapa se você já sabe como fazer
Vamos utilizar a biblioteca tinytuya, siga as etapas de Instalação, depois escaneie a sua rede e rode o wizard para listar os dispositivos e seus respectivos local key.
2) Resgatando o código base64 do comando
Agora, vamos abrir o painel Cloud da TuYa, ir até os dispositivos, e monitorar os logs do robô. Com os logs do robô aberto, vamos no aplicativo, selecionar a área (somente uma) e mandar o robô limpar, aguarde um pouco e atualize os logs, você deverá olhar pelo Report de Instruction transmission, no meu caso ele vem antes do Partition error status prompt:
3) Extraindo o HEX e ajustando para o comando efetivo
Com esse base64 em mãos, nós vamos criar um arquivo python (dê o nome que quiser), para o tutorial vou utilizar test.py
. Nele, vamos decodificar o código base64 para termos ele em HEX:
test.py
import base64
print('Ambiente')
esperado = base64.b64decode('qgAEFQEBCB8=') # substitua qgAEFQEBCB8= pelo seu código
print(esperado)
Agora rodando nosso test.py
, teremos o código HEX esperado:
Para o robô receber o código correto, precisamos voltar 1 casa no quarto e sétimo comando, sendo assim, no meu exemplo o certo seria mandar:
\xaa\x00\x04\x14\x01\x01\x08\x1e
Se tiver dúvidas em qual é o anterior, você pode consultar a tabela ASCII completa
Agora, voltamos ao nosso test.py
e codificamos de volta para base64 o comando HEX:
test.py
enviar = base64.b64encode(b'\xaa\x00\x04\x14\x01\x01\x08\x1e')
print(enviar)
Isso irá gerar o código base64 de comando para o aspirador.
4) Conclusão
Agora, com esse código, precisamos enviar ele para o DP de número 15 do Robô. Usando o pyscript
, podemos criar um service
que irá utilizar o tinytuya
e mandar esse código para o robô. Crie o arquivo vacuum.py
dentro de /config/pyscript
:
vacuum.py
import tinytuya
# Connect to Device
d = tinytuya.OutletDevice(
dev_id="xxxxxXxxxxXxxx",
address="xxxXxxxxXxxx",
local_key="'xxxxXxxxXxxx",
version=3.3)
# Codes
code_sacada = 'XxxxxXxxxxXxx'
code_sala = 'XxxxxXxxxxXxx'
code_entrada = 'XxxxxXxxxxXxx'
code_cozinha = 'XxxxxXxxxxXxx'
@service
def limpeza_area(area=None):
if area == "sala":
payload = d.generate_payload(tinytuya.CONTROL, {"15": code_sacada})
elif area == "sala":
payload = d.generate_payload(tinytuya.CONTROL, {"15": code_sala})
elif area == "entrada":
payload = d.generate_payload(tinytuya.CONTROL, {"15": code_entrada})
elif area == "cozinha":
payload = d.generate_payload(tinytuya.CONTROL, {"15": code_cozinha})
d.send(payload)
Lembre de recarregar chamar o serviço para recarregar o pyscript.
Para testar, vá na ferramenta de desenvolvedor e chame o novo serviço:
service
service: pyscript.limpeza_area
data:
area: cozinha
Locais específicos e Múltiplas Áreas
Ainda estou tentando identificar qual é o padrão de HEX enviado para essas ações específicas, estou aberto para quem quiser auxiliar a identificar como funciona.