Atom Lite M5 ESP

Bj

Alors depuis bon nombre d’année passé sous certaine domotique , j’ai fini sur HA

A la lecture des certains membre ( je nomme les fautifs :rofl: :rofl: :wink: @mycanaletto par son blog :+1: & @WarC0zes ) , j’ai sauté le pas pour test d’un ESP

J’ai commandé un Atom Lite M5 , j’ai presque que tout reussi en migration BLE ( Thermo Xiaomi par exemple )

La ou je bloque , c’est pour les Mi Band de Xiaomi , la 7 en particulier.

J’ai reussi a faire remonté la presence , et les rssi

Mais j’ai absolument besoin de remonté la fréquence des battement cœur . qu’on appel les BPM.

et je bloque…

j’ai trouvé ceci :

mais je sais pas de ce fait si je peux le joindre dans mon yaml deja OK

Voici copie de mon yaml ESP que j’ai mis en place.

substitutions:
  name: atom-bluetooth-proxy-854a8c
  friendly_name: Bluetooth Proxy 854a8c
  
packages:
  esphome.bluetooth-proxy: github://esphome/bluetooth-proxies/m5stack-atom-lite.yaml@main

esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}

api:
  encryption:
    key: rsGU0WGIDYXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX


        
wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  
esp32_ble_tracker:
  scan_parameters:
    # We currently use the defaults to ensure Bluetooth
    # can co-exist with WiFi In the future we may be able to
    # enable the built-in coexistence logic in ESP-IDF
    active: true

bluetooth_proxy:
  active: true


mqtt:
  broker: 10.10.0.250
  username: XXXXX
  password: XXXXXXXXXXXXXX

switch:
  - platform: restart
    name: "BLE Proxy Restart"

sensor:
  - platform: wifi_signal
    name: "WiFi Signal"
    update_interval: 2min  

  - platform: uptime
    name: "Uptime"

  - platform: ble_rssi
    id: mibandrssi_XXXXXXXX
    mac_address: D0:XXXXXXXXXXXXXXXXXXXXXXX
    name: "RSSI MiBand XXXXXXXXX"  

  - platform: ble_rssi
    id: mibandrssi_XXXXXXXXXXX
    mac_address: D3:XXXXXXXXXXXXXXXX
    name: "RSSI MiBandXXXXX"  

  - platform: xiaomi_lywsdcgq
    mac_address: "58:XXXXXXXXXXXXXXXXXX"
    temperature:
      name: "Entree Température"
    humidity:
      name: "Entree Humidité"
    battery_level:
      name: "Entree Battery Level"

  - platform: xiaomi_lywsdcgq
    mac_address: "58:XXXXXXXXXXX1"
    temperature:
      name: "Toilette Température"
    humidity:
      name: "Toilette Humidité"
    battery_level:
      name: "Toilette Battery Level"

  - platform: xiaomi_lywsdcgq
    mac_address: "58:2XXXXXXXXXXXXXXXXX"
    temperature:
      name: "Salle de bain Température"
    humidity:
      name: "Salle de bain Humidité"
    battery_level:
      name: "Salle de bain Battery Level"

  - platform: xiaomi_lywsd03mmc
    mac_address: "A4:XXXXXXXXXXXXXXXX"
    bindkey: "ed353e1XXXXXXXXXXXXXXXXXXXXXXXXXX"
    temperature:
      name: "Frezeer Température"
    humidity:
      name: "Frezeer Humidité"
    battery_level:
      name: "Frezeer Battery Level"

  - platform: xiaomi_lywsd03mmc
    mac_address: "A4:XXXXXXXXXXXXXXXXXXXXXX"
    bindkey: "83XXXXXXXXXXXXXXXXXX"
    temperature:
      name: "Frigidaire Température"
    humidity:
      name: "Frigidaire Humidité"
    battery_level:
      name: "Frigidaire Battery Level"

  - platform: xiaomi_lywsdcgq
    mac_address: "58:XXXXXXXXXXXXXXXXXXXXX"
    temperature:
      name: "Balcon Temperature"
    humidity:
      name: "Balcon Humidité"
    battery_level:
      name: "Balcon Battery Level"

  - platform: xiaomi_miscale
    mac_address: '5C:XXXXXXXXXXXXXXXXXXXXX'
    weight:
      name: "Xiaomi Mi Scale Poids"
      id: weight_miscale
      on_value:
        then:
          - lambda: |-
              if (id(weight_XXXXXXXXX).state >= 75 && id(weight_XXXXXXXXX).state <= 89.00) {
                return id(weight_XXXXXXXXX).publish_state(x);}
              else if (id(weight_XXXXXXXXX).state >= 90.00 && id(weight_XXXXXXXXX).state <= 100) {
                return id(weight_XXXXXXXXX).publish_state(x);}

    impedance:
      name: "Xiaomi Mi Scale Impedance"
      id: impedance_miscale
      on_value:
        then:
          - lambda: |-
              if (id(weight_XXXXXXXXX).state >= 69 && id(weight_XXXXXXXXX).state <= 74.49) {
                return id(impedance_XXXXXXXXX).publish_state(x);}
              else if (id(weight_XXXXXXXXX).state >= 74.50 && id(weight_XXXXXXXXX).state <= 83) {
                return id(impedance_XXXXXXXXX).publish_state(x);}

  - platform: template
    name: Weight XXXXXXXXX
    id: weight_XXXXXXXXX
    unit_of_measurement: 'kg'
    icon: mdi:weight-kilogram
    accuracy_decimals: 2

  - platform: template
    name: Impedance XXXXXXXXX
    id: impedance_XXXXXXXXX
    unit_of_measurement: 'Ω'
    icon: mdi:omega
    accuracy_decimals: 0

  - platform: template
    name: Weight XXXXXXXXX
    id: weight_XXXXXXXXX
    unit_of_measurement: 'kg'
    icon: mdi:weight-kilogram
    accuracy_decimals: 2

  - platform: template
    name: Impedance XXXXXXXXX
    id: impedance_XXXXXXXXX
    unit_of_measurement: 'Ω'
    icon: mdi:omega
    accuracy_decimals: 0

