Premier projet [BAL Connecté] Suite

Hello les Domoticiens ! j’espère que vous allez bien !

Premier petit projet pour moi sur HA en attendant les boxs domotiques !

Petite boite au lettre connecté à base de esp32 et esphome.

J’aurais aimé avoir votre avis sur le code (voir si il n’y aurais pas des optimisations a faire vu mon niveau débutant).

Voici le petit cahier des charges rapide:

• Un ESP32 avec antenne wifi déporté :

• Un capteur INA219 pour le monitoring de batterie:

• Un petit DHT22 en bonus pour prendre la température et l’humiditée extérieure:

• Un TP4056 pour gérer la charge Liion ainsi qu’un step up pour une tension stable en sortie pour l’esp32:

https://fr.aliexpress.com/item/1005004332269949.html?spm=a2g0o.order_list.order_list_main.43.73665e5bTH1Bw8&gatewayAdapt=glo2fra

• Un petit panneau solaire 2.5W pour l’alimentation et la charge Liion :

https://fr.aliexpress.com/item/33004666386.html?spm=a2g0o.order_list.order_list_main.49.73665e5bTH1Bw8&gatewayAdapt=glo2fra

• Et enfin les capteurs de portes magnétiques et la case Liion:

Le tout connecté au wifi de la maison.

Donc globalement le deroulement dans le code est sensé être le suivant:

• De base l’ESP32 est en deepsleep afin d’éviter la consommation trop forte, ce dernier se reveille toutes les 15mn pendant 1mn afin d’envoyer les infos de monitoring (humidité, température, status, tension, ampérage, chrage etc) sur les cards HA.

• Si le courrier est déposé, réveil de l’ESP32 (+ remmonté monitoring) et envois de notification via HA avec date, heure.

• Si la porte de la boite au lettre est ouverte, réveil de l’ESP32 (+ remmonté monitoring) et envois de notification via HA avec date, heure.

Voila voila ! voici le code esphome que j’ai fais si vous voyez des boulettes hésitez pas !



Merci d’avance pour vos retours !

Salut,

Merci pour le partage.
j’ai reclassifié ton post de Entraide HA à DIY>Vos Projets comme ça à l’air plutôt complet

1 « J'aime »

Salut @BinaryWhite,

Peux-tu stp partager ton code en utilisant les balises « Texte Préformaté » ?

1 « J'aime »

Voici :slight_smile:

esphome:
  name: "esp-bal"
  friendly_name: ESP_BAL

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "---------------------------------------------------"

ota:
  password: "---------------------------------------------------"

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

  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp-Bal-Hotspot"
    password: "ESP_BAL"

captive_portal:

i2c:
  sda: 21
  scl: 22
  scan: true
  id: bus_a

deep_sleep:
  run_duration: 1min
  sleep_duration: 15min
  esp32_ext1_wakeup: 
   pins: 
    - 2
    - 4
   mode: ANY_HIGH
  id: deep_sleep_1

binary_sensor:
  - platform: gpio
    pin: 2
    id: petit_capteur
    name: "Trappe Boite Aux Lettres"
    on_press:
      then:
      - homeassistant.service:
          service: input_datetime.set_datetime
          data:
            entity_id: input_datetime.heure_courrier
          data_template:
            date: '{{ as_timestamp(now())|timestamp_custom(''%Y-%m-%d'') }}'
            time: '{{ now().strftime(''%H:%M:%S'') }}' 
 
      - homeassistant.service:
          service: notify.notify
          data:
            message: " Courrier distribué"
            title: "Courrier"
 
  - platform: gpio
    pin: 4
    id: grand_capteur
    name: "Porte Boite Aux Lettres"
    on_press:
      then:
      - homeassistant.service:
          service: input_datetime.set_datetime
          data:
            entity_id: input_datetime.heure_courrier
          data_template:
            date: '{{ as_timestamp(now())|timestamp_custom(''%Y-%m-%d'') }}'
            time: '{{ now().strftime(''%H:%M:%S'') }}' 
 
      - homeassistant.service:
          service: notify.notify
          data:
            message: "Colis Reçus / Courrier Relevé"
            title: "Courrier"

