Como integrar o Google Fit ao Home Assistant (Dados da Mi Band e relógios Amazfit)

Olá a todos!

Muitos tem a Mi Band ou relógios smart da Amazfit e eles tem integração com o Googlefit, os dados do Mi fit ou do app Amazfit são repassados ao Googlefit.
Nesse tutorial vou mostrar como adicionar seus dados que estão no Googlefit ao Home Assistant.

Primeiro temos que ir no app Mi fit ou Amazfit e adicionar o Googlefit.

No app Amazfit clique em Perfil -> Adicionar conta -> GoogleFit e selecione sua conta google que esta no app Google Fit.

Agora vamos para o tutorial de integração ao Home Assistant.

De inicio temos conseguir um client_id e um client_secret para adicionar no configuration.yaml

Para conseguir esses dados temos que seguir o tutorial de integração do Google Calendar Event, vamos lá nos documentos do Home Assistant:

Entrando no site Google Developers Console vamos selecionar “Criar um projeto” e clica em “Continuar”

Agora clique em “Acessar credenciais”

Na barra lateral clique em “Credenciais”, depois “Criar credenciais” e “ID do cliente OAuth”

Clique em “Configurar tela de consentimento”

Vamos escolher “Externo” e depois clicar em “Criar”

Na tela de consentimento temos que colocar um “Nome do aplicativo” pode ser qualquer nome.

E descendo a tela clique em “Salvar”

Agora vamos gerar um client_id e um client_secret! Vamos novamente em “Credenciais”, depois “Criar credenciais” e “ID do cliente OAuth”.

Mas agora temos uma tela diferente! Em “Tipo de aplicativo” vamos selecionar “TVs e dispositivos de entrada limitados” e clicar em “Criar”.

Pronto! Conseguimos os nossos client_id e cliente_secret para adicionar ao Home Assistant. (o meu está borrado na imagem, mas o de vocês vai estar perfeito!)

Agora temos que ativar a Fitness API

Na barra lateral clique em “Painel” e depois em “ATIVAR APIS E SERVIÇOS”

Na busca escreva “Fitness API”, aparecendo clique nela!

Agora é só ativar!

Agora vamos para a configuração no Home Assistant!

No site: https://github.com/vmanuel/hacs-google-fit

Vamos baixar o conteúdo do github referente ao Google Fit! Vamos clicar em “Code” e em “Download ZIP”

Com o download feito vamos extrair os arquivos!

Sem título14

Dentro dos arquivos vamos achar uma pasta chamada “google_fit”, vamos copia-la!

Sem título15

E vamos coloca-la dentro da pasta custom_components no nosso Home Assistant

Sem título16

Feito isso agora vamos para o configuration.yaml e na parte de sensores vamos adicionar os dados do Google Fit colocando o client_id e o client_secret.

sensor:
  - platform: google_fit
    name: Google Fit
    client_id: your_client_id
    client_secret: your_client_secret

Tendo feito isso vamos checar a validação de dados e reiniciar o servidor!

Estando com a configuração válida, logo após ter reiniciado o servidor irá aparecer a notificação de uma novo dispositivo encontrado e com um endereço e um código!

Entre no site e coloque o código! Clique para continuar!

Vai pedir para escolher sua conta do Google, escolha a mesma conta do que está o seu Google Fit!

Após feito isso vai perceber que ainda não irá aparecer no seu Home Assistant os sensores do Google Fit. Para aparecer vá até a pasta do Google Fit do seu Home Assistant e vai reparar que apareceu uma pasta chamada _ pycache _
Apague a pasta, delete ela.

Sem título20

Deletando a pasta e reiniciando o servidor os sensores vão aparecer!

É isso pessoal, um abraço!

3 Likes

Leandro, boa noite!

Obrigado por compartilhar essa configuração!

Na primeira tentativa, não tinha conseguido receber a notificação de novo dispositivo encontrado.
Só resolveu depois que eu reiniciei o computador onde eu rodo o Home Assistant

