diff --git a/Examples/3BAR_1Display.yaml b/Examples/3BAR_1Display.yaml index 0e1478b..d76e0e6 100644 --- a/Examples/3BAR_1Display.yaml +++ b/Examples/3BAR_1Display.yaml @@ -37,10 +37,9 @@ packages: files: path: 'package/3bar_1display.yaml' vars: - nr_of_pages: '1' - page_names: '{"Start"}' + nr_of_pages: '2' + page_names: '{"Start","Page 2"}' ref: main - font: - file: "https://github.com/web-fonts/ttf/raw/refs/heads/master/bpg-ingiri-arial-webfont.ttf" @@ -98,208 +97,6 @@ color: - id: grey hex: A6A6A6 -event: - - platform: template - name: BAR1 button Left event - id: bar1_btn_left_event - event_types: - - "press page 0" - - "release page 0" - - "long press page 0" - - platform: template - name: BAR1 button Right event - id: bar1_btn_right_event - event_types: - - "press page 0" - - "release page 0" - - "long press page 0" - - platform: template - name: BAR2 button Left event - id: bar2_btn_left_event - event_types: - - "press page 0" - - "release page 0" - - "long press page 0" - - platform: template - name: BAR2 button Right event - id: bar2_btn_right_event - event_types: - - "press page 0" - - "release page 0" - - "long press page 0" - - platform: template - name: BAR3 button Left event - id: bar3_btn_left_event - event_types: - - "press page 0" - - "release page 0" - - "long press page 0" - - platform: template - name: BAR3 button Right event - id: bar3_btn_right_event - event_types: - - "press page 0" - - "release page 0" - - "long press page 0" - -binary_sensor: - - id: !extend main_display_btn_left - on_click: - - script.execute: prev_page - - id: !extend main_display_btn_right - on_click: - - script.execute: next_page - - id: !extend bar1_btn_left - on_click: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar1_btn_left_event).trigger("press page 0"); - break; - } - on_release: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar1_btn_left_event).trigger("release page 0"); - break; - } - on_multi_click: - - timing: - - ON for at least 2s - then: - - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar1_btn_left_event).trigger("long press page 0"); - break; - } - - id: !extend bar1_btn_right - on_click: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar1_btn_right_event).trigger("press page 0"); - break; - } - on_release: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar1_btn_right_event).trigger("release page 0"); - break; - } - on_multi_click: - - timing: - - ON for at least 2s - then: - - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar1_btn_right_event).trigger("long press page 0"); - break; - } - - id: !extend bar2_btn_left - on_click: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar2_btn_left_event).trigger("press page 0"); - break; - } - on_release: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar2_btn_left_event).trigger("release page 0"); - break; - } - on_multi_click: - - timing: - - ON for at least 2s - then: - - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar2_btn_left_event).trigger("long press page 0"); - break; - } - - id: !extend bar2_btn_right - on_click: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar2_btn_right_event).trigger("press page 0"); - break; - } - on_release: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar2_btn_right_event).trigger("release page 0"); - break; - } - on_multi_click: - - timing: - - ON for at least 2s - then: - - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar2_btn_right_event).trigger("long press page 0"); - break; - } - - id: !extend bar3_btn_left - on_click: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar3_btn_left_event).trigger("press page 0"); - break; - } - on_release: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar3_btn_left_event).trigger("release page 0"); - break; - } - on_multi_click: - - timing: - - ON for at least 2s - then: - - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar3_btn_left_event).trigger("long press page 0"); - break; - } - - id: !extend bar3_btn_right - on_click: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar3_btn_right_event).trigger("press page 0"); - break; - } - on_release: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar3_btn_right_event).trigger("release page 0"); - break; - } - on_multi_click: - - timing: - - ON for at least 2s - then: - lambda: |- - switch (id(actual_page)){ - case 0: - id(bar3_btn_right_event).trigger("long press page 0"); - break; - } - display: ######### # MAIN ## diff --git a/package/3bar_1display.yaml b/package/3bar_1display.yaml index 9cbccfc..fa32064 100644 --- a/package/3bar_1display.yaml +++ b/package/3bar_1display.yaml @@ -9,6 +9,7 @@ packages: base: !include base.yaml scripts: !include 3bar_1display_scripts.yaml + events: !include 3bar_1display_events.yaml esphome: on_boot: diff --git a/package/3bar_1display_events.yaml b/package/3bar_1display_events.yaml new file mode 100644 index 0000000..62cc03b --- /dev/null +++ b/package/3bar_1display_events.yaml @@ -0,0 +1,358 @@ +## Dynamically generated on xx-xx-xxxx +## Run python script again to update + +substitutions: + nr_of_pages: 2 + + # Dynamically generated list + display_events: + - "double_click page 0" + - "triple_click page 0" + - "hold page 0" + - "double_click page 1" + - "triple_click page 1" + - "hold page 1" + + # Dynamically generated list + button_events: + - "click page 0" + - "double_click page 0" + - "triple_click page 0" + - "hold page 0" + - "click page 1" + - "double_click page 1" + - "triple_click page 1" + - "hold page 1" + +event: + - platform: template + name: DISPLAY Button Left event + id: display_btn_left_event + device_class: button + event_types: ${display_events} + - platform: template + name: DISPLAY Button Right event + id: display_btn_right_event + device_class: button + event_types: ${display_events} + - platform: template + name: BAR1 Button Left event + id: bar1_btn_left_event + device_class: button + event_types: ${button_events} + - platform: template + name: BAR1 Button Right event + id: bar1_btn_right_event + device_class: button + event_types: ${button_events} + - platform: template + name: BAR2 Button Left event + id: bar2_btn_left_event + device_class: button + event_types: ${button_events} + - platform: template + name: BAR2 Button Right event + id: bar2_btn_right_event + device_class: button + event_types: ${button_events} + - platform: template + name: BAR3 Button Left event + id: bar3_btn_left_event + device_class: button + event_types: ${button_events} + - platform: template + name: BAR3 Button Right event + id: bar3_btn_right_event + device_class: button + event_types: ${button_events} + +binary_sensor: + - id: !extend main_display_btn_left + filters: + - delayed_off: 10ms + internal: true + on_multi_click: + - timing: + - ON for at most 300ms + - OFF for at least 0.5s + then: + - script.execute: prev_page + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.2s + then: + lambda: |- + id(display_btn_left_event).trigger("double_click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(display_btn_left_event).trigger("triple_click page " + std::to_string(id(actual_page))); + - timing: + - ON for 1s to 5s + - OFF for at least 0.5s + then: + lambda: |- + id(display_btn_left_event).trigger("hold page " + std::to_string(id(actual_page))); + + - id: !extend main_display_btn_right + filters: + - delayed_off: 10ms + internal: true + on_multi_click: + - timing: + - ON for at most 300ms + - OFF for at least 0.5s + then: + - script.execute: next_page + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.2s + then: + lambda: |- + id(display_btn_right_event).trigger("double_click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(display_btn_right_event).trigger("triple_click page " + std::to_string(id(actual_page))); + - timing: + - ON for 1s to 5s + - OFF for at least 0.5s + then: + lambda: |- + id(display_btn_right_event).trigger("hold page " + std::to_string(id(actual_page))); + + - id: !extend bar1_btn_left + filters: + - delayed_off: 10ms + internal: true + on_multi_click: + - timing: + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar1_btn_left_event).trigger("click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.2s + then: + lambda: |- + id(bar1_btn_left_event).trigger("double_click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar1_btn_left_event).trigger("triple_click page " + std::to_string(id(actual_page))); + - timing: + - ON for 1s to 5s + - OFF for at least 0.5s + then: + lambda: |- + id(bar1_btn_left_event).trigger("hold page " + std::to_string(id(actual_page))); + + + - id: !extend bar1_btn_right + filters: + - delayed_off: 10ms + internal: true + on_multi_click: + - timing: + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar1_btn_right_event).trigger("click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.2s + then: + lambda: |- + id(bar1_btn_right_event).trigger("double_click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar1_btn_right_event).trigger("triple_click page " + std::to_string(id(actual_page))); + - timing: + - ON for 1s to 5s + - OFF for at least 0.5s + then: + lambda: |- + id(bar1_btn_right_event).trigger("hold page " + std::to_string(id(actual_page))); + + + - id: !extend bar2_btn_left + filters: + - delayed_off: 10ms + internal: true + on_multi_click: + - timing: + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar2_btn_left_event).trigger("click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.2s + then: + lambda: |- + id(bar2_btn_left_event).trigger("double_click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar2_btn_left_event).trigger("triple_click page " + std::to_string(id(actual_page))); + - timing: + - ON for 1s to 5s + - OFF for at least 0.5s + then: + lambda: |- + id(bar2_btn_left_event).trigger("hold page " + std::to_string(id(actual_page))); + + - id: !extend bar2_btn_right + filters: + - delayed_off: 10ms + internal: true + on_multi_click: + - timing: + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar2_btn_right_event).trigger("click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.2s + then: + lambda: |- + id(bar2_btn_right_event).trigger("double_click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar2_btn_right_event).trigger("triple_click page " + std::to_string(id(actual_page))); + - timing: + - ON for 1s to 5s + - OFF for at least 0.5s + then: + lambda: |- + id(bar2_btn_right_event).trigger("hold page " + std::to_string(id(actual_page))); + + + - id: !extend bar3_btn_left + filters: + - delayed_off: 10ms + internal: true + on_multi_click: + - timing: + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar3_btn_left_event).trigger("click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.2s + then: + lambda: |- + id(bar3_btn_left_event).trigger("double_click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar3_btn_left_event).trigger("triple_click page " + std::to_string(id(actual_page))); + - timing: + - ON for 1s to 5s + - OFF for at least 0.5s + then: + lambda: |- + id(bar3_btn_left_event).trigger("hold page " + std::to_string(id(actual_page))); + + + - id: !extend bar3_btn_right + filters: + - delayed_off: 10ms + internal: true + on_multi_click: + - timing: + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar3_btn_right_event).trigger("click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.2s + then: + lambda: |- + id(bar3_btn_right_event).trigger("double_click page " + std::to_string(id(actual_page))); + - timing: + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at most 0.5s + - ON for at most 300ms + - OFF for at least 0.5s + then: + lambda: |- + id(bar3_btn_right_event).trigger("triple_click page " + std::to_string(id(actual_page))); + - timing: + - ON for 1s to 5s + - OFF for at least 0.5s + then: + lambda: |- + id(bar3_btn_right_event).trigger("hold page " + std::to_string(id(actual_page))); diff --git a/package/base.yaml b/package/base.yaml index d7f0c2f..de8b166 100644 --- a/package/base.yaml +++ b/package/base.yaml @@ -37,8 +37,8 @@ spi: mosi_pin: GPIO5 substitutions: - nr_of_pages: '"1"' - page_names: '{"Page 1"}' + nr_of_pages: '"2"' + page_names: '{"Page 1", "Page 2"}' globals: - id: nr_of_pages @@ -117,6 +117,7 @@ sensor: icon: "mdi:order-numeric-ascending" id: active_page_id_ha update_interval: never + accuracy_decimals: 0 text_sensor: - platform: template