Afficheur domotique

Bonjour,

Je voulais vous partager une réalisation simple à base d’esp8266 et afficheur à matrice de leds piloté par un Max7219.
Celui-ci m’affiche en permanence l’heure et des informations utiles pour moi.
Je l’avais mise en place depuis un moment en C++ avec l’IDE Arduino et je viens de le migrer sous Esphome et j’ai étais assez étonné de la rapidité à générer le programme pour faire l’équivalent de ma version Arduino.

Cette afficheur est encastré dans l’entrée et permet d’avoir des information sur l’ouverture du portail et de la porte du ssol (qui a souvent été oubliée ouverte plusieurs nuits).
Et je viens de rajouté avec des led RGB , l’information concernant la couleur du jour pour mon contrat elec. Tempo. (bleu, blanc,rouge) ce qui me permet de ne pas oublié de faire attention à ma consommation les jours rouge surtout).
Le coté esthétique serait surement à revoir mais pour l’instant il me donne satisfaction tout en étant encastré dans un boitier électrique courant.

Voici le rendu à l’entrée:


Les 2 leds rouges allumées à gauche et droite de l’heure m’indique l’ouverture du portail et porte du ssol.
Et la led bleu indique la couleur du Tempo du jour

Le câblage à l’arrache du Wemos D1 Mini, de la matrice de leds et du module Led RVB

En version Fritzing:

Et pour finir le yaml esphome pour faire fonctionner le montage:

esphome:
  name: wemosd1mini3-clock
  friendly_name: wemosd1mini3-clock

esp8266:
  board: d1_mini

# Enable logging
logger:

wifi:
  networks:
  - ssid: !secret wifi_ssid
    password: !secret wifi_password
  - ssid: !secret wifi_ssid_backup
    password: !secret wifi_password_backup
  
  # Enable fallback hotspot (captive portal) in case wifi connection fails
  ap:
    ssid: "wemosd1mini3-clock"
    password: "O7ldeGmyKsvE"

# Enable Home Assistant API
api:
  encryption:
    key: !secret api_key

ota:
  password: !secret ota_pwd


captive_portal:

mqtt:
  broker: '192.168.xxx.xxx'
  topic_prefix: esphome
  discovery: false
  birth_message:
    topic: home/esphome/wemosd1mini3-clock_sys/binary_sensor/status
    payload: online
  will_message:
    topic: home/esphome/wemosd1mini3-clock_sys/binary_sensor/status
    payload: offline
  shutdown_message:
  log_topic:

spi:
  clk_pin: D5
  mosi_pin: D7


sensor:
  - platform: wifi_signal
    name: "Wemosd1Mini3-Clock WiFi AP Signal"
    state_topic: home/esphome/wemosd1mini3_ap/sensor/signal
    filters: []
    update_interval: 300s

  - platform: uptime
    name: "Wemosd1Mini3-Clock Uptime"
    update_interval: 120s
    state_topic: home/esphome/wemosd1mini3-clock_sys/sensor/uptime

binary_sensor:
  - platform: homeassistant    
    name: "Etat portail"
    id: etat_portail
    entity_id: binary_sensor.portail
    internal: true

  - platform: homeassistant    
    name: "Etat porte garage"
    id: etat_garage
    entity_id: binary_sensor.porte_garage
    internal: true
 
text_sensor:
  - platform: homeassistant
    name: "Tempo du jour"
    id: tempo_jour
    entity_id: sensor.tempo_aujourd_hui
    on_value:
      then:
        lambda: |-
          std::string val = id(tempo_jour).state;
          ESP_LOGI("main", "Value of tempo jour: %s", val.c_str());
          if (id(tempo_jour).state == "TEMPO_BLEU") {
            id(blue_led_on).execute();
          }
          else if (id(tempo_jour).state == "TEMPO_BLANC") {
            id(white_led_on).execute();
          }
          else if (id(tempo_jour).state == "TEMPO_ROUGE") {
            id(red_led_on).execute();
          }
     
switch:
  - platform: gpio
    name: "Green Led"
    id: sw_gled
    pin: D2
    command_topic: home/esphome/Wemosd1Mini3-Clock_gled/switch/state 
    state_topic: home/esphome/Wemosd1Mini3-Clock_gled/binary_sensor/state

  - platform: gpio
    name: "Red Led"
    id: sw_rled
    pin: D3
    command_topic: home/esphome/Wemosd1Mini3-Clock_rled/switch/state 
    state_topic: home/esphome/Wemosd1Mini3-Clock_rled/binary_sensor/state

  - platform: gpio
    name: "Blue Led"
    id: sw_bled
    pin: D6
    command_topic: home/esphome/Wemosd1Mini3-Clock_bled/switch/state 
    state_topic: home/esphome/Wemosd1Mini3-Clock_bled/binary_sensor/state

  - platform: gpio
    name: "Gnd Leds"
    pin: D8



display:
  - platform: max7219digit
    cs_pin: D4
    num_chips: 4
    intensity: 2
    lambda: |-
      it.strftime(5, 0, id(digit_font), "%H:%M", id(hass_time).now());
      if (id(etat_garage).state) {
        it.draw_pixel_at(0, 7, COLOR_ON);
      } else {
        it.draw_pixel_at(0, 7, COLOR_OFF);
      }
      if (id(etat_portail).state) {
        it.draw_pixel_at(31, 7, COLOR_ON);
      } else {
        it.draw_pixel_at(31, 7, COLOR_OFF);
      }
font:
  - file: "fonts/pixelmix.ttf"
    id: digit_font
    size: 8

time:
  - platform: homeassistant
    timezone: "Europe/Paris"
    id: hass_time
    
script:
  - id: blue_led_on
    then:
      - switch.turn_off: sw_gled
      - switch.turn_off: sw_rled
      - switch.turn_on: sw_bled

  - id: white_led_on
    then:
      - switch.turn_on: sw_bled
      - switch.turn_on: sw_rled
      - switch.turn_on: sw_gled

  - id: red_led_on
    then:
      - switch.turn_off: sw_bled
      - switch.turn_off: sw_gled
      - switch.turn_on: sw_rled

Voilà, si cela peut servir ou si vous avez des questions/remarques/améliorations

8 « J'aime »

Merci pour le partages

Belle réalisation.
Merci pour le partage.