Roborock Mapa + divisões + Nr Limpezas

Vou deixar aqui a apresentação do que eu uso atualmente para controlar o meu roborock e vou colocar os passos necessarios para ter as mesmas funções.


O primeiro card tem uns comandos simples do robot e algumas informações uteis do mesmo, o segundo card tem o mapa em tempo real e tem a opção “go to target” e " zone cleanup ", já o terceiro card para mim é o mais importante de todos, nesse cartão podemos selecionar as divisões que queremos aspirar e o número de vezes que cada uma vai ser aspirada.

Agora vou tentar explicar como obter um setup igual, de qualquer forma vou assumir que já tem o vosso roborock adicionado no HA pronto a usar. Também quero deixar a nota que eu uso NodeRed para automações, e este tutorial vai-se basear no NR, também vou assumir que tem o HACS instalado.

1 - A instalar :

Xiaomi Cloud Map Extractor

Xiaomi Vacuum Map Card

Simple Vacuum Card

Fold Entity Row

NumberBox Card

2 - Configuração Xiaomi Cloud Map Extractor

camera:
  - platform: xiaomi_cloud_map_extractor
    host: ip_do_teu_roborock
    token: token_do_teu_roborock
    username: username_da_tua_conta_xiaomi
    password: password_da_tua_conta_xiaomi
    auto_update: false
    draw: ['all']
    attributes:
      - calibration_points  
    colors:
      color_map_wall_v2: [0, 0, 0]
      color_grey_wall: [160, 160, 160]
      color_path: [0, 0, 0]
    sizes:
      charger_radius: 7
      vacuum_radius: 6.5
    map_transformation:
      scale: 2
      trim:
        top: 27
        bottom: 29
        left: 18
        right: 16

No que diz respeito as colors, sizes e map transformations, isto deve ser alterado a gosto de cada um, o auto update eu não uso, porque isto causa um load desnecessário na maquina que corre o HA, porque esta integração vai fazer update ao mapa a cada 5s estejam ou não a usar o robot, mais para frente vão ver como eu faço update ao mapa apenas quando o robot está a movimentar-se pela casa.

3 - Helpers

Para isto tudo funcionar é necessário criar vários helpers, eu crio os meus na UI, não o faço no configuration. Sendo assim é ir ao menu de Helpers e criar os seguintes. Um toggle que vai ser o botão de inicio da aspiração, e vários input numbers que vão ser usados para as divisões, exemplo em baixo.

image

4 - NodeRED

