Aspirador Smart Kabum! (Tuya V2): Ajustes na integração para funcionamento completo no HA - Update Tuya V2 v1.6.0

Alguns aspiradores smart comercializados pela Kabum! no Brasil são compatíveis com o Home Assistant através da integração Tuya V2.
vacuum_kabum

A integração Tuya V2 foi uma integração personalizada desenvolvida oficialmente pela Tuya que foi migrada para o projeto do Home Assistant como integração nativa.

Este post tem a finalidade de ajudar a customizar a integração Tuya V2 de modo a permitir a intergração de mais recursos dos aspiradores no seu Home Assistant enquanto as alterações não são oficializadas na versão estável.

É importante a versão do Home Assistant estar atualizada (testado a partir de 2021.9), pois caso contrário a integração Tuya V2 pode apresentar erros após alteração dos arquivos.

Essa customização deverá ser feita alterando arquivos da integração localizados em config\custom_components\tuya_v2\.

As alterações abaixo partirão do princípio que a versão atual da integração Tuya V2 via HACS é a v1.6.0.

Alteração 1 - arquivo vaccum.py (necessária apenas se a sua versão for v1.5.0 ou anterior - a versão v1.6.0 incluiu esses recursos):

Inclusão dos seguintes recursos:
a) Serviço para localizar o aspirador (locate);
b) Correção para exibir os status Pausado (paused) e Retornando para base (docking);
c) Inclusão nos atributos das informações de área limpa (clean area), tempo de limpeza (clean time), código da limpeza (clean record - código específico da limpeza atual ou da última limpeza), modo e status completo (status full - que traz o tipo de limpeza que está sendo efetuada, se está carregando ou carregada a bateria entre outros).
Como alterar o código: substituir o conteúdo do arquivo config\custom_components\tuya_v2\vacuum.py pelo conteúdo do arquivo atual do repositório da integração (este link).

Alteração 2 - arquivo switch.py (necessária apenas se a sua versão for v1.5.0 ou anterior - a versão v1.6.0 incluiu esses recursos):

Inclusão dos seguintes recursos:
a) Switch para silenciar os sons no aspirador (switch voice);
Como alterar o código: substituir o conteúdo do arquivo config\custom_components\tuya_v2\switch.py pelo conteúdo do arquivo atual do repositório da integração (este link).

Alteração 3 - arquivo select.py (necessária apenas se a sua versão for v1.5.0 ou anterior - a versão v1.6.0 incluiu esses recursos):

Inclusão dos seguintes recursos:
a) Entidade select para escolher o modo de operação do aspirador;
b) Entidade select para deslocar o aspirador manualmente através de seleção da direção do mesmo;
Como alterar o código: substituir o conteúdo do arquivo config\custom_components\tuya_v2\select.py pelo conteúdo do arquivo atual do repositório da integração (este link).

Alteração 4 - arquivo vaccum.py (necessária independe da versão se quiser incluir os recursos - Compatível apenas com v1.6.0 ou superior):

Inclusão dos seguintes recursos:
a) Código de falha do aspirador (faul code - código que representa a falha ocorrida).
b) Trata o status sleep como Standby.
c) Adiciona o serviço send_command para o aspirador.

Como alterar o código: substituir o conteúdo do arquivo config\custom_components\tuya_v2\vacuum.py pelo conteúdo deste arquivo.

Alteração 5 - arquivo select.py (necessária independe da versão se quiser incluir o recurso):

Inclusão dos seguintes recursos:
a) Entidade select para escolher o modo de sucção do aspirador;
Como alterar o código: substituir o conteúdo do arquivo config\custom_components\tuya_v2\select.py pelo conteúdo deste arquivo.

Alteração 6 - arquivo vaccum.py (necessária apenas se o botão pause do card do seu aspirador não funciona):

Como alterar o código: alterar o arquivo config\custom_components\tuya_v2\vacuum.py da seguinte forma:

Altera o função pause do seu arquivo de self._send_command([{"code": DPCODE_PAUSE, "value": True}]) para self._send_command([{"code": DPCODE_POWER_GO, "value": False}])

Lembrando que estas alterações foram testadas alterando a versão v1.6.0 da integração Tuya V2 via HACS.

De acordo que as alterações forem sendo incluídas na atualização da integração, este post será atualizado.

Caso altere algo indevidamente, você pode “restaurar” os arquivos da sua integração acessando o HACS e reinstando-a:
image

Para adicionar um card do robô aspirador na sua lovelace:

4 curtidas

Postei no forum do hass uma integração inicial para o aspirador robô Liectroux ZK901. Ela é baseada no localtuya.
https://community.home-assistant.io/t/modify-localtuya-for-liectroux-zk901-and-alfawise-v10-vacuums/317498


Ainda é uma implementação preliminar. Consegue obter vários dados do robô, como estado, posição, força de sucção, tipo de limpeza, etc. Porém só possui o comando de “limpeza completa” e “retornar para a base” neste momento. Estou “apanhando” para conseguir fazer uma implementação mais completa.

Parece que o ZK901 está ganhando mercado aqui no Brasil. Agradeço a quem puder testar, e quem saber ajudar a terminar essa integração.

2 curtidas

Bem legal isso em! Precisamos de + suporte pra nós brasileiros! Se não me engano a Kabum lança dele como white label!


Sim, o Kabum é o Liectroux C30B. Tenho o da Kabum, irei testar!

1 curtida

Travei na parte de pegar a localkey no app Laser Robot… eu deixo o logcat rodando com o filtro mas ele nao captura nada… tentei com emulador e com meu cel plugado com cabo com modo debug ativo. tambem tentei com uma versao anterior do app 1.4.3 e nada. poderia me ajudar por favor?

Claro! Qual seu aspirador? Sobre a aplicação, eu instalei a APK ‘Laser Robot_vV1.1.8’.

Quando você roda o comando ‘logcat’, sem acrescentar o filtro ‘grep localKey’ você já está visualizando mensagens da aplicação ldrobot/tuya no terminal? Segue um exemplo de como a mensagem aparece:

06-04 22:02:38.795 5627 5738 D Tuya : Business api: tuya.m.api.batch.invoke {“result”:[{“result”:{“2”:[{“children”:{“4”:[{“displayOrder”:0,“id”:“49281191”}]},“id”:“40655765”}]},“a”:“tuya.m.my.group.device.relation.list”,“t”:1622854958593,“success”:true,“v”:“2.0”,“status”:“ok”},{“result”:[{“bizType”:6,“bizId”:“eb793053a0b5153db1ijca”,“displayOrder”:-1,“roomId”:"-1",“homeDisplayOrder”:0}],“a”:“tuya.m.my.group.device.sort.list”,“t”:1622854958601,“success”:true,“v”:“1.0”,“status”:“ok”},{“result”:[lo{“virtual”:false,“dpName”:{},“lon”:“0”,“uuid”:“zkzn31cc80ff3c******”,“iconUrl”:“https://images.tuyaus.com/smart/icon/ay1480465245151SBQ6s/15638657659e95b8a33cf.jpg",“runtimeEnv”:“prod”,“lat”:“0”,“devId”:“eb793053a0b5153d******”,“dpMaxTime”:1622854927091,“productId”:“jd2hpvaijd******”,“dps”:{“10”:false,“11”:false,“12”:false,“13”:false,“14”:“strong”,“15”:"",“16”:1,“17”:0,“18”:0,“19”:"",“1”:true,“2”:false,“101”:"",“3”:“standby”,“102”:“eyJtZXNzYWdlIjoib2siLCJpbmZvVHlwZSI6MjEwMTEsImRhdGEiOnsicGF0aElEIjoxMjgsImhhc1BhdGhJbmZvIjoxLCJzdGFydFBvcyI6NDIsInRvdGFsUG9pbnRzIjo0MiwicG9zQXJyYXkiOltdLCJwb2ludENvdW50cyI6MH19”,“4”:“foward”,“103”:-10,“5”:“0”,“104”:-10,“6”:0,“105”:-10,“7”:0,“106”:“MTUxMERCM0IwNTIxMDExMg==”,“8”:0,“107”:“eyJpbmZvVHlwZSI6MjEwMDksImRhdGEiOnsidGltZSI6MjQ0MzQsIm1vcEFyZWEiOjAsInN3ZWVwQXJlYSI6Mzk4LCJjb3VudHMiOjYyfX0=”,“9”:0,“108”:“emt6bjMxY2M4MGZmM2M3MTJkODU=”},“ip”:“186.206.246.10”,“activeTime”:1622854908,“categoryCode”:“wf_sd”,“moduleMap”:{“wifi”:{“upgradeStatus”:0,“cdv”:“1.0.0”,“bv”:“30.05”,“pv”:“2.2”,“verSw”:“1.0.58”,“isOnline”:true,“id”:33720459,“cadv”:“1.0.2”},“mcu”:{“upgradeStatus”:0,“cdv”:"",“verSw”:“1.0.58”,“isOnline”:true,“id”:33720460,“cadv”:""}},“devAttribute”:3,“name”:“Romeu”,“timezoneId”:“America/Sao_Paulo”,“category”:“sd”,"localKey”:“c12aacbfd1******”}],“a”:“tuya.m.my.group.device.list”,“t”:1622854958608,“success”:true,“v”:“1.0”,“status”:“ok”},{“result”:[],“a”:“tuya.m.my.group.mesh.list”,“t”:1622854958596,“success”:true,“v”:“1.0”,“status”:“ok”},{“result”:[],“a”:“tuya.m.device.sig.mesh.list”,“t”:1622854958592,“success”:true,“v”:“1.0”,“status”:“ok”},{“result”:[],“a”:“tuya.m.my.group.device.group.list”,“t”:1622854958594,“success”:true,“v”:“2.0”,“status”:“ok”},{“result”:{“geoName”:“shenzhen”,“rooms”:[{“uid”:“az162223168413******”,“gmtModified”:1622231684,“displayOrder”:0,“name”:“LDRoom”,“id”:49281191,“gmtCreate”:1622231684,“ownerId”:“42091???”,“status”:true}],“role”:2,“gid”:42091051,“groupId”:42091051,“displayOrder”:0,“admin”:true,“lon”:0.0,“dealStatus”:2,“groupUserId”:44082???,“background”:"",“name”:“ZHome”,“id”:40655765,“lat”:0.0},“a”:“tuya.m.location.get”,“t”:1622854958598,“success”:true,“v”:“2.0”,“status”:“ok”},{“result”:[{“panelConfig”:{“bic”:[{“code”:“timer”,“selected”:false},{“code”:“jump_url”,“selected”:false}]},“categoryCode”:“wf_sd”,“meshCategory”:"",“supportGroup”:false,“schemaInfo”:{“schemaExt”:"[]",“schema”:"[{“mode”:“rw”,“code”:“power”,“name”:“开关”,“property”:{“type”:“bool”},“iconname”:“icon-dp_power2”,“id”:1,“type”:“obj”},{“mode”:“rw”,“code”:“power_go”,“name”:“清扫开关”,“property”:{“type”:“bool”},“iconname”:“icon-dp_power”,“id”:2,“type”:“obj”},{“mode”:“rw”,“code”:“mode”,“name”:“工作模式”,“property”:{“range”:[“standby”,“random”,“smart”,“wall_follow”,“mop”,“spiral”,“left_spiral”,“right_spiral”,“right_bow”,“left_bow”,“partial_bow”,“chargego”],“type”:“enum”},“iconname”:“icon-dp_mode”,“id”:3,“type”:“obj”},{“mode”:“rw”,“code”:“direction_control”,“name”:“方向”,“property”:{“range”:[“foward”,“backward”,“turn_left”,“turn_right”,“stop”],“type”:“enum”},“iconname”:“icon-dp_wind”,“id”:4,“type”:“obj”},{“mode”:“ro”,“code”:“status”,“name”:“工作状态”,“property”:{“range”:[“0”,“1”,“2”,“3”,“4”,“5”,“6”],“type”:“enum”},“iconname”:“icon-dp_dust”,“id”:5,“type”:“obj”},{“mode”:“ro”,“code”:“electricity_left”,“name”:“剩余电量”,“property”:{“unit”:"%",“min”:0,“max”:100,“scale”:0,“step”:1,“type”:"va

1 curtida

Com essa versão do app consegui pegar a localKey! Agora o problema parece estar em conectar ao aspirador. o meu é o ZK901 branco. usei a config via yaml q vc deixou de exemplo, veja o log:

[eb0…ake] Connect to addr:192.168.31.126 failed
Traceback (most recent call last):
File “/config/custom_components/localtuya/common.py”, line 139, in _make_connection
self._interface = await pytuya.connect(
File “/config/custom_components/localtuya/pytuya/init.py”, line 637, in connect
_, protocol = await loop.create_connection(
File “/usr/local/lib/python3.8/asyncio/base_events.py”, line 986, in create_connection
infos = await self._ensure_resolved(
File “/usr/local/lib/python3.8/asyncio/base_events.py”, line 1365, in _ensure_resolved
return await loop.getaddrinfo(host, port, family=family, type=type,
File “/usr/local/lib/python3.8/asyncio/base_events.py”, line 825, in getaddrinfo
return await self.run_in_executor(
File “/usr/local/lib/python3.8/concurrent/futures/thread.py”, line 57, in run
result = self.fn(*self.args, **self.kwargs)
File “/usr/local/lib/python3.8/socket.py”, line 918, in getaddrinfo
for res in _socket.getaddrinfo(host, port, family, type, proto, flags):
socket.gaierror: [Errno -2] Name does not resolve

@maxmanager , pode postar seu YAML? Segue o meu completo, para sua referencia

localtuya:
  - host: 192.168.2.109
    device_id: eb793053_ALTERADO_1ijca
    local_key: c12_ALTERADO_588
    friendly_name: Maradona
    protocol_version: "3.3"
    entities:
      - platform: vacuum
        friendly_name: Maradona
        id: 1
        commands_set: "smart,stop,chargego"
        commands_dp: 3
        idle_status_value: "dormant,idle,pause,fault"
        returning_status_value: "backcharge"
        docked_status_value: "fullcharge, charge"
        battery_dp: 5
        cleaning_mode_dp: 3
        cleaning_modes: "smart,random,spiral,wall_follow"
        fan_speed_dp: 3
        fan_speeds: "quiet,auto,strong"

Olá!

Tenho um ZK901 e fiquei muito feliz em saber que é possível colocar o mesmo para rodar junto com o HA, mesmo que seja apenas para iniciar e pausar uma limpeza.

Sou um usuário iniciante e fiquei praticamente uma semana para entender como pegar o localKey. Mas quando consegui vi o quanto era fácil.

Gostaria de parabenizado pela iniciativa na integração e aproveitando tem alguma sugestão ou dica de card? testei alguns exclusivos para vacuum que infelizmente não funcionaram muito bem com o ZK.

Olá @guilherme-cespedes . Que bom que funcionou pra você. Não usei nenhum card em especial no momento - só entidade mesmo.
Você deve ter percebido que a integração ainda está bem limitada… Não estou conseguindo dedicar-me a ela, mas acho que no futuro deva dar pra enviar todos os comandos que o aspirador permite (limpeza de área, de local, modo manual, etc), e também fazer algo com as informações que ele já passa. Voltando ao assunto do card, o que eu mais gostaria e de usar a informação de posição do robô que ele já envia pra tentar mostrar isso num mapa.
Abraço

hahah, bom nome pro aspirador. Um colega tinha sugerido o nome de “Aécio”. Eu tava sem criatividade e acabei chamando o meu de “vando” (era o mais proximo de vacuum cleaner).

O Prates, qual a versão de firmware do seu zk901? Sabe como atualizar?

@douglasit sabe se funciona tbm com o Liectroux ZK901? São o mesmo robô né…

@LeandroIssa imagino que funcione sim, mas apesar de ser o mesmo hardware a implementação da API da Tuya neles podem mudar um pouco a depender do fabricante, por isso algumas funções no da Kabum não funcionam.

Não quis fazer no mesmo post do ZK901 com localtuya por dois motivos: usar integrações diferentes e ser um ajuste provisório, que em teoria serão incluídos na integração Tuya V2 na próxima versão fazendo com que este post perca o sentido de existir.

1 curtida

Muito bom @douglasit
Obrigado por compartilhar e parabéns pelo post!

1 curtida

Um problema que estou passando é que os atributos Clean Area e Clean Time não são carregados com a reintegração do Tuya V2… aparece o Mode, Status full e o Clean Record. Alguma luz?

Alguém sabe informar se já temos suporte a esse robô aspirador com a nova integração da Tuya?

1 curtida

Acabei de encaminhar uma solicitação de atualização do firmware por parte da Kabum. Pedi que fizessem a correção dos parâmetros de status (cleannig ao invés cleaning; e pause ao invés de paused).
Vamos aguardar retorno. Enquanto isso, acredito que seja melhor usar o local Tuya.

2 curtidas

Pedi que fizessem a correção dos parâmetros de status (cleannig ao invés cleaning; e pause ao invés de paused).

Olá! Por acaso recebeu algum retorno da Kabum quanto à isso?

1 curtida

Responderam que deveria acionar a garantia. Respondi que tratava-se de um defeito de implementação - passível portanto de acionamento pelo Código de Defesa do Consumidor, mas nunca responderam. Coloquei uma reclamação no Reclame Aqui e divulgo para todos cobrarem à Kabum: Reclamação

2 curtidas