✅ Intégrer les balances Xiaomi dans Home Assistant

licence

Nous allons voir comment ajouter les balances Xiaomi dans Home Assistant et suivre nos informations corporelles. Nous allons utiliser un add-on qui permet de récupérer dans HA jusqu’à 3 personnes. La différenciation des personnes se fait sur grâce à la définition de 3 fourchettes de poids. Autant vous avertir tout de suite, si vous et votre moitié faites à peu près le même poids, seul l’un de vous pourra l’utiliser afin de suivre sa courbe de poids malheureusement.

Niveau requis

  • Débutant / Intermédiaire / Avancé

Matériels nécessaires / Matériels utilisés / Prérequis

  • Mi Smart Scale 2 (XMTZCO1HM, XMTZC04HM),
  • Mi Body Composition Scale (XMTZC02HM),
  • Mi Body Composition Scale 2 (XMTZC05HM).

Récupérer l’adresse MAC de votre balance.

Mi Fit.

Lancer votre application Mi Fit (Android,iOS), profil puis dans Mes appareils cliquer sur votre balance.

OpenScale.

OpenScale est une application gratuite qui vous permet de suivre toutes les informations de votre balance sans les envoyer dans le cloud. Il est stipulé aussi qu’aucunes données ne seront envoyées hors de leur serveur. Elle est téléchargeable sur Fdroid ou le Google Play Store.
Si vous souhaitez tout de même utiliser la connexion Google Fit, c’est quand même possible (tout est sur le GitHub)

Dans OpenScale allez dans le Menu Hamburger, Paramètres et Bluetooth.

Installation de l’addons.

Je vous laisse regarder le tuto pour ajouter un addons non officiel.

La source à ajouter est GitHub - lolouk44/hassio-addons: Xiaomi Mi Scale Add On for Home Assistant

Puis rechercher l’addons nomé Xiaomi Mi Scale.
XiaomiMiScaleAddons

Configuration de l’addons.

Une fois installé, se rendre dans l’addons puis dans configuration.
Voici ma configuration: (Sur RPi avec HA Supervised sous Raspbian. Doit marcher aussi avec HassOS et RPi avec HA supervised sous Ubuntu).

HCI_DEV: hci0
MISCALE_MAC: '0C:95:41:AC:AF:B8'
MQTT_PREFIX: miscale
MQTT_HOST: 127.0.0.1
MQTT_USERNAME: mcflymqtt
MQTT_PASSWORD: mcflymqttpassword
MQTT_PORT: 1883
TIME_INTERVAL: 30
MQTT_DISCOVERY: true
MQTT_DISCOVERY_PREFIX: homeassistant
USER1_GT: 85
USER1_SEX: male
USER1_NAME: Anthony
USER1_HEIGHT: 192
USER1_DOB: '1985-10-02'
USER2_LT: 50
USER2_SEX: female
USER2_NAME: Agathe
USER2_HEIGHT: 85
USER2_DOB: '2018-06-28'
USER3_SEX: female
USER3_NAME: Claire
USER3_HEIGHT: 163
USER3_DOB: '1981-10-03'

Partie MQTT serveur.

  • HCI_DEV: port de votre dongle bluetooth
  • MISCALE_MAC: adresse MAC de votre balance
  • MQTT_HOST: adresse de votre broker MQTT
  • MQTT_PORT: port de communication du serveur MQTT (par défaut: 1883)
  • TIME_INTERVAL: Intervalle de récupération des informations en secondes

Laissez le reste par défaut si vous ne savez pas ce que c’est.

Partie utilisateurs.

Il peut gérer 3 personnes maximum.

Le fonctionnement:
Si le poids est supérieur a XXKg alors c’est tel personne, si en dessous de XXKg alors c’est tel autre personne et si entre les deux alors celle la troisième personnes.

USER1_GT: 85
USER1_SEX: male
USER1_NAME: Anthony
USER1_HEIGHT: 192
USER1_DOB: '1985-10-02'
  • GT: Pèse plus de,
  • LT: Pèse moins de,
  • HEIGHT: taille en cm,
  • DOB: Date de naissance, AAAA-MM-JJ
  • SEX: male ou female
  • NAME: je pense que c’est OK :wink:.

Une fois votre configuration remplie, faites SAVE puis START.