binary_sensor:

  - platform: ble_presence
    mac_address: D0:XXXXXXXXXXXXXXXXX
    id: mibandpresence_XXXXXXXXX
    name: "Presence MiBand XXXXXXXXX"

  - platform: ble_presence
    mac_address: D3:XXXXXXXXXXXXXX
    id: mibandpresence_XXXXXXXXX
    name: "Presence MiBand XXXXXXXXX"    

Bonjour,
sans ajouter les Mi Band de Xiaomi dans ta config du ESP, ca fonctionne ?
Perso, j’ai rien config pour mes LYWSD03MMC, HHCCJCY01 et GCLS002. Je laisse les Bluetooth proxy ce debrouiller .

Alors , en fait j’ai fait une erreur
effectivement les xiaomi sont détecté en auto, c’est les info du blog de mycanaletto qui m’as fait faire cette erreur … j’ai pris comme modèle celui qui met sur son site…
mais je suis parti sur le principe que je devais les mettre dans la yaml…

Donc j’ai tout tout viré , refait le yaml au plus simple qu on trouve sur le github du atom

ensuite tout a etais reconnu, sauf ma balance , et les xiaomi carré ( bindkey) , je les flasherais par la suite…

voici le nouveau yaml ( au passage je t’ai taxé des sensors :wink: )

substitutions:
  name: atom-bluetooth-proxy-854a8c
  friendly_name: Bluetooth Proxy


packages:
  esphome.bluetooth-proxy: github://esphome/firmware/bluetooth-proxy/m5stack-atom-lite.yaml@main

external_components:
  - source: github://pr#5073
    components: [esp32_ble_tracker, bluetooth_proxy]
    
esphome:
  name: ${name}
  name_add_mac_suffix: false
  friendly_name: ${friendly_name}

api:
  encryption:
    key: gNB9o9YKTw26Rcdtyf/zA0Fz4Yl9KP2T3H9cIO5O1Yk=


wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password


esp32_ble_tracker:
  scan_parameters:
    interval: 1100ms
    window: 1100ms
    active: true

bluetooth_proxy:
  active: true


# BUTTONS
button:
- platform: safe_mode
  name: Safe Mode Boot
  entity_category: diagnostic

# BINARY SENSORS
binary_sensor:
  - platform: status
    name: "BLE Proxy Statut"

