Neste tutorial compartilhamos um card para uso dos robôs aspiradores com vários comandos integrados:
Esse card foi idealizado pelo Junior Serafim do grupo do telegram.
Foi usado um aspirador integrado via Tuya V2 que está trazendo diversas informações via atributos, caso o seu seja diferente você deve adaptar os sensores para as informações do seu.
Para adicionar seu robô aspirador ao Home Assistant:
Se você usa a versão v1.5.0 ou inferior da integração Tuya V2 deve fazer as alterações desse post:
Dispositivo e atributos do robô aspirador utilizados:
Código para sensores template:
- platform: template
sensors:
aspirador_nome:
friendly_name: Robô Aspirador Nome
value_template: Robô Aspirador
aspirador_status:
friendly_name: Robô Aspirador Status
value_template: "{{state_attr('vacuum.robo_aspirador', 'status_full')}}"
aspirador_status_texto:
friendly_name: Robô Aspirador Status
value_template: >-
{% if (is_state('vacuum.robo_aspirador', 'unknown') or is_state('vacuum.robo_aspirador', 'unavailable')) %}
Indisponível
{% elif (state_attr('vacuum.robo_aspirador', 'fault')!=0 and state_attr('vacuum.robo_aspirador', 'fault')!=none) %}
{% if (is_state_attr('vacuum.robo_aspirador', 'fault',1)) %}
Falha: Roda Emperrada
{% elif (is_state_attr('vacuum.robo_aspirador', 'fault',16)) %}
Falha: Aspirador fora do chão
{% elif (is_state_attr('vacuum.robo_aspirador', 'fault',32)) %}
Falha: Parachoque emperrado (Esquerda)
{% elif (is_state_attr('vacuum.robo_aspirador', 'fault',64)) %}
Falha: Parachoque emperrado (Direita)
{% elif (is_state_attr('vacuum.robo_aspirador', 'fault',512)) %}
Falha: Recepiente de poeira não instalado
{% elif (is_state_attr('vacuum.robo_aspirador', 'fault',2048)) %}
Falha: Escova principal emperrada
{% elif (is_state_attr('vacuum.robo_aspirador', 'fault',8192)) %}
Falha: Reservatório de água removido
{% elif (is_state_attr('vacuum.robo_aspirador', 'fault',32768)) %}
Falha: Robô Preso
{% else %}
Falha {{state_attr('vacuum.robo_aspirador', 'fault')}}
{% endif %}
{% elif (is_state('vacuum.robo_aspirador','docked')) or (is_state_attr('vacuum.robo_aspirador', 'status_full','charging')) or (is_state_attr('vacuum.robo_aspirador', 'status_full','chargecompleted')) %}
Na Base
{% elif (is_state_attr('vacuum.robo_aspirador', 'status_full','docking')) %}
Retornando para a base
{% elif (is_state_attr('vacuum.robo_aspirador', 'status_full','workcompleted')) %}
Limpeza Concluída
{% elif (is_state_attr('vacuum.robo_aspirador', 'status_full','mopping')) %}
Limpeza com pano
{% elif (is_state_attr('vacuum.robo_aspirador', 'status_full','cleanning')) %}
Aspiração
{% elif (is_state_attr('vacuum.robo_aspirador', 'status_full','pause')) %}
Pausado
{% elif (is_state_attr('vacuum.robo_aspirador', 'status_full','sleep')) %}
Standby (inativo)
{% elif (is_state_attr('vacuum.robo_aspirador', 'status_full','standby')) %}
Standby
{% else %}
-
{% endif %}
aspirador_bateria:
friendly_name: Robô Aspirador Bateria
value_template: "{{state_attr('vacuum.robo_aspirador', 'battery_level') | float}}"
unit_of_measurement: "%"
aspirador_bateria_status:
friendly_name: Robô Bateria Status
value_template: >-
{% if (is_state_attr('vacuum.robo_aspirador', 'status_full','charging')) %}
Carregando
{% elif (is_state_attr('vacuum.robo_aspirador', 'status_full','chargecompleted')) %}
Carregamento Completo
{% elif (state_attr('vacuum.robo_aspirador', 'battery_level')<=20) %}
Bateria Fraca
{% else %}
Bateria em descarga
{% endif %}
aspirador_modo:
friendly_name: Robô Modo
value_template: >-
{% if (is_state_attr('vacuum.robo_aspirador', 'mode','smart')) %}
Limpeza Automática
{% elif (is_state_attr('vacuum.robo_aspirador', 'mode','spiral')) %}
Espiral
{% elif (is_state_attr('vacuum.robo_aspirador', 'mode','wall_follow')) %}
Limpeza de Cantos
{% elif (is_state_attr('vacuum.robo_aspirador', 'mode','single')) %}
Limpeza de Cômodo
{% elif (is_state_attr('vacuum.robo_aspirador', 'mode','chargego')) %}
Base
{% elif (is_state_attr('vacuum.robo_aspirador', 'mode','standby')) %}
Em Espera
{% else %}
{{state_attr('vacuum.robo_aspirador', 'mode')}}
{% endif %}
aspirador_area:
friendly_name: Robô Aspirador Área
value_template: >-
{% if (state_attr('vacuum.robo_aspirador', 'clean_area') != None) %}
{{state_attr('vacuum.robo_aspirador', 'clean_area')}}
{% else %}
-
{% endif %}
unit_of_measurement: "m²"
aspirador_tempo:
friendly_name: Robô Aspirador Tempo
value_template: >-
{% if (state_attr('vacuum.robo_aspirador', 'clean_time') != None) %}
{{state_attr('vacuum.robo_aspirador', 'clean_time')}}
{% else %}
-
{% endif %}
unit_of_measurement: "min"
Código para o card, utilizando o picture-elements
:
type: picture-elements
image: /local/imagens/vacuum_kabum.jpg
elements:
- entity: sensor.aspirador_tempo
prefix: 'T. Limpeza: '
style:
top: 90%
left: 25%
'--iron-icon-fill-color': blue
type: state-label
- entity: sensor.aspirador_area
prefix: 'Área Limpa: '
style:
top: 90%
left: 72%
'--iron-icon-fill-color': blue
type: state-label
- type: state-label
entity: sensor.aspirador_modo
prefix: 'Modo: '
tap_action:
action: call-service
service: input_select.select_next
service_data:
entity_id: input_select.aspirador_proximo_modo
style:
top: 28%
left: 76%
- entity: sensor.aspirador_nome
style:
top: 7%
left: 50%
'--iron-icon-fill-color': blue
type: state-label
- entity: sensor.aspirador_status_texto
style:
top: 15%
left: 50%
'--iron-icon-fill-color': blue
type: state-label
- type: icon
icon: mdi:battery
style:
top: 63%
left: 7%
'--iron-icon-fill-color': blu
- entity: sensor.aspirador_bateria
style:
top: 63%
left: 15%
'--iron-icon-fill-color': blue
type: state-label
- entity: sensor.aspirador_bateria_status
style:
top: 69%
left: 23%
'--iron-icon-fill-color': blue
type: state-label
- entity: input_boolean.aspirador_proximo_modo
icon: mdi:robot-vacuum
tap_action:
action: toggle
style:
top: 78%
left: 84%
type: state-icon
- type: icon
icon: mdi:home-map-marker
tap_action:
action: call-service
service: vacuum.return_to_base
service_data:
entity_id: vacuum.robo_aspirador
style:
top: 78%
left: 70%
'--iron-icon-fill-color': blue
- type: icon
icon: mdi:stop
tap_action:
action: call-service
service: vacuum.stop
service_data:
entity_id: vacuum.robo_aspirador
style:
top: 78%
left: 56%
'--iron-icon-fill-color': blue
- type: icon
icon: mdi:pause
tap_action:
action: call-service
service: vacuum.pause
service_data:
entity_id: vacuum.robo_aspirador
style:
top: 78%
left: 42%
'--iron-icon-fill-color': blue
- type: icon
icon: mdi:map-marker
tap_action:
action: call-service
service: vacuum.locate
service_data:
entity_id: vacuum.robo_aspirador
style:
top: 78%
left: 28%
'--iron-icon-fill-color': blue
- type: icon
icon: mdi:play
tap_action:
action: call-service
service: vacuum.start
service_data:
entity_id: vacuum.robo_aspirador
style:
top: 78%
left: 14%
'--iron-icon-fill-color': blue
- entity: switch.aspirador_silenciado
type: state-label
prefix: 'Mudo: '
tap_action:
action: call-service
service: switch.toggle
service_data:
entity_id: switch.aspirador_silenciado
style:
top: 69%
left: 83%
'--iron-icon-fill-color': blue
- entity: switch.aspirador_silenciado
state_color: true
icon: mdi:volume-mute
tap_action:
action: call-service
service: switch.toggle
service_data:
entity_id: switch.aspirador_silenciado
style:
top: 64%
left: 83%
type: state-icon
Imagem para utilizar no card:
Neste exemplo ela foi salva em /config/www/imagens/
com o nome vacuum_kabum.jpg
.
Input boolean necessário para a função próximo modo do aspirador:
input_boolean:
aspirador_proximo_modo:
name: Aspirador - Selecionar Próximo Modo
initial: off
Input select necessário para a função próximo modo do aspirador:
input_select:
aspirador_proximo_modo:
name: Aspirador - Seleção Próximo Modo
options:
- standby
- smart
- spiral
- single
- wall_follow
- chargego
initial: standby
Código no NodeRed para a função próximo modo do aspirador:
[{"id":"ace770c0211d2f52","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"848e65ebd4a54e9b","type":"switch","z":"ace770c0211d2f52","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"standby","vt":"str"},{"t":"eq","v":"smart","vt":"str"},{"t":"eq","v":"spiral","vt":"str"},{"t":"eq","v":"single","vt":"str"},{"t":"eq","v":"wall_follow","vt":"str"},{"t":"eq","v":"chargego","vt":"str"}],"checkall":"true","repair":false,"outputs":6,"x":370,"y":280,"wires":[["4971499886d629ba"],["215f68b621416643"],["69839f9cb092a8de"],["00b4408d208e139b"],["0429bb9adee48a81"],["d83e3dfe845138a4"]]},{"id":"215f68b621416643","type":"api-call-service","z":"ace770c0211d2f52","name":"modo smart","server":"d6f9077a.fa6448","version":3,"debugenabled":false,"service_domain":"select","service":"select_option","entityId":"select.tyebced93a821db35059xhsx","data":"{\"option\":\"smart\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":610,"y":200,"wires":[[]]},{"id":"00b4408d208e139b","type":"api-call-service","z":"ace770c0211d2f52","name":"modo single","server":"d6f9077a.fa6448","version":3,"debugenabled":false,"service_domain":"select","service":"select_option","entityId":"select.tyebced93a821db35059xhsx","data":"{\"option\":\"single\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":610,"y":320,"wires":[[]]},{"id":"0429bb9adee48a81","type":"api-call-service","z":"ace770c0211d2f52","name":"modo wall_follow","server":"d6f9077a.fa6448","version":3,"debugenabled":false,"service_domain":"select","service":"select_option","entityId":"select.tyebced93a821db35059xhsx","data":"{\"option\":\"wall_follow\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":630,"y":380,"wires":[[]]},{"id":"69839f9cb092a8de","type":"api-call-service","z":"ace770c0211d2f52","name":"modo Spiral","server":"d6f9077a.fa6448","version":3,"debugenabled":false,"service_domain":"select","service":"select_option","entityId":"select.tyebced93a821db35059xhsx","data":"{\"option\":\"spiral\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":610,"y":260,"wires":[[]]},{"id":"2075dca4337e0e73","type":"server-state-changed","z":"ace770c0211d2f52","name":"modo aspiração","server":"d6f9077a.fa6448","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_select.aspirador_proximo_modo","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"","halt_if_type":"str","halt_if_compare":"is","outputs":1,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":120,"y":280,"wires":[["848e65ebd4a54e9b"]]},{"id":"4971499886d629ba","type":"api-call-service","z":"ace770c0211d2f52","name":"modo standby","server":"d6f9077a.fa6448","version":3,"debugenabled":false,"service_domain":"select","service":"select_option","entityId":"select.tyebced93a821db35059xhsx","data":"{\"option\":\"standby\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":620,"y":140,"wires":[[]]},{"id":"d83e3dfe845138a4","type":"api-call-service","z":"ace770c0211d2f52","name":"modo chargego","server":"d6f9077a.fa6448","version":3,"debugenabled":false,"service_domain":"select","service":"select_option","entityId":"select.tyebced93a821db35059xhsx","data":"{\"option\":\"chargego\"}","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":620,"y":440,"wires":[[]]},{"id":"842b7e7ac0607c1c","type":"api-call-service","z":"ace770c0211d2f52","name":"Toggle Aspirador Modo","server":"d6f9077a.fa6448","version":3,"debugenabled":false,"service_domain":"input_select","service":"select_next","entityId":"input_select.aspirador_proximo_modo","data":"","dataType":"jsonata","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":640,"y":80,"wires":[[]]},{"id":"c5579b5c098f2819","type":"server-state-changed","z":"ace770c0211d2f52","name":"Input Proximo Modo","server":"d6f9077a.fa6448","version":3,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_boolean.aspirador_proximo_modo","entityidfiltertype":"exact","outputinitially":false,"state_type":"str","haltifstate":"on","halt_if_type":"str","halt_if_compare":"is","outputs":2,"output_only_on_state_change":true,"for":0,"forType":"num","forUnits":"minutes","ignorePrevStateNull":false,"ignorePrevStateUnknown":false,"ignorePrevStateUnavailable":false,"ignoreCurrentStateUnknown":false,"ignoreCurrentStateUnavailable":false,"outputProperties":[{"property":"payload","propertyType":"msg","value":"","valueType":"entityState"},{"property":"data","propertyType":"msg","value":"","valueType":"eventData"},{"property":"topic","propertyType":"msg","value":"","valueType":"triggerId"}],"x":130,"y":80,"wires":[["c96f65ef8126be7c"],[]]},{"id":"c96f65ef8126be7c","type":"api-call-service","z":"ace770c0211d2f52","name":"Reset botão P/ off","server":"82136dea.a6d7a","version":3,"debugenabled":false,"service_domain":"input_boolean","service":"turn_off","entityId":"input_boolean.aspirador_proximo_modo","data":"","dataType":"json","mergecontext":"","mustacheAltTags":false,"outputProperties":[],"queue":"none","x":350,"y":80,"wires":[["842b7e7ac0607c1c"]]},{"id":"9b8b06954bdbc23f","type":"comment","z":"ace770c0211d2f52","name":"Aspirador - Próximo Modo","info":"","x":130,"y":40,"wires":[]},{"id":"d6f9077a.fa6448","type":"server","name":"Home Assistant","version":1,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true},{"id":"82136dea.a6d7a","type":"server","name":"Home Assistant","version":1,"legacy":false,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true}]