Dans l’onglet info vérifier via l’onglet Log si tout s’est bien passé.
XiaomiMiScaleLog

Une fois l’addons démarré, aller dans File Editor pour ajouter des sensors soit dans configuration.yaml soit sensors.yaml en fonction de votre configuration.

Ajouter ceci : (remplacer user1 par votre ou vos users).

### Déclarations pour l'addons (1 par user)
## Remplacer *user1* par le nom donné dans la configuration du plugins
  - platform: mqtt
    name: "user1 Poids"
    state_topic: "miscale/user1/weight"
    value_template: "{{ value_json['weight'] }}"
    unit_of_measurement: "kg"
    json_attributes_topic: "miscale/user1/weight"
    icon: mdi:scale-bathroom

  - platform: mqtt
    name: "user1 BMI"
    state_topic: "miscale/user1/weight"
    value_template: "{{ value_json['bmi'] }}"
    icon: mdi:human-pregnant
    unit_of_measurement: "kg/m2"

Redémarrer votre Home Assistant.
Voici les entités possibles :
XiaomiScaleEntitéBMI XiaomiScaleEntitePoid

Interface Lovelace

Retourner dans File Editor pour ajouter des sensors soit dans configuration.yaml soit sensors.yaml en fonction de votre configuration.
Ajouter le code qui suit par utilisateur suivi (Remplacer user1 par le ou les vôtre).

### Template pour l'affichage des attributs
#### 1 par user
#IMC
  - platform: template
    sensors:
      user1_poids_imc:
        friendly_name: 'Mon IMC'
        value_template: "{{ state_attr('sensor.user1_poids', 'bmi') }}" #ici, on indique que la valeur de cette entité correspond à la valeur de l'attribut 'bmi' de l'entité 'sensor.mon_poids'
        attribute_templates:
          unit_of_measurement: "kg/m²"
          icon: 'mdi:human-pregnant'
          
#MB
  - platform: template
    sensors:
      user1_poids_mb:
        friendly_name: 'Mon Métabolisme de Base'
        value_template: "{{ state_attr('sensor.user1_poids', 'basal_metabolism') }}" #ici, on indique que la valeur de cette entité correspond à la valeur de l'attribut 'basal_metabolism' de l'entité 'sensor.mon_poids'
        attribute_templates:
          unit_of_measurement: "kcal/j"
          icon: 'mdi:food'
          
#graisse viscérale
  - platform: template
    sensors:
      user1_poids_gv:
        friendly_name: 'Ma Graisse Viscérale'
        value_template: "{{ state_attr('sensor.user1_poids', 'visceral_fat') }}" #ici, on indique que la valeur de cette entité correspond à la valeur de l'attribut 'visceral_fat' de l'entité 'sensor.mon_poids'
        attribute_templates:
          icon: 'mdi:water-percent'

#date
  - platform: template
    sensors:
      user1_poids_date_locale: 
        # ici, on transforme la valeur de l'attribut 'timestamp' de l'entité 'sensor.user1_poids' afin de la rendre plus agréable à lire
        # '2020-10-17-11:00:11' devient '17/10/2020 11:00'
        friendly_name: 'Date locale'
        value_template: >-
          {% set annee =  state_attr('sensor.user1_poids', 'timestamp').split('-')[0] %}
          {% set mois =  state_attr('sensor.user1_poids', 'timestamp').split('-')[1] %}
          {% set jour =  state_attr('sensor.user1_poids', 'timestamp').split('-')[2] %}
          {% set heure =  state_attr('sensor.user1_poids', 'timestamp').split('-')[3] %}
          {% set date_formatee = annee + "-" + mois + "-" + jour + "T" + heure %}
          {{as_timestamp(date_formatee) | int | timestamp_custom('%d/%m/%Y %H:%M', true)}}
        attribute_templates:
          icon: 'mdi:calendar-clock'

Une fois cela effectué, allez dans Aperçus puis ajouter une carte manuel.

Interface simple. (sans utilisation de custom card)

Voici deux configurations (il y en a plein d’autres. N’hésitez pas à partager la votre avec le code)mettre un liens vers contribution

LovelaceDefaut