Agora está tudo certo, só os dados que não está semelhante ao App do celular, mas creio que ainda será sincronizado!

Valeu !!!
Obrigado!!!

:+1: :grin:

1 Like

Que bom que conseguiu! Fico feliz! =)
De x em x tempo atualiza no Home Assistant, é assim mesmo!

1 Like

Captura de Tela 2020-07-28 às 12.41.17

Este foi o cartão que criei para colocar me minha página principal. Segue o código:

  - card:
      elements:
        - entity: sensor.meta_peso
          fill: '#383C45'
          font_style:
            font-color: white
            font-size: 1.1em
          gradient: true
          max: 20
          min: 0
          name: meta
          stroke_width: 15
          style:
            height: 6em
            left: 75%
            top: 5%
            transform: none
            width: 6em
          type: 'custom:circle-sensor-card'
          units: kg
        - color_stops:
            '1': '#09C7E8'
            '10000': '#0BDF0E'
          entity: sensor.google_fit_steps
          fill: '#383C45'
          font_style:
            font-color: white
            font-size: 1.1em
          gradient: true
          max: 8000
          min: 0
          name: passos
          stroke_width: 15
          style:
            height: 4em
            left: 10%
            top: 77%
            transform: none
            width: 4em
          type: 'custom:circle-sensor-card'
          units: ' '
        - color_stops:
            '1': '#09C7E8'
            '10000': '#0BDF0E'
          entity: sensor.google_fit_distance
          fill: '#383C45'
          font_style:
            font-color: white
            font-size: 1.1em
          gradient: true
          max: 10
          min: 0
          name: km's
          stroke_width: 15
          style:
            height: 4em
            left: 33.33%
            top: 77%
            transform: none
            width: 4em
          type: 'custom:circle-sensor-card'
          units: ' '
        - color_stops:
            '1': '#09C7E8'
            '10000': '#0BDF0E'
          entity: sensor.google_fit_calories
          fill: '#383C45'
          font_style:
            font-color: white
            font-size: 1.1em
          gradient: true
          max: 3000
          min: 0
          name: cals
          shadow: true
          stroke_width: 15
          style:
            height: 4em
            left: 56.66%
            top: 77%
            transform: none
            width: 4em
          type: 'custom:circle-sensor-card'
          units: ' '
        - color_stops:
            '1': '#09C7E8'
            '10000': '#0BDF0E'
          entity: sensor.google_fit_move_time
          fill: '#383C45'
          font_style:
            font-color: white
            font-size: 1.1em
          gradient: true
          max: 3000
          min: 0
          name: Mov
          shadow: true
          stroke_width: 15
          style:
            height: 4em
            left: 78.66%
            top: 77%
            transform: none
            width: 4em
          type: 'custom:circle-sensor-card'
          units: ' '
        - color_stops:
            '1': '#09C7E8'
            '10000': '#0BDF0E'
          entity: sensor.distance_2
          fill: '#383C45'
          font_style:
            font-color: white
            font-size: 1.1em
          gradient: true
          max: 60
          min: 0
          name: dist.
          stroke_width: 15
          style:
            height: 4em
            left: 80%
            top: 77%
            transform: none
            width: 4em
          type: 'custom:circle-sensor-card'
          units: ' '
        - style:
            '--paper-card-background-color': none
            '--paper-material-elevation-1_-_box-shadow': none
            '--shadow-elevation-2dp_-_box-shadow': none
            color: white
            font-size: 18px
            left: 1%
            top: 8%
            transform: 'translate(0%,-50%)'
          text: Pedro
          type: 'custom:text-element'
        - entity: sensor.google_fit_weight
          style:
            '--iron-icon-fill-color': '#5294E2'
            left: 6%
            top: 16%
            transform: none
          title: Peso
          type: state-icon
        - entity: sensor.google_fit_weight
          style:
            color: white
            left: 17%
            top: 17%
            transform: none
          title: Peso
          type: state-label
        - entity: sensor.pedro_bmi
          image: >-
            https://apprecs.org/gp/images/app-icons/300/b7/com.despdev.weight_loss_calculator.jpg
          style:
            height: 40px
            left: 6%
            top: 31%
            transform: none
            width: 40px
          type: image
        - entity: sensor.pedro_bmi
          style:
            color: white
            left: 17%
            top: 32%
            transform: none
          title: BMI
          type: state-label
        - entity: sensor.gordura_corporal
          image: >-
            https://cdn6.aptoide.com/imgs/f/3/9/f393c40a8435f88b403e5a2d7f8a60c7_icon.png?w=240
          style:
            height: 33px
            left: 6%
            top: 49%
            transform: none
            width: 33px
          type: image
        - entity: sensor.gordura_corporal
          style:
            color: white
            left: 17%
            top: 48%
            transform: none
          title: Gordura
          type: state-label
        - entity: sensor.google_fit_heart_rate
          style:
            '--iron-icon-fill-color': red
            '--iron-icon-height': 42px
            '--iron-icon-width': 42px
            left: 68%
            top: 38%
            transform: none
          title: Frequência
          type: state-icon
        - entity: sensor.google_fit_heart_rate
          style:
            color: white
            font-size: 16px
            left: 77%
            top: 39%
            transform: none
          title: Frequência
          type: state-label
      image: /local/imagens/google_fit_1.png
      type: picture-elements
    type: 'custom:mod-card'
  - align: center
    animation: auto
    attribute: false
    background_style: false
    card_style:
      border-radius: 8px
    charge_entity: false
    color: var(--primary-color)
    columns: 2
    delay: 5000
    direction: right
    entities:
      - entity: sensor.media_passos
        title: Média
      - entity: sensor.meta_passos
        max: 8000
        severity:
          - color: '#e74c3c'
            value: 3000
          - color: '#5294E2'
            value: 6000
          - color: '#1db954'
            value: 8000
    height: 40px
    icon: false
    icon_style: false
    indicator: auto
    max: 15000
    padding: 4px
    rounding: 3px
    saturation: 50%
    severity:
      - color: '#e74c3c'
        value: 3000
      - color: '#5294E2'
        value: 8000
      - color: '#1db954'
        value: 20000
    show_icon: false
    show_value: true
    speed: 1000
    tap_action: info
    target: false
    title: false
    title_position: left
    title_style: false
    type: 'custom:bar-card'
    unit_of_measurement: false
    value_style: false
    visibility: false
    width: 70%
  - color_thresholds:
      - color: '#1db954'
        value: 20000
      - color: '#5294E2'
        value: 3000
      - color: '#e74c3c'
        value: 0
    entities:
      - entity: sensor.google_fit_steps
        index: 0
        name: Passos Hoje
    font_size: 70
    height: 65
    hours_to_show: 24
    line_width: 2
    points_per_hour: 1
    show:
      extrema: true
      fill: true
      graph: bar
    type: 'custom:mini-graph-card'
  - cards:
      - color_thresholds:
          - color: '#1db954'
            value: 20000
          - color: '#5294E2'
            value: 3000
          - color: '#e74c3c'
            value: 0
        entities:
          - entity: sensor.passos_dia
            icon: 'mdi:walk'
            index: 0
            name: Passos Hoje
        font_size: 70
        height: 65
        hours_to_show: 168
        line_width: 2
        points_per_hour: 0.0416666666666667
        show:
          extrema: true
          fill: true
          graph: bar
        type: 'custom:mini-graph-card'
      - color_thresholds:
          - color: '#1db954'
            value: 20000
          - color: '#5294E2'
            value: 3000
          - color: '#e74c3c'
            value: 0
        entities:
          - entity: sensor.passos_semana
            icon: 'mdi:walk'
            index: 0
            name: Semana
        font_size: 70
        height: 65
        hours_to_show: 720
        line_width: 2
        points_per_hour: 0.005952380952381
        show:
          extrema: true
          fill: true
          graph: bar
        type: 'custom:mini-graph-card'
    type: horizontal-stack
