From e998fb6c96d932b885bc232a3e55f1f30d11d0d2 Mon Sep 17 00:00:00 2001 From: Martijn Date: Mon, 25 Nov 2024 19:05:25 +0100 Subject: [PATCH] added succesfull test from today --- Tests/24-11-25_new_script.yaml | 529 +++++++++++++++++++++++++++++++++ 1 file changed, 529 insertions(+) create mode 100644 Tests/24-11-25_new_script.yaml diff --git a/Tests/24-11-25_new_script.yaml b/Tests/24-11-25_new_script.yaml new file mode 100644 index 0000000..fbb7f06 --- /dev/null +++ b/Tests/24-11-25_new_script.yaml @@ -0,0 +1,529 @@ +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)); +