¿En qué podemos ayudarte?
ESP32-OLED

Este dispositivo es un desarrollo específico basado en ESP32 WROOM y en la plataforma ESPHOME que tiene dos funciones:
- Muestra el estado de diferentes variables del sistema domótico de la casa, así como un enlace a un código QR para abrir una página con más información.
- Detecta la presencia de alimentación de 230V de la casa
Diagrama hardware

Diagrama de flujo ESP32

Diagrama de flujo automatización en Home Assistant

Código ESPhome
esphome: name: esp-32-oled friendly_name: ESP-32-OLED 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-32-Oled Fallback Hotspot" password: "***********" captive_portal: globals: - id: cont_verde type: int restore_value: no initial_value: '0' switch: # Led verde. Indicador de operacion normal. # cuando está apagado, Home Assistant envía informacion cada 5s. y un pulso de 200ms # cuando está encendido, la informacion se actualiza manualmente con el boton 1 # Se apaga cuando se apaga el led amarillo, controlado por el botón 2 - platform: gpio name: "LED_verde_1" restore_mode: always_off id: LED_verde pin: 5 # Led amarillo. cuando está encendido muestra informacion ampliada - platform: gpio name: "LED_amarillo_2" id: LED_amarillo pin: 32 restore_mode: always_off # cuando está encendido muestra informacion ampliada on_turn_on: then: - display.page.show: page2 on_turn_off: then: - display.page.show: page1 # Led rojo. Se usa para alarmas, como cuando se pierden los 230V - platform: gpio name: "LED_rojo_3" id: LED_rojo pin: 33 restore_mode: always_off binary_sensor: - platform: gpio name: "btn_data" # boton de operacion primario pin: number: 16 inverted: true mode: input: true pullup: true # Cuando se presiona pasa al modo de operacion manual. El cambio de los datos de las pantallas se hace en Home Assistant, cada vez que se presiona. Vuelve al modo auto con el botón 2 on_press: then: - switch.turn_off: LED_verde on_release: then: - switch.turn_on: LED_verde - platform: gpio name: "btn_display" # boton de informacion ampliada y reset a operacion normal pin: number: 17 inverted: true mode: input: true pullup: true # Este boton apaga o enciende el LED amarillo, que se usa para enviar informacion ampliada # Al apagar, apaga tambien el led verde, que indica el modo automático (apagado) o manual (encendido) on_click: min_length: 50ms max_length: 500ms then: - if: condition: switch.is_off: LED_amarillo then: - switch.turn_on: LED_amarillo else: - switch.turn_off: LED_amarillo - switch.turn_off: LED_verde - platform: gpio name: "sensor-230v" id: sensor_230v # sensor de presencia de los 230V pin: number: 18 mode: input: true pullup: true # cuando hay 230V la entrada está en "bajo" (off) # el LED rojo se enciende cuando se pierden los 230v en la casa on_release: then: - switch.turn_off: LED_rojo on_press: then: - switch.turn_on: LED_rojo - switch.turn_on: LED_amarillo - lambda: |- id(hora_fallo_230v).publish_state(id(s_time).now().strftime("%H:%M")); - homeassistant.service: service: input_text.set_value data: entity_id: input_text.hora_fallo_230v data_template: value: Hora fallo {{ hora_f }} variables: hora_f: |- return id(hora_fallo_230v).state; - display.page.show: page3 time: - platform: sntp id: s_time # ... on_time: # Every 5 seconds - seconds: /5 then: - if: condition: - binary_sensor.is_on: sensor_230v # cuando no hay 230 el led rojo esta siempre encendido then: - switch.turn_on: LED_rojo # cuando hay 230v se emite un pulso else: - switch.turn_on: LED_rojo - delay: 0.2s - switch.turn_off: LED_rojo - if: condition: - lambda: return id(cont_verde) > 0 ; then: - lambda: id(cont_verde) -= 1; - logger.log: "decremento contador verde" else: - switch.turn_off: LED_verde - logger.log: "contador verde cero" sensor: # Ya no se usan pero los dejo como ejemplo - platform: homeassistant id: Temp_AEMET entity_id: sensor.aemet_temperature - platform: homeassistant id: Hume_AEMET entity_id: sensor.aemet_humidity text_sensor: # textos informativos "estandard" que vienen de Home Assistant (page1). Se refrescan por defecto cada 5 segundos - platform: homeassistant name: "Texto superior" id: texto_superior entity_id: input_text.texto_oled_1 - platform: homeassistant name: "Texto central" id: texto_central entity_id: input_text.texto_oled_2 - platform: homeassistant name: "Texto inferior" id: texto_inferior entity_id: input_text.texto_oled_3 # Estos datos muestran las pantallas de informacion ampliada (page2). Son direcciones codificadas con un código QR - platform: homeassistant name: "Texto QR" id: texto_qr entity_id: input_text.texto_QR - platform: homeassistant name: "Direccion QR" id: direccion_qr entity_id: input_text.direccion_qr - platform: homeassistant name: "Hora fallo 230v" id: hora_fallo_230v entity_id: input_text.hora_fallo_230v i2c: # Display OLED sda: 21 scl: 22 scan: true font: # gfonts://family[@weight] - file: "gfonts://Roboto" id: roboto size: 16 qr_code: - id: ha_qr1 value: id(direccion_qr) display: - platform: ssd1306_i2c model: "SSD1306 128x64" address: 0x3C pages: - id: page1 lambda: |- // muestra los textos que vienen de home assistant it.printf(0, 0, id(roboto), "%s", id(texto_superior).state.c_str()); it.printf(0, 21, id(roboto), "%s", id(texto_central).state.c_str()); it.printf(0, 42, id(roboto), "%s", id(texto_inferior).state.c_str()); - id: page2 lambda: |- // texto y direccion en QR-code en [x=30,y=15] a escala 2x it.printf(0, 0, id(roboto), "%s", id(texto_qr).state.c_str()); // imprimir QR de la variable de Home Assistant // en https://community.home-assistant.io/t/using-home-assitant-sensor-state-as-value-for-qr/425529 ha_qr1->set_value(id(direccion_qr).state.c_str()); it.qr_code(30, 15, id(ha_qr1), Color(255,255,255), 2); - id: page3 lambda: |- // Fallo 230V it.print(0, 0, id(roboto), "FALLO 230V" ); it.printf(0, 21, id(roboto), "%s", id(hora_fallo_230v).state.c_str());
Automatización Home Assistant

Alerta fallo 230V Home Assistant
alerta_fallo_230v: name: 230v_fallo message: Ha fallado la red de 230 voltios done_message: La red de 230 voltios ha vuelto entity_id: binary_sensor.esp_32_oled_sensor_230v state: "on" repeat: 15 # This will repeat every 15 minutes can_acknowledge: true skip_first: false notifiers: - alexa_pasillo - MICASA_URGENTE