No nodered uso 2 flows, um deles faz update ao mapa quando o robot está a limpar ou a regressar a base, assim garanto que o mapa fica sempre atualizado apenas quando realmente faz falta, e o outro flow é o que gere as divisões o número de vezes a limpar quando eu seleciono para aspirar. (mais uma vez chamo a atenção para a necessidade de ajustar ao caso de cada um.

[{"id":"a63c9be1.ee95e8","type":"tab","label":"Roborock","disabled":false,"info":""},{"id":"bcbfcc5f.dec3d","type":"api-call-service","z":"a63c9be1.ee95e8","name":"Map Update","server":"48c6a047.be8eb","version":1,"debugenabled":false,"service_domain":"homeassistant","service":"update_entity","entityId":"camera.xiaomi_cloud_map_extractor","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":670,"y":240,"wires":[["ea8cb3eb.ca3dd","a843828c.34b51"]]},{"id":"bc974841.0bf828","type":"server-state-changed","z":"a63c9be1.ee95e8","name":"Robock Docked","server":"48c6a047.be8eb","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"vacuum.aspirador","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,"x":120,"y":240,"wires":[["cd96eee1.fadce"]]},{"id":"d7b24b12.9306a8","type":"delay","z":"a63c9be1.ee95e8","name":"","pauseType":"delay","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":440,"y":280,"wires":[["bcbfcc5f.dec3d"]]},{"id":"cd96eee1.fadce","type":"switch","z":"a63c9be1.ee95e8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"cleaning","vt":"str"},{"t":"eq","v":"returning","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":270,"y":240,"wires":[["bcbfcc5f.dec3d"],["bcbfcc5f.dec3d"]]},{"id":"a843828c.34b51","type":"api-current-state","z":"a63c9be1.ee95e8","name":"cleaning","server":"48c6a047.be8eb","version":1,"outputs":2,"halt_if":"cleaning","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"vacuum.aspirador","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":440,"y":120,"wires":[["d7b24b12.9306a8"],[]]},{"id":"ea8cb3eb.ca3dd","type":"api-current-state","z":"a63c9be1.ee95e8","name":"returning","server":"48c6a047.be8eb","version":1,"outputs":2,"halt_if":"returning","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"vacuum.aspirador","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":440,"y":180,"wires":[["d7b24b12.9306a8"],[]]},{"id":"5f5c1f29.1e211","type":"comment","z":"a63c9be1.ee95e8","name":"Atualização do mapa do aspirador apenas quando está a funcionar","info":"","x":280,"y":40,"wires":[]},{"id":"5e914371.29870c","type":"comment","z":"a63c9be1.ee95e8","name":"Escolha de divisões e nr de limpezas","info":"","x":180,"y":360,"wires":[]},{"id":"6363998a.ea18e8","type":"server-state-changed","z":"a63c9be1.ee95e8","name":"Iniciar Aspiração","server":"48c6a047.be8eb","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_boolean.iniciar_aspiracao","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,"x":120,"y":640,"wires":[["ef348a46.b23b78","593df705.73a1b8"],[]]},{"id":"ef348a46.b23b78","type":"ha-get-entities","z":"a63c9be1.ee95e8","server":"48c6a047.be8eb","name":"Divisões","rules":[{"property":"entity_id","logic":"starts_with","value":"input_number.asp","valueType":"str"},{"property":"state","logic":"is_not","value":"0.0","valueType":"str"}],"output_type":"split","output_empty_results":false,"output_location_type":"msg","output_location":"payload","output_results_count":1,"x":300,"y":640,"wires":[["f3b58e3f.5d0db"]]},{"id":"f3b58e3f.5d0db","type":"switch","z":"a63c9be1.ee95e8","name":"","property":"payload.entity_id","propertyType":"msg","rules":[{"t":"eq","v":"input_number.aspcozinha","vt":"str"},{"t":"eq","v":"input_number.lavandaria","vt":"str"},{"t":"eq","v":"input_number.aspsala_de_estar","vt":"str"},{"t":"eq","v":"input_number.aspsala_de_jantar","vt":"str"},{"t":"eq","v":"input_number.asphall_entrada","vt":"str"},{"t":"eq","v":"input_number.aspcorredor","vt":"str"},{"t":"eq","v":"input_number.asparrumos","vt":"str"},{"t":"eq","v":"input_number.aspwc_servico","vt":"str"},{"t":"eq","v":"input_number.aspwc_principal","vt":"str"},{"t":"eq","v":"input_number.aspquarto","vt":"str"},{"t":"eq","v":"input_number.aspescritorio","vt":"str"}],"checkall":"true","repair":false,"outputs":11,"x":450,"y":640,"wires":[["9796c6a7.a31598"],["44e4c357.169ccc"],["60673abc.d61cf4"],["490a7e26.19f3d"],["f9902da2.016b"],["3505310c.0970be"],["bdeda0e3.33c67"],["7de1adea.950f04"],["884dbe90.fb594"],["d57f8762.dee0f8"],["117475f1.2f23aa"]]},{"id":"44e4c357.169ccc","type":"function","z":"a63c9be1.ee95e8","name":"Lavandaria","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"20\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"20,20\";\n     return msg;\n} else {\n     msg.payload = \"20,20,20\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":480,"wires":[["1b75df14.f0f251"]]},{"id":"60673abc.d61cf4","type":"function","z":"a63c9be1.ee95e8","name":"Sala Estar","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"19\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"18,18\";\n     return msg;\n} else {\n     msg.payload = \"18,18,18\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":520,"wires":[["1b75df14.f0f251"]]},{"id":"490a7e26.19f3d","type":"function","z":"a63c9be1.ee95e8","name":"Sala Jantar","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"17\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"17,17\";\n     return msg;\n} else {\n     msg.payload = \"17,17,17\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":560,"wires":[["1b75df14.f0f251"]]},{"id":"f9902da2.016b","type":"function","z":"a63c9be1.ee95e8","name":"Hall","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"16\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"16,16\";\n     return msg;\n} else {\n     msg.payload = \"16,16,16\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":600,"wires":[["1b75df14.f0f251"]]},{"id":"3505310c.0970be","type":"function","z":"a63c9be1.ee95e8","name":"Corredor","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"21\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"21,21\";\n     return msg;\n} else {\n     msg.payload = \"21,21,21\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":640,"wires":[["1b75df14.f0f251"]]},{"id":"bdeda0e3.33c67","type":"function","z":"a63c9be1.ee95e8","name":"Arrumos","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"4\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"4,4\";\n     return msg;\n} else {\n     msg.payload = \"4,4,4\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":680,"wires":[["1b75df14.f0f251"]]},{"id":"7de1adea.950f04","type":"function","z":"a63c9be1.ee95e8","name":"Wc Serviço","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"8\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"8,8\";\n     return msg;\n} else {\n     msg.payload = \"8,8,8\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":720,"wires":[["1b75df14.f0f251"]]},{"id":"884dbe90.fb594","type":"function","z":"a63c9be1.ee95e8","name":"WC Principal","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"1\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"1,1\";\n     return msg;\n} else {\n     msg.payload = \"1,1,1\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":760,"wires":[["1b75df14.f0f251"]]},{"id":"d57f8762.dee0f8","type":"function","z":"a63c9be1.ee95e8","name":"Quarto","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"2\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"2,2\";\n     return msg;\n} else {\n     msg.payload = \"2,2,2\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":800,"wires":[["1b75df14.f0f251"]]},{"id":"117475f1.2f23aa","type":"function","z":"a63c9be1.ee95e8","name":"Escritório","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"6\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"6,6\";\n     return msg;\n} else {\n     msg.payload = \"6,6,6\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":840,"wires":[["1b75df14.f0f251"]]},{"id":"9796c6a7.a31598","type":"function","z":"a63c9be1.ee95e8","name":"Cozinha","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"19\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"19,19\";\n     return msg;\n} else {\n     msg.payload = \"19,19,19\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":440,"wires":[["1b75df14.f0f251"]]},{"id":"1b75df14.f0f251","type":"join","z":"a63c9be1.ee95e8","name":"","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"5","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":850,"y":640,"wires":[["e9552009.8ddce"]]},{"id":"e9552009.8ddce","type":"api-call-service","z":"a63c9be1.ee95e8","name":"Aspirar","server":"48c6a047.be8eb","version":1,"debugenabled":false,"service_domain":"vacuum","service":"send_command","entityId":"vacuum.aspirador","data":"{  \"command\": \"app_segment_clean\",  \"params\": [    {{payload}}  ]}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1000,"y":640,"wires":[[]]},{"id":"593df705.73a1b8","type":"delay","z":"a63c9be1.ee95e8","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":180,"y":760,"wires":[["93d9d7be.073918"]]},{"id":"93d9d7be.073918","type":"api-call-service","z":"a63c9be1.ee95e8","name":"Aspiração off","server":"48c6a047.be8eb","version":1,"debugenabled":false,"service_domain":"input_boolean","service":"turn_off","entityId":"input_boolean.iniciar_aspiracao","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":350,"y":760,"wires":[[]]},{"id":"48c6a047.be8eb","type":"server","name":"Home Assistant","addon":true}]

[{"id":"a63c9be1.ee95e8","type":"tab","label":"Roborock","disabled":false,"info":""},{"id":"bcbfcc5f.dec3d","type":"api-call-service","z":"a63c9be1.ee95e8","name":"Map Update","server":"48c6a047.be8eb","version":1,"debugenabled":false,"service_domain":"homeassistant","service":"update_entity","entityId":"camera.xiaomi_cloud_map_extractor","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":670,"y":240,"wires":[["ea8cb3eb.ca3dd","a843828c.34b51"]]},{"id":"bc974841.0bf828","type":"server-state-changed","z":"a63c9be1.ee95e8","name":"Robock Docked","server":"48c6a047.be8eb","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"vacuum.aspirador","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,"x":120,"y":240,"wires":[["cd96eee1.fadce"]]},{"id":"d7b24b12.9306a8","type":"delay","z":"a63c9be1.ee95e8","name":"","pauseType":"delay","timeout":"4","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":440,"y":280,"wires":[["bcbfcc5f.dec3d"]]},{"id":"cd96eee1.fadce","type":"switch","z":"a63c9be1.ee95e8","name":"","property":"payload","propertyType":"msg","rules":[{"t":"eq","v":"cleaning","vt":"str"},{"t":"eq","v":"returning","vt":"str"}],"checkall":"true","repair":false,"outputs":2,"x":270,"y":240,"wires":[["bcbfcc5f.dec3d"],["bcbfcc5f.dec3d"]]},{"id":"a843828c.34b51","type":"api-current-state","z":"a63c9be1.ee95e8","name":"cleaning","server":"48c6a047.be8eb","version":1,"outputs":2,"halt_if":"cleaning","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"vacuum.aspirador","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":440,"y":120,"wires":[["d7b24b12.9306a8"],[]]},{"id":"ea8cb3eb.ca3dd","type":"api-current-state","z":"a63c9be1.ee95e8","name":"returning","server":"48c6a047.be8eb","version":1,"outputs":2,"halt_if":"returning","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"vacuum.aspirador","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"data","override_data":"msg","blockInputOverrides":false,"x":440,"y":180,"wires":[["d7b24b12.9306a8"],[]]},{"id":"5f5c1f29.1e211","type":"comment","z":"a63c9be1.ee95e8","name":"Atualização do mapa do aspirador apenas quando está a funcionar","info":"","x":280,"y":40,"wires":[]},{"id":"5e914371.29870c","type":"comment","z":"a63c9be1.ee95e8","name":"Escolha de divisões e nr de limpezas","info":"","x":180,"y":360,"wires":[]},{"id":"6363998a.ea18e8","type":"server-state-changed","z":"a63c9be1.ee95e8","name":"Iniciar Aspiração","server":"48c6a047.be8eb","version":1,"exposeToHomeAssistant":false,"haConfig":[{"property":"name","value":""},{"property":"icon","value":""}],"entityidfilter":"input_boolean.iniciar_aspiracao","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,"x":120,"y":640,"wires":[["ef348a46.b23b78","593df705.73a1b8"],[]]},{"id":"ef348a46.b23b78","type":"ha-get-entities","z":"a63c9be1.ee95e8","server":"48c6a047.be8eb","name":"Divisões","rules":[{"property":"entity_id","logic":"starts_with","value":"input_number.asp","valueType":"str"},{"property":"state","logic":"is_not","value":"0.0","valueType":"str"}],"output_type":"split","output_empty_results":false,"output_location_type":"msg","output_location":"payload","output_results_count":1,"x":300,"y":640,"wires":[["f3b58e3f.5d0db"]]},{"id":"f3b58e3f.5d0db","type":"switch","z":"a63c9be1.ee95e8","name":"","property":"payload.entity_id","propertyType":"msg","rules":[{"t":"eq","v":"input_number.aspcozinha","vt":"str"},{"t":"eq","v":"input_number.lavandaria","vt":"str"},{"t":"eq","v":"input_number.aspsala_de_estar","vt":"str"},{"t":"eq","v":"input_number.aspsala_de_jantar","vt":"str"},{"t":"eq","v":"input_number.asphall_entrada","vt":"str"},{"t":"eq","v":"input_number.aspcorredor","vt":"str"},{"t":"eq","v":"input_number.asparrumos","vt":"str"},{"t":"eq","v":"input_number.aspwc_servico","vt":"str"},{"t":"eq","v":"input_number.aspwc_principal","vt":"str"},{"t":"eq","v":"input_number.aspquarto","vt":"str"},{"t":"eq","v":"input_number.aspescritorio","vt":"str"}],"checkall":"true","repair":false,"outputs":11,"x":450,"y":640,"wires":[["9796c6a7.a31598"],["44e4c357.169ccc"],["60673abc.d61cf4"],["490a7e26.19f3d"],["f9902da2.016b"],["3505310c.0970be"],["bdeda0e3.33c67"],["7de1adea.950f04"],["884dbe90.fb594"],["d57f8762.dee0f8"],["117475f1.2f23aa"]]},{"id":"44e4c357.169ccc","type":"function","z":"a63c9be1.ee95e8","name":"Lavandaria","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"20\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"20,20\";\n     return msg;\n} else {\n     msg.payload = \"20,20,20\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":480,"wires":[["1b75df14.f0f251"]]},{"id":"60673abc.d61cf4","type":"function","z":"a63c9be1.ee95e8","name":"Sala Estar","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"19\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"18,18\";\n     return msg;\n} else {\n     msg.payload = \"18,18,18\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":520,"wires":[["1b75df14.f0f251"]]},{"id":"490a7e26.19f3d","type":"function","z":"a63c9be1.ee95e8","name":"Sala Jantar","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"17\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"17,17\";\n     return msg;\n} else {\n     msg.payload = \"17,17,17\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":560,"wires":[["1b75df14.f0f251"]]},{"id":"f9902da2.016b","type":"function","z":"a63c9be1.ee95e8","name":"Hall","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"16\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"16,16\";\n     return msg;\n} else {\n     msg.payload = \"16,16,16\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":600,"wires":[["1b75df14.f0f251"]]},{"id":"3505310c.0970be","type":"function","z":"a63c9be1.ee95e8","name":"Corredor","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"21\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"21,21\";\n     return msg;\n} else {\n     msg.payload = \"21,21,21\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":640,"wires":[["1b75df14.f0f251"]]},{"id":"bdeda0e3.33c67","type":"function","z":"a63c9be1.ee95e8","name":"Arrumos","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"4\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"4,4\";\n     return msg;\n} else {\n     msg.payload = \"4,4,4\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":680,"wires":[["1b75df14.f0f251"]]},{"id":"7de1adea.950f04","type":"function","z":"a63c9be1.ee95e8","name":"Wc Serviço","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"8\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"8,8\";\n     return msg;\n} else {\n     msg.payload = \"8,8,8\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":720,"wires":[["1b75df14.f0f251"]]},{"id":"884dbe90.fb594","type":"function","z":"a63c9be1.ee95e8","name":"WC Principal","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"1\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"1,1\";\n     return msg;\n} else {\n     msg.payload = \"1,1,1\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":650,"y":760,"wires":[["1b75df14.f0f251"]]},{"id":"d57f8762.dee0f8","type":"function","z":"a63c9be1.ee95e8","name":"Quarto","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"2\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"2,2\";\n     return msg;\n} else {\n     msg.payload = \"2,2,2\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":630,"y":800,"wires":[["1b75df14.f0f251"]]},{"id":"117475f1.2f23aa","type":"function","z":"a63c9be1.ee95e8","name":"Escritório","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"6\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"6,6\";\n     return msg;\n} else {\n     msg.payload = \"6,6,6\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":840,"wires":[["1b75df14.f0f251"]]},{"id":"9796c6a7.a31598","type":"function","z":"a63c9be1.ee95e8","name":"Cozinha","func":"if  (msg.payload.state == \"1.0\") {\n     msg.payload = \"19\";\n     return msg;\n} else if \n    (msg.payload.state == \"2.0\") {\n     msg.payload = \"19,19\";\n     return msg;\n} else {\n     msg.payload = \"19,19,19\";\n     return msg;\n}","outputs":1,"noerr":0,"initialize":"","finalize":"","x":640,"y":440,"wires":[["1b75df14.f0f251"]]},{"id":"1b75df14.f0f251","type":"join","z":"a63c9be1.ee95e8","name":"","mode":"custom","build":"array","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"5","count":"","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":850,"y":640,"wires":[["e9552009.8ddce"]]},{"id":"e9552009.8ddce","type":"api-call-service","z":"a63c9be1.ee95e8","name":"Aspirar","server":"48c6a047.be8eb","version":1,"debugenabled":false,"service_domain":"vacuum","service":"send_command","entityId":"vacuum.aspirador","data":"{  \"command\": \"app_segment_clean\",  \"params\": [    {{payload}}  ]}","dataType":"json","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":1000,"y":640,"wires":[[]]},{"id":"593df705.73a1b8","type":"delay","z":"a63c9be1.ee95e8","name":"","pauseType":"delay","timeout":"1","timeoutUnits":"seconds","rate":"1","nbRateUnits":"1","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":180,"y":760,"wires":[["93d9d7be.073918"]]},{"id":"93d9d7be.073918","type":"api-call-service","z":"a63c9be1.ee95e8","name":"Aspiração off","server":"48c6a047.be8eb","version":1,"debugenabled":false,"service_domain":"input_boolean","service":"turn_off","entityId":"input_boolean.iniciar_aspiracao","data":"","dataType":"jsonata","mergecontext":"","output_location":"","output_location_type":"none","mustacheAltTags":false,"x":350,"y":760,"wires":[[]]},{"id":"48c6a047.be8eb","type":"server","name":"Home Assistant","addon":true}]

5 - Lovelace Card

type: vertical-stack
cards:
 - type: 'custom:xiaomi-vacuum-card'
   entity: vacuum.aspirador
   image: /local/vacuum.png
   name: Simba
   vendor: xiaomi
 - type: 'custom:xiaomi-vacuum-map-card'
   entity: vacuum.aspirador
   map_camera: camera.xiaomi_cloud_map_extractor
   camera_calibration: true
 - entities:
     - entities:
         - entity: input_number.aspcozinha
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.asplavandaria
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.aspsala_de_estar
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.aspsala_de_jantar
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.asphall_entrada
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.aspcorredor
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.asparrumos
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.aspwc_servico
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.aspwc_principal
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.aspquarto
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
         - entity: input_number.aspescritorio
           type: 'custom:numberbox-card'
           icon_plus: 'mdi:chevron-up'
           icon_minus: 'mdi:chevron-down'
           style: |
             .cur-num{font-size:25px !important}
       head:
         entity: input_boolean.iniciar_aspiracao
         secondary_info: last-changed
         icon: 'mdi:robot-vacuum'
       type: 'custom:fold-entity-row'
   show_header: true
   type: entities

Quero deixar a informação importantíssima que eu não sou autor de nada disto, eu baseei-me na ajuda dos colegas aqui do fórum, no discord e na internet em geral, eles sabem quem são :slight_smile: .

8 Likes

Muito bom! Apenas a sugerir que os três cartões poderiam estar todos condensados num só utilizando horizontal e/ou vertical stack.

:cpha_discord_icon_yes:

1 Like

Vou analisar isso :slight_smile:

1 Like

Bom trabalho, isso agora quer é continuação :slight_smile: :cpha_discord_icon_base:

Parabéns @JorgeTeixeira !!

Muito bom trabalho !!

Boas a todos, segui este tutorial e já tenho o meu S5 max adicionado no HA, contudo não estou a conseguir carregar o mapa, no Controlo do servidor da me sempre o seguinte erro:

Platform error camera.xiaomi_cloud_map_extractor - Requirements for xiaomi_cloud_map_extractor not found: [‘pybase64’].

Cumprimentos

ou um grid tambem serve…

Configuraste o map cloud extrator ? Podes mostrar a configuração ?


Copyright © 2017-2021. Todos os direitos reservados
CPHA.pt - info@cpha.pt


FAQ | Termos de Serviço/Regras | Política de Privacidade