# SENSORS
sensor:
  - platform: wifi_signal
    name: "WiFi Signal dB"
    id: wifi_signal_db
    update_interval: 60s
    entity_category: "diagnostic"

  - platform: copy
    source_id: wifi_signal_db
    name: "WiFi Signal Percent"
    filters:
      - lambda: return min(max(2 * (x + 100.0), 0.0), 100.0);
    unit_of_measurement: "Signal %"
    entity_category: "diagnostic"

  - platform: uptime
    name: "BLE Proxy Uptime"

  - platform: internal_temperature
    name: "Internal Temperature" 


# SWITCHS
switch:
  - platform: restart
    name: "BLE Proxy Restart"

J’ai ajouté ceci

external_components:
  - source: github://pr#5073
    components: [esp32_ble_tracker, bluetooth_proxy]

Mais nada , les mi band non vue

Bj

Enfin réussi !!

il faut joué avec la fonction lambda

Voici le lien pour vous aidé pour le futur

Voici les éléments a mettre pour la fréquence cardiaque.

# Enable ble tracker
esp32_ble_tracker:
  scan_parameters:
    interval: 200ms
    window: 100ms
    active: true

  on_ble_manufacturer_data_advertise:
    - mac_address: __:__:__:__:__:__  # METTRE ICI L'ADRESSE MAC DE LA MONTRE
      manufacturer_id: '0157' # NE PAS TOUCHER
      then:
        - lambda: |-
            if (x.size() != 24) {
              ESP_LOGE("esp32_ble_tracker", "Payload has wrong size (%d)", x.size());
            } else {
              if (x[3] != 0xFF) {
                id(mi_band_heart_rate_montre_1).publish_state(x[3]);
              }
            }

    - mac_address: __:__:__:__:__:__  # METTRE ICI L'ADRESSE MAC DE LA MONTRE
      manufacturer_id: '0157' # NE PAS TOUCHER
      then:
        - lambda: |-
            if (x.size() != 24) {
              ESP_LOGE("esp32_ble_tracker", "Payload has wrong size (%d)", x.size());
            } else {
              if (x[3] != 0xFF) {
                id(mi_band_heart_rate_montre_2).publish_state(x[3]);
              }
            }   

Les éléments pour créé les sensors.

sensor:  

  - platform: template
    id: mi_band_heart_rate_montre_1
    name: Mi Band Heart Rate Montre 1
    icon: mdi:heart-pulse
    unit_of_measurement: bpm
    state_class: measurement
    accuracy_decimals: 0

  - platform: template
    id: mi_band_heart_rate_montre_2
    name: Mi Band Heart Rate Montre 2
    icon: mdi:heart-pulse
    unit_of_measurement: bpm
    state_class: measurement
    accuracy_decimals: 0

Pour la remonté RSSI

sensor:  
   
  - platform: ble_rssi
    id: mibandrssi_montre_1
    mac_address:  __:__:__:__:__:__  # METTRE ICI L'ADRESSE MAC DE LA MONTRE
    name: "RSSI MiBand Montre 1"  

  - platform: ble_rssi
    id: mibandrssi_montre_2
    mac_address:  __:__:__:__:__:__  # METTRE ICI L'ADRESSE MAC DE LA MONTRE
    name: "RSSI MiBand Montre 2"

Pour la Présence

binary_sensor:

  - platform: ble_presence
    mac_address:  __:__:__:__:__:__  # METTRE ICI L'ADRESSE MAC DE LA MONTRE
    id: mibandpresence_montre_1
    name: "Presence MiBand Montre 1"
    device_class: presence

  - platform: ble_presence
    mac_address:  __:__:__:__:__:__  # METTRE ICI L'ADRESSE MAC DE LA MONTRE
    id: mibandpresence_montre 2
    name: "Presence MiBand Montre 2"  
    device_class: presence

Résultat:

Capture d'écran 2023-10-23 153708

J’'ai essayé de faire remonté les STEPS, cela est impossible avec la Mi Band 7 Xiaomi a changé son code …

Par je n’ai pas pu testé mais il serait possible de la remonté des STEPS , si vous une Mi Band du modèle suivants : 6/5/4/3/2

1 « J'aime »