Files
ESPHome_ButtonPlusV2/Tests/24-11-25_new_script.yaml
T

530 lines
14 KiB
YAML

esphome:
name: buttonplus-test
friendly_name: ButtonPlus_test
on_boot:
priority: -100
then:
- script.execute: setup_bar_displays
- script.execute: update_bar1_left
- script.execute: update_bar1_right
- script.execute: update_bar2_left
- script.execute: update_bar2_right
- script.execute: update_bar3_left
- script.execute: update_bar3_right
esp32:
board: esp32-s3-devkitc-1
flash_size: 16MB
framework:
type: arduino
debug:
update_interval: 5s
text_sensor:
- platform: debug
device:
name: "Device Info"
reset_reason:
name: "Reset Reason"
# Logger must be at least debug (default)
logger:
level: debug
# Enable Home Assistant API
api:
encryption:
key: ""
ota:
- platform: esphome
password: ""
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
output_power: 15.5dB
i2c:
- id: temperature_sensor
sda: GPIO1
scl: GPIO2
- id: buttons
sda: GPIO47
scl: GPIO48
frequency: 400khz
spi:
clk_pin: GPIO36
mosi_pin: GPIO35
mcp23008:
- id: base_J0
i2c_id: buttons
address: 0x20
- id: base_J1
i2c_id: buttons
address: 0x21
- id: base_J2
i2c_id: buttons
address: 0x22
- id: base_J3
i2c_id: buttons
address: 0x23
output:
- platform: ledc
pin: GPIO3
id: display_main_backlight_pwm
inverted: True
max_power: 1.0
frequency: 500Hz
- platform: ledc
pin: GPIO46
id: displays_mini_backlight_pwm
inverted: True
max_power: 0.6
frequency: 500Hz
- id: cs_pin_bar1_left
platform: gpio
pin:
mcp23xxx: base_J1
number: 5
mode:
output: true
inverted: true
- id: cs_pin_bar1_right
platform: gpio
pin:
mcp23xxx: base_J1
number: 1
mode:
output: true
inverted: true
- id: cs_pin_bar2_left
platform: gpio
pin:
mcp23xxx: base_J2
number: 5
mode:
output: true
inverted: true
- id: cs_pin_bar2_right
platform: gpio
pin:
mcp23xxx: base_J2
number: 1
mode:
output: true
inverted: true
- id: cs_pin_bar3_left
platform: gpio
pin:
mcp23xxx: base_J3
number: 5
mode:
output: true
inverted: true
- id: cs_pin_bar3_right
platform: gpio
pin:
mcp23xxx: base_J3
number: 1
mode:
output: true
inverted: true
sensor:
- platform: sts3x
id: inside_temperature
i2c_id: temperature_sensor
name: "Temperature"
address: 0x4A
update_interval: 10s
- platform: homeassistant
entity_id: sensor.gw1100a_outdoor_temperature
id: outside_temperature
- platform: debug
free:
name: "Heap Free"
block:
name: "Heap Max Block"
loop_time:
name: "Loop Time"
psram:
name: "Free PSRAM"
time:
- platform: homeassistant
id: datetime
font:
- file: "https://github.com/web-fonts/ttf/raw/refs/heads/master/bpg-ingiri-arial-webfont.ttf"
id: font_arial20
size: 20
bpp: 4
- file: "https://github.com/web-fonts/ttf/raw/refs/heads/master/bpg-ingiri-arial-webfont.ttf"
id: font_arial15
size: 15
bpp: 4
- file: "https://github.com/web-fonts/ttf/raw/refs/heads/master/bpg-ingiri-arial-webfont.ttf"
id: font_arial40
size: 40
bpp: 4
- file: "https://torinak.com/font/7segment.ttf"
id: font_clock
size: 80
bpp: 4
- file: "https://torinak.com/font/7segment.ttf"
id: font_date
size: 30
bpp: 4
image:
- file: mdi:lightbulb
id: lightbulb
resize: 80x80
- file: mdi:alert
id: alert
resize: 80x80
- file: mdi:chevron-right
id: icon_next_page
resize: 30x30
- file: mdi:chevron-left
id: icon_prev_page
resize: 30x30
- file: mdi:sun-thermometer-outline
id: icon_temp_outside
resize: 40x40
- file: mdi:home-thermometer-outline
id: icon_temp_inside
resize: 40x40
color:
- id: red
hex: FF0000
- id: blue
hex: 0000FF
- id: yellow
hex: FFFF00
- id: green
hex: 00FF00
- id: orange
hex: FF7F00
- id: white
hex: FFFFFF
binary_sensor:
- platform: gpio
id: 'main_display_btn_left'
name: "Main Display button Left"
pin:
mcp23xxx: base_J2
number: 6
mode: INPUT_PULLUP
inverted: true
on_click:
- script.execute: prev_page_all
- platform: gpio
id: 'main_display_btn_right'
name: "Main Display button Right"
pin:
mcp23xxx: base_J2
number: 2
mode: INPUT_PULLUP
inverted: true
on_click:
- script.execute: next_page_all
- platform: gpio
id: 'bar1_btn_left'
name: "BAR 1 button Left"
pin:
mcp23xxx: base_J3
number: 6
mode: INPUT_PULLUP
inverted: true
- platform: gpio
id: 'bar1_btn_right'
name: "BAR 1 button Right"
pin:
mcp23xxx: base_J3
number: 2
mode: INPUT_PULLUP
inverted: true
light:
- platform: neopixelbus
id: neopixels
type: RGB
variant: WS2812
pin: GPIO4
num_leds: 5
- platform: monochromatic
output: display_main_backlight_pwm
gamma_correct : 2.2
name: "Main Display Backlight"
id: display_main_backlight
restore_mode: ALWAYS_ON
- platform: monochromatic
output: displays_mini_backlight_pwm
gamma_correct : 2.2
name: "Mini Display Backlight"
id: displays_mini_backlight
restore_mode: ALWAYS_ON
- platform: partition
name: "BAR 1 Left RGB Front"
id: bar1_left_rgb_front
segments:
- id: neopixels
from: 0
to: 0
- platform: partition
name: "BAR 1 Left RGB Back"
id: bar1_left_rgb_back
segments:
- id: neopixels
from: 1
to: 1
- platform: partition
name: "BAR 1 Right RGB Front"
id: bar1_right_rgb_front
segments:
- id: neopixels
from: 2
to: 2
- platform: partition
name: "BAR 1 Right RGB Back"
id: bar1_right_rgb_back
segments:
- id: neopixels
from: 3
to: 3
display:
- id: main_display
platform: ili9xxx
model: ili9341
color_order: rgb
update_interval: 30s
invert_colors: false
dc_pin:
number: GPIO37
allow_other_uses: true
cs_pin:
mcp23xxx: base_J0
number: 5
mode:
output: true
inverted: false
show_test_card: false
dimensions:
height: 240
width: 320
rotation: 180
pages:
- id: page1
lambda: |-
id(all_pages).execute();
it.print(100, 160, id(font_arial20), "This is page 1!");
- id: bar_display
platform: ili9xxx
model: ST7735
color_order: bgr
update_interval: never
dc_pin:
number: GPIO37
allow_other_uses: true
invert_colors: false
show_test_card: false
auto_clear_enabled: false
dimensions:
height: 160
width: 80
offset_width: 24
script:
- id: update_bar1_left
then:
- lambda: |-
id(cs_pin_bar1_left).turn_on(); // <<
id(cs_pin_bar1_right).turn_off();
id(cs_pin_bar2_left).turn_off();
id(cs_pin_bar2_right).turn_off();
id(cs_pin_bar3_left).turn_off();
id(cs_pin_bar3_right).turn_off();
id(bar_display).clear();
id(bar_display).set_rotation(display::DisplayRotation::DISPLAY_ROTATION_270_DEGREES);
id(bar1_left_page1).execute();
id(bar_display).update();
delay(1);
id(cs_pin_bar1_left).turn_off();
- id: update_bar1_right
then:
- lambda: |-
id(cs_pin_bar1_left).turn_off();
id(cs_pin_bar1_right).turn_on(); // <<
id(cs_pin_bar2_left).turn_off();
id(cs_pin_bar2_right).turn_off();
id(cs_pin_bar3_left).turn_off();
id(cs_pin_bar3_right).turn_off();
id(bar_display).clear();
id(bar_display).set_rotation(display::DisplayRotation::DISPLAY_ROTATION_90_DEGREES);
id(bar1_right_page1).execute();
id(bar_display).update();
delay(1);
id(cs_pin_bar1_right).turn_off();
- id: update_bar2_left
then:
- lambda: |-
id(cs_pin_bar1_left).turn_off();
id(cs_pin_bar1_right).turn_off();
id(cs_pin_bar2_left).turn_on(); // <<
id(cs_pin_bar2_right).turn_off();
id(cs_pin_bar3_left).turn_off();
id(cs_pin_bar3_right).turn_off();
//
id(bar_display).fill(id(orange));
id(bar_display).update();
delay(1);
id(cs_pin_bar2_left).turn_off();
- id: update_bar2_right
then:
- lambda: |-
id(cs_pin_bar1_left).turn_off();
id(cs_pin_bar1_right).turn_off();
id(cs_pin_bar2_left).turn_off();
id(cs_pin_bar2_right).turn_on(); // <<
id(cs_pin_bar3_left).turn_off();
id(cs_pin_bar3_right).turn_off();
//
id(bar_display).fill(id(orange));
id(bar_display).update();
delay(1);
id(cs_pin_bar2_right).turn_off();
- id: update_bar3_left
then:
- lambda: |-
id(cs_pin_bar1_left).turn_off();
id(cs_pin_bar1_right).turn_off();
id(cs_pin_bar2_left).turn_off();
id(cs_pin_bar2_right).turn_off();
id(cs_pin_bar3_left).turn_on(); // <<
id(cs_pin_bar3_right).turn_off();
//
id(bar_display).fill(id(orange));
id(bar_display).update();
delay(1);
id(cs_pin_bar3_left).turn_off();
- id: update_bar3_right
then:
- lambda: |-
id(cs_pin_bar1_left).turn_off();
id(cs_pin_bar1_right).turn_off();
id(cs_pin_bar2_left).turn_off();
id(cs_pin_bar2_right).turn_off();
id(cs_pin_bar3_left).turn_off();
id(cs_pin_bar3_right).turn_on();
//
id(bar_display).fill(id(orange));
id(bar_display).update();
delay(1);
id(cs_pin_bar3_right).turn_off();
- id: bar1_left_page1
then:
- lambda: |-
id(bar_display).image(80, 0, id(lightbulb), ImageAlign::TOP_CENTER, id(orange));
- id: bar1_right_page1
then:
- lambda: |-
id(bar_display).image(80, 0, id(alert), ImageAlign::TOP_CENTER, id(red));
- id: setup_bar_displays
then:
- lambda: |-
id(cs_pin_bar1_left).turn_on();
id(bar_display).setup();
id(cs_pin_bar1_left).turn_off();
delay(5);
id(cs_pin_bar1_right).turn_on();
id(bar_display).setup();
id(cs_pin_bar1_right).turn_off();
delay(5);
id(cs_pin_bar2_left).turn_on();
id(bar_display).setup();
id(cs_pin_bar2_left).turn_off();
delay(5);
id(cs_pin_bar2_right).turn_on();
id(bar_display).setup();
id(cs_pin_bar2_right).turn_off();
delay(5);
id(cs_pin_bar3_left).turn_on();
id(bar_display).setup();
id(cs_pin_bar3_left).turn_off();
delay(5);
id(cs_pin_bar3_right).turn_on();
id(bar_display).setup();
id(cs_pin_bar3_right).turn_off();
- id: update_main
then:
- component.update: main_display
- id: update_all
then:
- component.update: main_display
- script.execute: update_bar1_left
- script.execute: update_bar1_right
- script.execute: update_bar2_left
- script.execute: update_bar2_right
- script.execute: update_bar3_left
- script.execute: update_bar3_right
- id: next_page_main
then:
- display.page.show_next: main_display
- script.execute: update_main
- id: next_page_all
then:
- display.page.show_next: main_display
- script.execute: update_all
- id: prev_page_main
then:
- display.page.show_previous: main_display
- script.execute: update_main
- id: prev_page_all
then:
- display.page.show_previous: main_display
- script.execute: update_all
- id: all_pages
then:
- lambda: |-
//>>> make a border arround the display
id(main_display).filled_rectangle( 0, 0, 320, 3, id(red));
id(main_display).filled_rectangle( 0, 0, 3, 240, id(red));
id(main_display).filled_rectangle( 0, 237, 320, 3, id(red));
//id(main_display).filled_rectangle( 0, 206, 320, 3, id(red));
id(main_display).filled_rectangle(317, 0, 3, 240, id(red));
//
//>>> prev/next icons next to butotns
id(main_display).image(0, 208, id(icon_prev_page), ImageAlign::TOP_LEFT, id(orange));
id(main_display).image(320, 208, id(icon_next_page), ImageAlign::TOP_RIGHT, id(orange));
//
//>>> temperature inside:
id(main_display).image(36, 15, id(icon_temp_inside), ImageAlign::TOP_CENTER, id(orange));
id(main_display).printf(36, 85, id(font_arial20), id(white), TextAlign::BASELINE_CENTER , "%.1f°", id(inside_temperature).state);
//
//>>> vertical line:
id(main_display).filled_rectangle(70, 0, 3, 115, id(red));
//
//>>> print time and date
id(main_display).strftime(160, 5, id(font_clock), TextAlign::TOP_CENTER, "%H:%M", id(datetime).now());
id(main_display).strftime(160, 80, id(font_date), TextAlign::TOP_CENTER, "%d-%m-%Y", id(datetime).now());
//
//>>> vertical line:
id(main_display).filled_rectangle(250, 0, 3, 115, id(red));
//
//>>> outside temperature
id(main_display).image(285, 15, id(icon_temp_outside), ImageAlign::TOP_CENTER, id(orange));
id(main_display).printf(285, 85, id(font_arial20), id(white), TextAlign::BASELINE_CENTER , "%.1f°", id(outside_temperature).state);
//
//>>> horizontal line:
id(main_display).filled_rectangle(0, 115, 320, 3, id(red));