Files
Zwembad/esphome-web-a17130.yaml
2025-07-09 09:46:38 +02:00

276 lines
6.3 KiB
YAML

substitutions:
device_name: a17130
friendly_name: Zwembad
displayDelay: 5s
esp32:
board: esp32-c3-devkitm-1
framework:
type: esp-idf
esphome:
name: ${device_name}
friendly_name: ${friendly_name}
min_version: 2025.5.0
name_add_mac_suffix: true
# Enable logging
logger:
level: DEBUG
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.1.165
gateway: 192.168.1.254
subnet: 255.255.255.0
dns1: 192.168.1.1
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: !secret ap_ssid
password: !secret ap_password
captive_portal:
web_server:
port: 80
version: 3
ota:
- platform: !secret ota_platform
password: !secret ota_password
# Enable Home Assistant API
api:
i2c:
sda: GPIO20
scl: GPIO21
scan: true
id: bus_a
frequency: 400kHz
font:
- file: "fonts/Helvetica.ttf"
id: helvetica
size: 10
- file: "fonts/Helvetica.ttf"
id: small_font
size: 9
# Display configuration (SSD1306 128x64 OLED)
display:
- platform: ssd1306_i2c
model: "SH1106 128x64"
address: 0x3C
update_interval: 0.5s
id: my_display
pages:
- id: page1
lambda: |-
it.print(0, 0, id(helvetica), "Overzicht");
it.printf(1,15,id(helvetica),"Sensor aanvoer: %8f.0", id(aanvoerTemp).state);
it.printf(1,25,id(helvetica),"Sensor retour: %8f.0", id(retourTemp).state);
it.printf(1,35,id(helvetica),"Dak: %8f.0", id(dakTemp).state);
it.printf(1,45,id(helvetica),"Bad: %8f.0", id(badTemp).state);
- id: page2
lambda: |-
it.print(0, 0, id(helvetica), "Page 2");
it.print(0, 20, id(helvetica), "Settings");
- id: page3
lambda: |-
it.print(0, 0, id(helvetica), "Page 3");
it.print(0, 20, id(helvetica), "Status");
- id: page4
lambda: |-
it.print(0, 0, id(helvetica), "Hardware");
it.printf(0, 15, id(helvetica), "Uptime: %s", id(uptime_sensor).state.c_str());
it.printf(0, 25, id(helvetica), "IP: %s", id(ip_addr).state.c_str());
it.printf(0, 35, id(helvetica), "WiFi RSSI: %d dBm", (int)id(wifi_signal1).state);
time:
- platform: homeassistant
id: my_time
# Button configuration
binary_sensor:
- platform: gpio
pin: GPIO03
name: "Menu Button"
on_press:
- logger.log: "Button pressed"
- script.execute: reset_oled_timeout
light:
- platform: monochromatic
name: displayBL
id: displayBL
output: my_display1
# restore_mode: ALWAYS_ON
initial_state:
state: true
on_turn_on:
- logger.log:
format: "Display On begin: %d"
args: [ 'id(oled_on)' ]
- lambda: id(my_display).turn_on();
# - delay: !lambda 'return id(displayDelay);'
- lambda: id(my_display).turn_off();
on_turn_off:
then:
- logger.log:
format: "Display Off: %d"
args: [ 'id(oled_on)' ]
- lambda: id(my_display).turn_off();
output:
- platform: template
id: my_display1
type: float
write_action:
then:
- lambda: id(my_display).set_contrast(state);
# status_led:
# pin:
# number: GPIO08
# inverted: true
# time:
# - platform: sntp
# id: sntp_time
# DS18B20 Temperature Sensor
one_wire:
- platform: gpio
pin: GPIO5
id: bus1
- platform: gpio
pin: GPIO6
id: bus2
- platform: gpio
pin: GPIO7
id: bus3
- platform: gpio
pin: GPIO8
id: bus4
sensor:
- platform: dallas_temp
one_wire_id: bus1
name: "aanvoer"
id: aanvoerTemp
#address: 0x1b3c01d607832828
- platform: dallas_temp
one_wire_id: bus2
name: "retour"
id: retourTemp
#address: 0x813c01d6076ecf28
- platform: dallas_temp
one_wire_id: bus3
name: "dak"
id: dakTemp
#address: 0x94041722904dff28
- platform: dallas_temp
one_wire_id: bus4
name: "bad"
id: badTemp
#address: 0xe6031722aa43ff28
# Rotary encoder configuration
- platform: rotary_encoder
name: "Rotary Encoder"
id: my_encoder
pin_a: GPIO00
pin_b: GPIO01
min_value: 0
max_value: 3
resolution: 1
on_value:
then:
- script.execute: reset_oled_timeout
on_clockwise:
- display.page.show_next: my_display
on_anticlockwise:
- display.page.show_previous: my_display
- platform: uptime
name: Uptime Sensor
id: uptime_seconds
update_interval: 5s
internal: true
on_value:
then:
- lambda: |-
int secs = int(x);
int mins = secs / 60;
int hrs = mins / 60;
int days = hrs / 24;
char buf[32];
sprintf(buf, "%dD %02d:%02d:%02d", days, hrs % 24, mins % 60, secs % 60);
id(uptime_sensor).publish_state(buf);
- platform: wifi_signal
name: "WiFi Signal"
id: wifi_signal1
update_interval: 5s
internal: true
globals:
- id: oled_on
type: bool
restore_value: no
initial_value: "true"
interval:
- interval: 1s
then:
- if:
condition:
- not:
- script.is_running: oled_timeout
then:
- script.execute: oled_timeout
script:
- id: reset_oled_timeout
then:
- lambda: |-
id(oled_on) = true;
# - display.page.show: my_display
- lambda: id(my_display).turn_on();
- script.stop: oled_timeout
- script.execute: oled_timeout
- id: oled_timeout
mode: restart
then:
- delay: 5s
- lambda: |-
id(oled_on) = false;
# - display.page.show: my_display
- lambda: id(my_display).turn_off();
text_sensor:
- platform: wifi_info
ip_address:
name: ESP32 IP Address
id: ip_addr
internal: true
- platform: template
name: "Uptime Readable"
id: uptime_sensor
internal: true
# Example configuration entry
switch:
- platform: gpio
pin: GPIO04
id: relay
inverted: true
name: "Zwembadpomp"
icon: "mdi:pump"
on_turn_on:
- delay: 500ms
- switch.turn_off: relay
# - platform: gpio
# pin: GPIO10
# id: relay2
# inverted: true
# name: "Zwembadpomp 2"
# icon: "mdi:pump"
# on_turn_on:
# - delay: 500ms
# - switch.turn_off: relay2