====== ESPhome / BME 680 ======
===== Montage =====
Attention à la polarité ! (**+/-**)
{{ :ateliers:smart-bee:shema_bme680_bb-768x624.png?400 |}}
Suivre le schéma de montage en respectant les conventions de couleur pour les fils.
===== Documentation technique =====
La documentation technique complète est disponible :
* en ligne : [[hardware:kits-biklab:bm680|Kit BME680]]
* en téléchargement (PDF) : {{ :hardware:kits-biklab:fiche_kit_bme680.pdf |}}
Toute cette documentation est diffusée sous [[https://creativecommons.org/licenses/by/4.0/deed.fr|licence Creative Commons CC BY 4.0 Deed]] pour en faciliter la réutilisation.
===== Code =====
==== Code basique ====
esphome:
name: "station2" # le nom de l'objet connecté
esp8266:
board: nodemcuv2
logger:
# Enable Home Assistant API
api:
encryption:
key: "JhwNLgVDiZLAtKsukQRb2//wYz/olZdI/mBx22uX9WA="
# voir https://esphome.io/components/api.html#configuration-variables
# il y a sur la page un générateur de clé aléatoire
# changez et mettez une autre valeur pour votre noeud
ota:
password: "secret_ota_password" # changer pour une valeur de votre choix
wifi:
ssid: "wifi_ssid" # nom du réseau wifi
password: "wifi_password" # mot de passe du réseau wifi
## on définit les GPIO du bus I2C
i2c:
sda: D1 # à changer si carte différente (GPIO21 pour esp32)
scl: D2 # à changer si carte différente (GPIO22 pour esp32)
scan: True
id: bus_a
bme680_bsec:
# documentation esphome : https://esphome.io/components/sensor/bme680_bsec.html
address: 0x77
iaq_mode: static
sample_rate: ulp
sensor:
- platform: bme680_bsec # multi capteurs atmosphériques (qualité de l'air)
# documentation esphome : https://esphome.io/components/sensor/bme680_bsec.html
temperature: # température de l'air
name: "Temperature (station2)"
id: station2_bme680_temperature
sample_rate: lp
filters:
- offset: -2.0
- sliding_window_moving_average:
window_size: 20
send_every: 20
pressure: # pression atmosphérique
name: "Pression atmosphérique (station2)"
id: station2_bme680_pressure
sample_rate: lp
filters:
- sliding_window_moving_average:
window_size: 20
send_every: 20
humidity: # humidité dans l'air
name: "Hygrométrie (station2)"
id: station2_bme680_humidity
sample_rate: lp
filters:
- sliding_window_moving_average:
window_size: 20
send_every: 20
iaq: # indice de qualité de l'air (calculé)
name: "indice de qualité de l'air (station2)"
id: station2_bme680_iaq
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
co2_equivalent: # taux de CO2 calculé (estimation aproximative)
name: "taux CO2 équivalent (station2)"
id: station2_bme680_eco2
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
breath_voc_equivalent: # cov calculés dans le souffle d'une personne
name: "COV équivalents dans le souffle"
id: station2_bme680_bvoc
filters:
- sliding_window_moving_average:
window_size: 20
send_every: 20
==== Code avancé ====
substitutions:
devicename: station2 # nom de l'objet connecté, changer ici uniquement
esphome:
name: ${devicename} # la valeur définie plus haut sera placée ici
esp8266:
board: nodemcuv2
logger:
# Enable Home Assistant API
api:
encryption:
key: "JhwNLgVDiZLAtKsukQRb2//wYz/olZdI/mBx22uX9WA="
# voir https://esphome.io/components/api.html#configuration-variables
# il y a sur la page un générateur de clé aléatoire
# changez et mettez une autre valeur pour votre noeud
ota:
# le mot de passe OTA sera récupéré dans sectets.yaml
password: !secret ota_password
# décommenter la ligne ci après pour définir le mot de passe ici
# password: "wifi_password" # mot de passe du réseau wifi
wifi:
# le ssid et le password wifi seront récupérés dans sectets.yaml
ssid: !secret wifi_ssid
password: !secret wifi_password
#décommenter pour définir le wifi dans ce fichier, supprimer au dessus
# ssid: "wifi_ssid" # nom du réseau wifi
# password: "wifi_password" # mot de passe du réseau wifi
## on définit les GPIO du bus I2C
i2c:
sda: D1 # à changer si carte différente (GPIO21 pour esp32)
scl: D2 # à changer si carte différente (GPIO22 pour esp32)
scan: True
id: bus_a
sensor:
- platform: bme680_bsec # multi capteurs atmosphériques (qualité de l'air)
# documentation esphome : https://esphome.io/components/sensor/bme680_bsec.html
temperature: # température de l'air
name: "Temperature (${devicename})"
id: station2_bme680_temperature
sample_rate: lp
filters:
- offset: -2.0
- sliding_window_moving_average:
window_size: 20
send_every: 20
pressure: # pression atmosphérique
name: "Pression atmosphérique (${devicename})"
id: station2_bme680_pressure
sample_rate: lp
filters:
- sliding_window_moving_average:
window_size: 20
send_every: 20
humidity: # humidité dans l'air
name: "Hygrométrie (station2)"
id: station2_bme680_humidity
sample_rate: lp
filters:
- sliding_window_moving_average:
window_size: 20
send_every: 20
iaq: # indice de qualité de l'air (calculé)
name: "indice de qualité de l'air (${devicename})"
id: station2_bme680_iaq
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
co2_equivalent: # taux de CO2 calculé (estimation aproximative)
name: "taux CO2 équivalent (${devicename})"
id: station2_bme680_eco2
filters:
- sliding_window_moving_average:
window_size: 10
send_every: 10
breath_voc_equivalent: # cov calculés dans le souffle d'une personne
name: "COV équivalents dans le souffle (${devicename})"
id: station2_bme680_bvoc
filters:
- sliding_window_moving_average:
window_size: 20
send_every: 20
# mesure la force du signal wifi reçu en dB
# documentation : https://esphome.io/components/sensor/wifi_signal
- platform: wifi_signal
name: "signal WiFi (${devicename})"
update_interval: 10s
# donne l'utpime (depuis combien de temps l'objet connecté est il allumé)
# documentation : https://esphome.io/components/sensor/uptime
# ici on ajoute des calculs pour avoir un format lisible (j:h:m:s)
- platform: uptime
name: "${devicename} Uptime Sensor"
id: ${devicename}_uptime_sensor
update_interval: 60s
on_raw_value:
then:
- text_sensor.template.publish:
id: ${devicename}_uptime_human
state: !lambda |-
int seconds = round(id(${devicename}_uptime_sensor).raw_state);
int days = seconds / (24 * 3600);
seconds = seconds % (24 * 3600);
int hours = seconds / 3600;
seconds = seconds % 3600;
int minutes = seconds / 60;
seconds = seconds % 60;
return (
(days ? String(days) + "j " : "") +
(hours ? String(hours) + "h " : "") +
(minutes ? String(minutes) + "m " : "") +
(String(seconds) + "s")
).c_str();
text_sensor:
# on présente l'adresse IP du noeud
# documentation https://esphome.io/components/text_sensor/wifi_info.html
- platform: wifi_info
ip_address:
name: "adresse IP (${devicename})"
id: ${devicename}_ip_address
- platform: template
# on présente l'uptime sous forme texte, voir plus haut
name: "Uptime (${devicename})"
id: ${devicename}_uptime_human
icon: mdi:clock-start
# version de espHome utilisée
# https://esphome.io/components/text_sensor/version
- platform: version
name: "Version d'ESPHome installée"
id: ${devicename}_ESPHome_Version