sensor:
  - platform: uptime
    name: "Temps De Fonctionnement"
    id: "uptime_BAL"
 
  - platform: wifi_signal
    name: "Signal Wifi"
    id: "wifi_signal_BAL"
    update_interval: 360s

  - platform: dht
    pin: 0
    model: DHT22
    temperature:
      name: "Température Extérieure"
    humidity:
      name: "Humidité Extérieure"
    update_interval: 1min

  - platform: ina219
    address: 0x40
    shunt_resistance: 0.1 ohm
    current:
      name: "BAL Current"
    power:
      name: "BAL Power"
    bus_voltage:
      name: "BAL Bus Voltage"
    shunt_voltage:
      name: "BAL Shunt Voltage"
    max_voltage: 32.0V
    max_current: 3.2A
    update_interval: 5s

Après plusieurs tests je me suis rendu compte de l’inutilité du stepup, car ce dernier n’envois pas assez de tension (4.88v) à l’esp32 pour que ce dernier fonctionne.
Par contre le TP4056 fais régulateur de tension (5.19v) du coup ca le fais nickel et me supprime un composant haha.
Cependant j’ai une interrogation concernant le INA219, logiquement pour monitorer le solaire je devrai le placer entre le panneau et le tp4056, mais si je veux connaitre la charge/taux de décharge des 18650, je suis obliger d’en mettre un seconde entre le tp4056 et l’esp32 ou il y a un moyen de contourner ca ?

Merci d’avance !

Jette un œil ici même si je n’ai pas encore pratiqué, le sujet est interressant :

1 « J'aime »

Alors petit retour d’expérience du coup ^^.
Après avoir travaillé toute la nuit sur mon projet de boîte au lettre connectée, j’ai réussi à le faire fonctionner !
J’étais tellement content ^^, MAIS (oui on a un mais mdr) j’utilise l’ESP32 deepsleep pour garder de l’autonomie.
Le problème est que lorsque l’ESP32 entre en mode veille profonde, aucune information ne remonte sur mon panel Home Assistant.
Est il possible de configurer la card pour conserver la dernière valeur monitoré sur le tableau de bord (j’ajouterai un timer pour savoir quand elles ont étés refresh)?
Merci pour vos retour :slightly_smiling_face: !

Salut,

J’avais vu qu’il était possible d’avoir un réveil périodique de l’ESP, visiblement c’est aussi possible avec esphome avec le paramètre « sleep_duration » sans oublié le « deep_sleep.prevent » pour permettre les mises à jour via OTA. :wink:

L'article que j'avais lu ICI

ESP32 Timer Wake Up from Deep Sleep | Random Nerd Tutorials

Bonjour,

pour monitorer la tension, tu peut aussi faire un pont diviseur avec ton 5v batterie et aller sur une entrée analogique de l’ESP32, j’ai déjà fait cela sur un wemos mais le principe est le même et j’ai déjà vu des tutos avec esphome, de plus, sur le TP4056, j’ai repris 2 sorties me permettant de savoir les états ‹ charge ›, ‹ décharge ›, ‹ pleine › et pas besoin de composant autour
je n’ai pas utilisé esphome dans ce projet solaire pour essayer de gagner me maximum de temps entre la connexion wifi, connexion mqtt, envoi des valeurs et mise en veille

image

et pour cela, je suis pas certain que ce soit bien cela que tu cherche mais je pense que des templates pourraient t’aider :

mqtt:
  sensor:
  - state_topic: stephane/thermo09/batinfo
    name: tension batterie thermo09
    qos: 0
    unit_of_measurement: "V"
    value_template: "{{ value_json.tension }}"

  - state_topic: stephane/thermo09/batinfo
    name: etat batterie thermo09
    qos: 0
    value_template: "{{ value_json.etat }}"

Hello ! Merci pour vos retour c’est très intéressant!
Pour le coup j’ai réussi à m’en sortir avec mqtt c’est tout bon maintenant tout marche nickel :slight_smile: je peux mettre le code si ça en intéresse certain :wink:

Salut n’hésite pas a remettre ton poste a jour en ajoutant en dessous la solution complète et surtout tu peux cocher la case résolu du poste qui t’a permit de resoudre ton problème.

Domotiquement

1 « J'aime »

