esphome: name: buttonplus friendly_name: ButtonPlus esp32: variant: ESP32S3 board: esp32-s3-devkitc1-n16r8 flash_size: 16MB framework: type: esp-idf # Enable logging logger: level: DEBUG # Enable Home Assistant API api: encryption: key: "" ota: - platform: esphome password: "" wifi: ssid: !secret wifi_ssid password: !secret wifi_password # Enable fallback hotspot (captive portal) in case wifi connection fails ap: ssid: "Buttonplus" password: "" packages: remote_package_files: url: https://gitea.furb.it/kennyboy55/ESPHome_ButtonPlusV2 ref: main files: - path: 'package/3bar_1display.yaml' vars: nr_of_pages: '3' page_names: '{"Start", "Music", "Page 3"}' - path: 'package/cards/music.yaml' vars: music_card_entity_id: 'media_player.spotifyplus_kennyboy44' music_card_text_color: FFFFFF music_card_icon_main_color: FF7F00 music_card_icon_bar_color: FF7F00 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://torinak.com/font/7segment.ttf" id: font_clock size: 64 bpp: 4 - file: "https://torinak.com/font/7segment.ttf" id: font_date size: 24 bpp: 4 image: - file: mdi:lightbulb id: lightbulb resize: 80x80 type: GRAYSCALE - file: mdi:alert id: alert resize: 80x80 type: GRAYSCALE - file: mdi:chevron-right id: icon_next_page resize: 30x30 type: GRAYSCALE - file: mdi:chevron-left id: icon_prev_page resize: 30x30 type: GRAYSCALE - file: mdi:home-thermometer-outline id: icon_temp_inside resize: 40x40 type: GRAYSCALE - file: mdi:brightness-percent id: icon_ambient_inside resize: 40x40 type: GRAYSCALE 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 - id: grey hex: A6A6A6 display: ######### # MAIN ## ######### - id: !extend main_display # data_rate: 40MHz lambda: |- id(all_pages_main).execute(); switch (id(actual_page)){ case 0: it.print(100, 150, id(font_arial20), "Hooray, it works!"); break; case 1: id(music_card).execute(20, 125); break; case 2: it.print(100, 150, id(font_arial20), "Last Page"); break; } script: - id: all_pages_main then: - lambda: |- //>>> prev/next icons next to butotns id(main_display).image(0, 208, id(icon_prev_page), ImageAlign::TOP_LEFT, id(red)); id(main_display).image(320, 208, id(icon_next_page), ImageAlign::TOP_RIGHT, id(red)); // //>>> Page name id(main_display).print(100, 208, id(font_arial20), id(active_page_name).c_str()); // //>>> temperature inside: id(main_display).image(36, 15, id(icon_temp_inside), ImageAlign::TOP_CENTER, id(red)); id(main_display).printf(36, 80, id(font_arial20), id(white), TextAlign::TOP_CENTER , "%.1f°", id(buttonplus_temperature).state); // //>>> ambient light: id(main_display).image(285, 15, id(icon_ambient_inside), ImageAlign::TOP_CENTER, id(red)); id(main_display).printf(285, 80, id(font_arial20), id(white), TextAlign::TOP_CENTER , "%.1flux", id(buttonplus_ambientlight).state); // //>>> 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()); - id: !extend bar1_left_draw then: - lambda: |- switch (id(actual_page)){ case 0: id(bar_display).image(80, 0, id(lightbulb), ImageAlign::TOP_CENTER, id(red)); break; case 1: id(music_card_bar).execute("volume_down"); break; } - id: !extend bar1_right_draw then: - lambda: |- switch (id(actual_page)){ case 0: id(bar_display).image(80, 0, id(lightbulb), ImageAlign::TOP_CENTER, id(red)); break; case 1: id(music_card_bar).execute("volume_up"); break; } - id: !extend bar2_left_draw then: - lambda: |- switch (id(actual_page)){ case 0: id(bar_display).image(80, 0, id(lightbulb), ImageAlign::TOP_CENTER, id(red)); break; case 1: id(music_card_bar).execute("prev"); break; } - id: !extend bar2_right_draw then: - lambda: |- switch (id(actual_page)){ case 0: id(bar_display).image(80, 0, id(lightbulb), ImageAlign::TOP_CENTER, id(red)); break; case 1: id(music_card_bar).execute("next"); break; } - id: !extend bar3_left_draw then: - lambda: |- switch (id(actual_page)){ case 0: id(bar_display).image(80, 0, id(lightbulb), ImageAlign::TOP_CENTER, id(red)); break; case 1: id(music_card_bar).execute("power"); break; } - id: !extend bar3_right_draw then: - lambda: |- switch (id(actual_page)){ case 0: id(bar_display).image(80, 0, id(lightbulb), ImageAlign::TOP_CENTER, id(red)); break; case 1: id(music_card_bar).execute("playpause"); break; } event: - id: !extend bar1_btn_left_event on_event: then: - lambda: |- ESP_LOGD("main", "BAR1LEFT event %s triggered.", event_type.c_str()); - lambda: |- if (event_type == "click page 1"){ id(music_card_vol_down).execute(); ESP_LOGD("main", "VOL DOWN"); } - id: !extend bar1_btn_right_event on_event: then: - lambda: |- ESP_LOGD("main", "BAR1RIGHT event %s triggered.", event_type.c_str()); - lambda: |- if (event_type == "click page 1"){ id(music_card_vol_up).execute(); ESP_LOGD("main", "VOL UP"); } - id: !extend bar2_btn_left_event on_event: then: - lambda: |- ESP_LOGD("main", "BAR2LEFT event %s triggered.", event_type.c_str()); - lambda: |- if (event_type == "click page 1"){ id(music_card_prev).execute(); ESP_LOGD("main", "PREV"); } - id: !extend bar2_btn_right_event on_event: then: - lambda: |- ESP_LOGD("main", "BAR2RIGHT event %s triggered.", event_type.c_str()); - lambda: |- if (event_type == "click page 1"){ id(music_card_next).execute(); ESP_LOGD("main", "NEXT"); } - id: !extend bar3_btn_left_event on_event: then: - lambda: |- ESP_LOGD("main", "BAR3LEFT event %s triggered.", event_type.c_str()); - lambda: |- if (event_type == "click page 1"){ id(music_card_power).execute(); ESP_LOGD("main", "POWER"); } - id: !extend bar3_btn_right_event on_event: then: - lambda: |- ESP_LOGD("main", "BAR3RIGHT event %s triggered.", event_type.c_str()); - lambda: |- if (event_type == "click page 1"){ id(music_card_playpause).execute(); ESP_LOGD("main", "PLAY PAUSE"); }