2 Likes
homeassistant:
  customize:
    sensor.google_fit_calories:
      friendly_name: Calorias
      icon: mdi:food
    sensor.google_fit_distance:
      friendly_name: Distância
      icon: mdi:map-marker-distance
    sensor.google_fit_heart_rate:
      friendly_name: Frequência Cardíaca
      icon: mdi:heart-pulse
    sensor.google_fit_height:
      friendly_name: Altura
      icon: mdi:human-male-height
      hidden: true
    sensor.google_fit_move_time:
      friendly_name: Tempo de movimento
      icon: mdi:timer
    sensor.google_fit_sleep:
      friendly_name: Sono
      icon: mdi:sleep
    sensor.google_fit_steps:
      friendly_name: Passos
      icon: mdi:shoe-print
    sensor.google_fit_weight:
      friendly_name: Peso
      icon: mdi:weight-kilogram
    sensor.meta_de_passos:
      hidden: true
    sensor.passos_mes:
      hidden: true
    sensor.pedro_frequencia:
      hidden: true
    sensor.pedro_passos:
      hidden: true

group:
  google_fit:
    name: Google Fit
    icon: 'mdi:hand-heart'
    entities:
      - sensor.google_fit_calories
      - sensor.google_fit_distance
      - sensor.google_fit_heart_rate
      - sensor.google_fit_height
      - sensor.google_fit_move_time
      - sensor.google_fit_sleep
      - sensor.google_fit_steps
      - sensor.google_fit_weight
      - sensor.meta_de_passos
      - sensor.passos_mes
      - sensor.pedro_frequencia
      - sensor.pedro_passos