type: entities
entities:
  - entity: sensor.user1_poids_date_locale
    name: Dernière pesée
  - entity: sensor.user1_poids
    name: Poids
  - entity: sensor.user1_poids_imc
    name: IMC
  - entity: sensor.user1_poids_gv
    name: ' Graisse viscérale'
  - entity: sensor.user1_poids_mb
    name: Besoin calorique
title: Poids de user1
show_header_toggle: false
state_color: false
footer:
  type: graph
  entity: sensor.user1_weight
  hours_to_show: 720
  detail: 1

type: vertical-stack
cards:
  - type: entities
    entities:
      - entity: sensor.anthony_poids_date_locale
        name: Dernière pesée
      - entity: sensor.anthony_poids
        name: Poids
      - entity: sensor.anthony_poids_imc
        name: IMC
      - entity: sensor.anthony_poids_gv
        name: ' Graisse viscérale'
      - entity: sensor.anthony_poids_mb
        name: Besoin calorique
    title: Poids de Anthony
    show_header_toggle: false
    state_color: false
  - type: horizontal-stack
    cards:
      - type: sensor
        entity: sensor.anthony_weight
        graph: line
        name: Poids
        hours_to_show: 720
      - type: sensor
        entity: sensor.anthony_poids_imc
        graph: line
        name: IMC
        hours_to_show: 720

Interface plus. (utilisation de custom card)

Vous avez besoin de Swipe card GitHub,HA Installation via HACS.

Rechercher Swipe card.
HACSFrontengSwipe Card

Une fois installée, il n’est pas nécessaire de redémarrer Home Assistant (comme toutes les cartes que vous installées par HACS).

Elle devrait apparaître dans la liste des carte lors de la configuration de votre Lovelace.

Sélectionnez la, puis passez en éditeur YAML et copier le code ci-dessous.

type: 'custom:swipe-card'
parameters:
  spaceBetween: 8
  scrollbar:
    hide: false
    draggable: true
    snapOnRelease: true
cards:
  - type: entities
    entities:
      - entity: sensor.user1_poids_date_locale
        name: Dernière pesée
      - entity: sensor.user1_poids
        name: Poids
      - entity: sensor.user1_poids_imc
        name: IMC
      - entity: sensor.user1_poids_gv
        name: Graisse viscérale
      - entity: sensor.user1_poids_mb
        name: Besoin calorique
    title: Poids de user1
  - type: entities
    entities:
      - entity: sensor.user2_poids_date_locale
        name: Dernière pesée
      - entity: sensor.user2_poids
        name: Poids
      - entity: sensor.user2_poids_imc
        name: IMC
      - entity: sensor.user2_poids_gv
        name: ' Graisse viscérale'
      - entity: sensor.user2_poids_mb
        name: Besoin calorique
    title: Poids de user2
  - type: entities
    entities:
      - entity: sensor.user3_poids_date_locale
        name: Dernière pesée
      - entity: sensor.user3_poids
        name: Poids
      - entity: sensor.user3_poids_imc
        name: IMC
      - entity: sensor.user3_poids_gv
        name: ' Graisse viscérale'
      - entity: sensor.user3_poids_mb
        name: Besoin calorique
    title: Poids de user3
show_header_toggle: false
state_color: false

Vous avez maintenant une carte plus interactive.

HACSFrontengSwipe CardVideo

Un grand merci à @Clemalex pour sa participation sur les cartes Lovelace.

Trucs & Astuces.

Si vous utilisez Raspbian comme OS pour le RPi, BluePy n’est pas installé par défaut (a confirmer je ne me rappelle plus) alors que sous Ubutnu oui.

Dans ce cas connectez vous en SSH puis taper les commandes suivantes.
Sur python3

sudo apt-get install python3-pip libglib2.0-dev
sudo pip3 install bluepy

Conclusion.

Vous avez maintenant le suivi de toutes les informations corporelle de votre famille.

Une question, un problème

Besoin d'aide ? Cliquez ici !

Annexes.

Sources.

Suivi des modifications

  • 02/02/2021 : Passage en article officiel (:hacf_tuto: ) @Clemalex
  • 03/12/2020 : Mise à jour pour V2 @McFly
  • 20/10/2020 : Création @McFly
4 J'aime

57 messages ont été scindés en un nouveau sujet : Commentaires Article Intégrer Balances Xiaomi

15 messages ont été scindés en un nouveau sujet : Instégration Balance connecté Miscale via ESPHome