Cela intéressera certainement dû monde alors comme dit @McFly, post la solution avec le code en cochant la case « Solution » sur ce post. Cela lui donnera de la visibilité.

Bonne journée à toi :wink:

Hello ! DSL du retard j’ai bcp de boulot en ce moment haha.
Voici le code finalisé :


esphome:
  name: esp-bal
  friendly_name: ESP_BAL

esp32:
  board: esp32dev
  framework:
    type: arduino

# Enable logging
logger:

# Enable Home Assistant API
api:
  encryption:
    key: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

ota:
  password: "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"

time:
  - platform: homeassistant
    timezone: Europe/Paris
    id: homeassistant_time

wifi:
  ssid: !secret wifi_ssid
  password: !secret wifi_password
  power_save_mode: none
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "Esp-Bal-Davanod Hotspot"
    password: "ESP_BAL"

i2c:
  sda: 21
  scl: 22
  scan: true
  id: bus_a

mqtt:
  broker: 192.168.0.154
  username: !secret mqtt_username
  password: !secret mqtt_password
  birth_message:
  will_message:
    
deep_sleep:
  run_duration: 1min
  sleep_duration: 30min
  esp32_ext1_wakeup: 
   pins: 
    - 2
    - 4
   mode: ANY_HIGH
  id: deep_sleep_1

captive_portal:

binary_sensor:
  - platform: gpio
    pin: 2
    id: petit_capteur
    name: "Trappe Boite Aux Lettres"
    on_press:
      then:
      - homeassistant.service:
          service: input_datetime.set_datetime
          data:
            entity_id: input_datetime.heure_courrier
          data_template:
            date: '{{ as_timestamp(now())|timestamp_custom(''%Y-%m-%d'') }}'
            time: '{{ now().strftime(''%H:%M:%S'') }}'
      - homeassistant.service:
          service: notify.notify
          data:
            message: Courrier distribué {{states('input_datetime.heure_courrier')}}
            title: Courrier

  - platform: gpio
    pin: 4
    id: grand_capteur
    name: "Porte Boite Aux Lettres"
    on_press:
      then:
      - homeassistant.service:
          service: input_datetime.set_datetime
          data:
            entity_id: input_datetime.heure_courrier
          data_template:
            date: '{{ as_timestamp(now())|timestamp_custom(''%Y-%m-%d'') }}'
            time: '{{ now().strftime(''%H:%M:%S'') }}'
      - homeassistant.service:
          service: notify.notify
          data:
            message: Colis Reçus / Courrier Relevé {{states('input_datetime.heure_courrier')}}
            title: Relève / Colis

sensor:
  - platform: uptime
    name: "Temps De Fonctionnement"
    id: uptime_BAL
 
  - platform: wifi_signal
    name: "Signal Wifi"
    id: "wifi_signal_BAL"
    update_interval: 2s

  - platform: dht
    pin: 0
    model: DHT22
    temperature:
      name: "Température Extérieure"
    humidity:
      name: "Humidité Extérieure"
    update_interval: 1min

  - platform: ina219
    address: 0x40
    shunt_resistance: 0.1 ohm
    current:
      name: "BAL Current"
    power:
      name: "BAL Power"
    bus_voltage:
      name: "BAL Bus Voltage"
    shunt_voltage:
      name: "BAL Shunt Voltage"
    max_voltage: 32.0V
    max_current: 3.2A
    update_interval: 5s

1 « J'aime »

Question simple, pourquoi ne pas passer par un détecteur aqara en zigbee ? (Détecteur type effraction.
Suivant le type de couvercle de la BAL et de la distance, c’est beaucoup plus simple.

Hello !alors pour pas mal de raison en vrai :

Le plaisir de bidouiller apprendre esp home et aussi se familiariser avec toutes les possibilités.
Ensuite la problématique de la distance et cage de faraday qui n’existe pas avec l’antenne déporté (lié à un répéteur wifi esp en solaire pour tous les appareils extérieurs).
Avoir la main sur mon code et pouvoir agrémenter le projet avec de nouvelles features (gestion batterie, capteur d’humidité etc).
Et enfin le coût du projet qui est bien moindre :slight_smile: (moins de 10€ pour une bal complète).
Voili voilou ^^