sensor:
  - platform: google_fit
    name: Google Fit
    client_id: !secret google_api_client_id
    client_secret: !secret google_fit_client_secret

  - platform: mqtt
    name: "Pedro Passos"
    state_topic: "passos/pedro/relogio"

  - platform: mqtt
    name: "Meta de Passos"
    state_topic: "meta/passos"

  - platform: mqtt
    name: "Pedro Frequência"
    state_topic: "frequencia/pedro/relogio"
    unit_of_measurement: "bpm"

  - platform: template
    sensors:
      meta_peso:
        friendly_name: Meta de Peso
        entity_id: sensor.google_fit_weight
        value_template: "{{ 72 - states.sensor.google_fit_weight.state|int }}"
        unit_of_measurement: "kg"

      meta_passos:
        friendly_name: Meta #de Passos
        entity_id: sensor.google_fit_steps
        value_template: "{{ 7000 - states.sensor.google_fit_steps.state|int }}"

      pedro_bmi:
        friendly_name: "Pedro BMI"
        #entity_id: sensor.weight
        value_template: "{{ ((states.sensor.google_fit_weight.state | float) / (((states.sensor.google_fit_height.state) | float /100)*((states.sensor.google_fit_height.state) | float /100))) | round(1)}}"
        unit_of_measurement: 'BMI'

      gordura_corporal:
        friendly_name: Gordura Corporal
        #entity_id: sensor.weight
        value_template: "{{ ((1.20 * states.sensor.pedro_bmi.state|int) + (0.23 * 39) - 16.2)|round }}"
        unit_of_measurement: '%'

      media_passos:
        friendly_name: Média #de Passos
        #entity_id: sensor.weekly_steps
        entity_id: sensor.passos_semana
        value_template: "{{ (states.sensor.passos_semana.state|int / 7)|round(0) }}"

utility_meter:
  passos_dia:
    source: sensor.google_fit_steps
    cycle: daily

  passos_mes:
    source: sensor.google_fit_steps
    cycle: monthly

  passos_semana:
    source: sensor.google_fit_steps
    cycle: weekly
1 Like