Dynamically generate events file

This commit is contained in:
2026-05-11 16:28:56 +02:00
parent a75dfd0ed3
commit 018555268a
3 changed files with 1064 additions and 352 deletions
@@ -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.2s
then:
- script.execute: prev_page
- timing:
- ON for at most 300ms
- OFF for at most 0.2s
- 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.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
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.2s
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.2s
then:
- script.execute: next_page
- timing:
- ON for at most 300ms
- OFF for at most 0.2s
- 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.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
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.2s
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.2s
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.2s
- 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.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
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.2s
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.2s
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.2s
- 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.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
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.2s
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.2s
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.2s
- 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.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
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.2s
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.2s
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.2s
- 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.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
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.2s
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.2s
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.2s
- 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.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
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.2s
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.2s
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.2s
- 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.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
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.2s
then:
lambda: |-
id(bar3_btn_right_event).trigger("hold page " + std::to_string(id(actual_page)));
+162
View File
@@ -0,0 +1,162 @@
import yaml
# CONFIGURATION
NR_OF_PAGES = 3
INCLUDE_DISPLAY_EXTRA = True # Enable Double, Triple, Hold for main display buttons
LED_CONFIRMATION = True # Flash LED on press
FILENAME = "3bar_1display_events.yaml"
# --- ESPHome YAML Handling Fixes ---
class ESPHomeExtend:
def __init__(self, value): self.value = value
class ESPHomeLambda:
def __init__(self, value): self.value = value
class LiteralString(str): pass
def represent_extend(dumper, data):
return dumper.represent_scalar('!extend', data.value)
def represent_lambda(dumper, data):
# Ensures !lambda is followed by a quoted string or block for ESPHome compatibility
return dumper.represent_scalar('!lambda', data.value, style='"')
def represent_literal(dumper, data):
return dumper.represent_scalar('tag:yaml.org,2002:str', data, style='|')
yaml.add_representer(ESPHomeExtend, represent_extend)
yaml.add_representer(ESPHomeLambda, represent_lambda)
yaml.add_representer(LiteralString, represent_literal)
# -----------------------------------
def generate():
# 1. Define event lists for substitutions
base_types = ["click", "double_click", "triple_click", "hold"]
display_types = [] + (base_types[1:] if INCLUDE_DISPLAY_EXTRA else [])
display_events = []
button_events = []
for p in range(NR_OF_PAGES):
display_events.extend([f"{t} page {p}" for t in display_types])
button_events.extend([f"{t} page {p}" for t in base_types])
data = {
"substitutions": {
"nr_of_pages": str(NR_OF_PAGES),
"display_events": display_events,
"button_events": button_events
},
"script": [{
"id": "trigger_with_feedback",
"parameters": {
"event_id": "esphome::template_::TemplateEvent*",
"event_msg": "std::string",
"led_id": "light::LightState*",
"r": "float", "g": "float", "b": "float"
},
"then": [
{"lambda": "event_id->trigger(event_msg);"},
{"if": {
"condition": {"lambda": "return led_id != nullptr;"},
"then": [{"lambda": LiteralString(
"auto call = led_id->make_call();\n"
"call.set_state(true);\n"
"call.set_rgb(r, g, b);\n"
"call.set_brightness(1.0);\n"
"call.set_flash_length(200); // Returns to previous state automatically\n"
"call.perform();"
)}]
}}
]
}],
"event": []
}
# 2. Event Entities
buttons = [
("DISPLAY Button Left", "display_btn_left_event", "${display_events}"),
("DISPLAY Button Right", "display_btn_right_event", "${display_events}"),
("BAR1 Button Left", "bar1_btn_left_event", "${button_events}"),
("BAR1 Button Right", "bar1_btn_right_event", "${button_events}"),
("BAR2 Button Left", "bar2_btn_left_event", "${button_events}"),
("BAR2 Button Right", "bar2_btn_right_event", "${button_events}"),
("BAR3 Button Left", "bar3_btn_left_event", "${button_events}"),
("BAR3 Button Right", "bar3_btn_right_event", "${button_events}"),
]
for name, eid, types in buttons:
data["event"].append({
"platform": "template", "name": name, "id": eid,
"device_class": "button", "event_types": types
})
# 3. Binary Sensor Extensions
data["binary_sensor"] = []
triggers = {
"click": (0.0, 1.0, 0.0), # Green
"double_click": (0.0, 0.0, 1.0), # Blue
"triple_click": (1.0, 0.0, 1.0), # Purple
"hold": (1.0, 0.5, 0.0) # Orange
}
btn_configs = [
("main_display_btn_left", "display_btn_left_event", None, "prev_page"),
("main_display_btn_right", "display_btn_right_event", None, "next_page"),
("bar1_btn_left", "bar1_btn_left_event", "bar1_left_rgb_front", None),
("bar1_btn_right", "bar1_btn_right_event", "bar1_right_rgb_front", None),
("bar2_btn_left", "bar2_btn_left_event", "bar2_left_rgb_front", None),
("bar2_btn_right", "bar2_btn_right_event", "bar2_right_rgb_front", None),
("bar3_btn_left", "bar3_btn_left_event", "bar3_left_rgb_front", None),
("bar3_btn_right", "bar3_btn_right_event", "bar3_right_rgb_front", None),
]
for btn_id, event_id, led_id, page_script in btn_configs:
sensor = {
"id": ESPHomeExtend(btn_id),
"filters": [{"delayed_off": "10ms"}],
"internal": True,
"on_multi_click": []
}
is_display = "main_display" in btn_id
for t_name, color in triggers.items():
if is_display and t_name != "click" and not INCLUDE_DISPLAY_EXTRA:
continue
multi_click = {"timing": []}
if t_name == "click":
multi_click["timing"] = ["ON for at most 300ms", "OFF for at least 0.2s"]
elif t_name == "double_click":
multi_click["timing"] = ["ON for at most 300ms", "OFF for at most 0.2s", "ON for at most 300ms", "OFF for at least 0.2s"]
elif t_name == "triple_click":
multi_click["timing"] = ["ON for at most 300ms", "OFF for at most 0.2s", "ON for at most 300ms", "OFF for at most 0.2s", "ON for at most 300ms", "OFF for at least 0.2s"]
elif t_name == "hold":
multi_click["timing"] = ["ON for at least 1s", "OFF for at least 0.2s"]
actions = []
if t_name == "click" and page_script:
actions.append({"script.execute": page_script})
else:
# The Feedback call with proper ESPHome formatting
actions.append({
"script.execute": {
"id": "trigger_with_feedback",
"event_id": event_id,
"event_msg": ESPHomeLambda(f'return "{t_name} page " + std::to_string(id(actual_page));'),
"led_id": led_id if (led_id and LED_CONFIRMATION) else ESPHomeLambda("return nullptr;"),
"r": color[0], "g": color[1], "b": color[2]
}
})
multi_click["then"] = actions
sensor["on_multi_click"].append(multi_click)
data["binary_sensor"].append(sensor)
# 4. Write output
with open(FILENAME, "w") as f:
f.write("## Dynamically generated event configuration\n")
f.write("## Do not edit manually - run generator script to update\n\n")
yaml.dump(data, f, sort_keys=False, default_flow_style=False)
print(f"Generated {FILENAME} successfully.")
if __name__ == "__main__":
generate()
+544 -352
View File
@@ -1,358 +1,550 @@
## Dynamically generated on xx-xx-xxxx ## Dynamically generated event configuration
## Run python script again to update ## Do not edit manually - run generator script to update
substitutions: substitutions:
nr_of_pages: 2 nr_of_pages: '3'
# Dynamically generated list
display_events: display_events:
- "double_click page 0" - double_click page 0
- "triple_click page 0" - triple_click page 0
- "hold page 0" - hold page 0
- "double_click page 1" - double_click page 1
- "triple_click page 1" - triple_click page 1
- "hold page 1" - hold page 1
- double_click page 2
# Dynamically generated list - triple_click page 2
- hold page 2
button_events: button_events:
- "click page 0" - click page 0
- "double_click page 0" - double_click page 0
- "triple_click page 0" - triple_click page 0
- "hold page 0" - hold page 0
- "click page 1" - click page 1
- "double_click page 1" - double_click page 1
- "triple_click page 1" - triple_click page 1
- "hold page 1" - hold page 1
- click page 2
- double_click page 2
- triple_click page 2
- hold page 2
script:
- id: trigger_with_feedback
parameters:
event_id: esphome::template_::TemplateEvent*
event_msg: std::string
led_id: light::LightState*
r: float
g: float
b: float
then:
- lambda: event_id->trigger(event_msg);
- if:
condition:
lambda: return led_id != nullptr;
then:
- lambda: |-
auto call = led_id->make_call();
call.set_state(true);
call.set_rgb(r, g, b);
call.set_brightness(1.0);
call.set_flash_length(200); // Returns to previous state automatically
call.perform();
event: event:
- platform: template - platform: template
name: DISPLAY Button Left event name: DISPLAY Button Left
id: display_btn_left_event id: display_btn_left_event
device_class: button device_class: button
event_types: ${display_events} event_types: ${display_events}
- platform: template - platform: template
name: DISPLAY Button Right event name: DISPLAY Button Right
id: display_btn_right_event id: display_btn_right_event
device_class: button device_class: button
event_types: ${display_events} event_types: ${display_events}
- platform: template - platform: template
name: BAR1 Button Left event name: BAR1 Button Left
id: bar1_btn_left_event id: bar1_btn_left_event
device_class: button device_class: button
event_types: ${button_events} event_types: ${button_events}
- platform: template - platform: template
name: BAR1 Button Right event name: BAR1 Button Right
id: bar1_btn_right_event id: bar1_btn_right_event
device_class: button device_class: button
event_types: ${button_events} event_types: ${button_events}
- platform: template - platform: template
name: BAR2 Button Left event name: BAR2 Button Left
id: bar2_btn_left_event id: bar2_btn_left_event
device_class: button device_class: button
event_types: ${button_events} event_types: ${button_events}
- platform: template - platform: template
name: BAR2 Button Right event name: BAR2 Button Right
id: bar2_btn_right_event id: bar2_btn_right_event
device_class: button device_class: button
event_types: ${button_events} event_types: ${button_events}
- platform: template - platform: template
name: BAR3 Button Left event name: BAR3 Button Left
id: bar3_btn_left_event id: bar3_btn_left_event
device_class: button device_class: button
event_types: ${button_events} event_types: ${button_events}
- platform: template - platform: template
name: BAR3 Button Right event name: BAR3 Button Right
id: bar3_btn_right_event id: bar3_btn_right_event
device_class: button device_class: button
event_types: ${button_events} event_types: ${button_events}
binary_sensor: binary_sensor:
- id: !extend main_display_btn_left - id: !extend 'main_display_btn_left'
filters: filters:
- delayed_off: 10ms - delayed_off: 10ms
internal: true internal: true
on_multi_click: on_multi_click:
- timing: - timing:
- ON for at most 300ms - ON for at most 300ms
- OFF for at least 0.2s - OFF for at least 0.2s
then: then:
- script.execute: prev_page - script.execute: prev_page
- timing: - timing:
- ON for at most 300ms - ON for at most 300ms
- OFF for at most 0.2s - OFF for at most 0.2s
- ON for at most 300ms - ON for at most 300ms
- OFF for at least 0.2s - OFF for at least 0.2s
then: then:
lambda: |- - script.execute:
id(display_btn_left_event).trigger("double_click page " + std::to_string(id(actual_page))); id: trigger_with_feedback
- timing: event_id: display_btn_left_event
- ON for at most 300ms event_msg: !lambda "return \"double_click page \" + std::to_string(id(actual_page));"
- OFF for at most 0.2s led_id: !lambda "return nullptr;"
- ON for at most 300ms r: 0.0
- OFF for at most 0.2s g: 0.0
- ON for at most 300ms b: 1.0
- OFF for at least 0.2s - timing:
then: - ON for at most 300ms
lambda: |- - OFF for at most 0.2s
id(display_btn_left_event).trigger("triple_click page " + std::to_string(id(actual_page))); - ON for at most 300ms
- timing: - OFF for at most 0.2s
- ON for 1s to 5s - ON for at most 300ms
- OFF for at least 0.2s - OFF for at least 0.2s
then: then:
lambda: |- - script.execute:
id(display_btn_left_event).trigger("hold page " + std::to_string(id(actual_page))); id: trigger_with_feedback
event_id: display_btn_left_event
- id: !extend main_display_btn_right event_msg: !lambda "return \"triple_click page \" + std::to_string(id(actual_page));"
filters: led_id: !lambda "return nullptr;"
- delayed_off: 10ms r: 1.0
internal: true g: 0.0
on_multi_click: b: 1.0
- timing: - timing:
- ON for at most 300ms - ON for at least 1s
- OFF for at least 0.2s - OFF for at least 0.2s
then: then:
- script.execute: next_page - script.execute:
- timing: id: trigger_with_feedback
- ON for at most 300ms event_id: display_btn_left_event
- OFF for at most 0.2s event_msg: !lambda "return \"hold page \" + std::to_string(id(actual_page));"
- ON for at most 300ms led_id: !lambda "return nullptr;"
- OFF for at least 0.2s r: 1.0
then: g: 0.5
lambda: |- b: 0.0
id(display_btn_right_event).trigger("double_click page " + std::to_string(id(actual_page))); - id: !extend 'main_display_btn_right'
- timing: filters:
- ON for at most 300ms - delayed_off: 10ms
- OFF for at most 0.2s internal: true
- ON for at most 300ms on_multi_click:
- OFF for at most 0.2s - timing:
- ON for at most 300ms - ON for at most 300ms
- OFF for at least 0.2s - OFF for at least 0.2s
then: then:
lambda: |- - script.execute: next_page
id(display_btn_right_event).trigger("triple_click page " + std::to_string(id(actual_page))); - timing:
- timing: - ON for at most 300ms
- ON for 1s to 5s - OFF for at most 0.2s
- OFF for at least 0.2s - ON for at most 300ms
then: - OFF for at least 0.2s
lambda: |- then:
id(display_btn_right_event).trigger("hold page " + std::to_string(id(actual_page))); - script.execute:
id: trigger_with_feedback
- id: !extend bar1_btn_left event_id: display_btn_right_event
filters: event_msg: !lambda "return \"double_click page \" + std::to_string(id(actual_page));"
- delayed_off: 10ms led_id: !lambda "return nullptr;"
internal: true r: 0.0
on_multi_click: g: 0.0
- timing: b: 1.0
- ON for at most 300ms - timing:
- OFF for at least 0.2s - ON for at most 300ms
then: - OFF for at most 0.2s
lambda: |- - ON for at most 300ms
id(bar1_btn_left_event).trigger("click page " + std::to_string(id(actual_page))); - OFF for at most 0.2s
- timing: - ON for at most 300ms
- ON for at most 300ms - OFF for at least 0.2s
- OFF for at most 0.2s then:
- ON for at most 300ms - script.execute:
- OFF for at least 0.2s id: trigger_with_feedback
then: event_id: display_btn_right_event
lambda: |- event_msg: !lambda "return \"triple_click page \" + std::to_string(id(actual_page));"
id(bar1_btn_left_event).trigger("double_click page " + std::to_string(id(actual_page))); led_id: !lambda "return nullptr;"
- timing: r: 1.0
- ON for at most 300ms g: 0.0
- OFF for at most 0.2s b: 1.0
- ON for at most 300ms - timing:
- OFF for at most 0.2s - ON for at least 1s
- ON for at most 300ms - OFF for at least 0.2s
- OFF for at least 0.2s then:
then: - script.execute:
lambda: |- id: trigger_with_feedback
id(bar1_btn_left_event).trigger("triple_click page " + std::to_string(id(actual_page))); event_id: display_btn_right_event
- timing: event_msg: !lambda "return \"hold page \" + std::to_string(id(actual_page));"
- ON for 1s to 5s led_id: !lambda "return nullptr;"
- OFF for at least 0.2s r: 1.0
then: g: 0.5
lambda: |- b: 0.0
id(bar1_btn_left_event).trigger("hold page " + std::to_string(id(actual_page))); - id: !extend 'bar1_btn_left'
filters:
- delayed_off: 10ms
- id: !extend bar1_btn_right internal: true
filters: on_multi_click:
- delayed_off: 10ms - timing:
internal: true - ON for at most 300ms
on_multi_click: - OFF for at least 0.2s
- timing: then:
- ON for at most 300ms - script.execute:
- OFF for at least 0.2s id: trigger_with_feedback
then: event_id: bar1_btn_left_event
lambda: |- event_msg: !lambda "return \"click page \" + std::to_string(id(actual_page));"
id(bar1_btn_right_event).trigger("click page " + std::to_string(id(actual_page))); led_id: bar1_left_rgb_front
- timing: r: 0.0
- ON for at most 300ms g: 1.0
- OFF for at most 0.2s b: 0.0
- ON for at most 300ms - timing:
- OFF for at least 0.2s - ON for at most 300ms
then: - OFF for at most 0.2s
lambda: |- - ON for at most 300ms
id(bar1_btn_right_event).trigger("double_click page " + std::to_string(id(actual_page))); - OFF for at least 0.2s
- timing: then:
- ON for at most 300ms - script.execute:
- OFF for at most 0.2s id: trigger_with_feedback
- ON for at most 300ms event_id: bar1_btn_left_event
- OFF for at most 0.2s event_msg: !lambda "return \"double_click page \" + std::to_string(id(actual_page));"
- ON for at most 300ms led_id: bar1_left_rgb_front
- OFF for at least 0.2s r: 0.0
then: g: 0.0
lambda: |- b: 1.0
id(bar1_btn_right_event).trigger("triple_click page " + std::to_string(id(actual_page))); - timing:
- timing: - ON for at most 300ms
- ON for 1s to 5s - OFF for at most 0.2s
- OFF for at least 0.2s - ON for at most 300ms
then: - OFF for at most 0.2s
lambda: |- - ON for at most 300ms
id(bar1_btn_right_event).trigger("hold page " + std::to_string(id(actual_page))); - OFF for at least 0.2s
then:
- script.execute:
- id: !extend bar2_btn_left id: trigger_with_feedback
filters: event_id: bar1_btn_left_event
- delayed_off: 10ms event_msg: !lambda "return \"triple_click page \" + std::to_string(id(actual_page));"
internal: true led_id: bar1_left_rgb_front
on_multi_click: r: 1.0
- timing: g: 0.0
- ON for at most 300ms b: 1.0
- OFF for at least 0.2s - timing:
then: - ON for at least 1s
lambda: |- - OFF for at least 0.2s
id(bar2_btn_left_event).trigger("click page " + std::to_string(id(actual_page))); then:
- timing: - script.execute:
- ON for at most 300ms id: trigger_with_feedback
- OFF for at most 0.2s event_id: bar1_btn_left_event
- ON for at most 300ms event_msg: !lambda "return \"hold page \" + std::to_string(id(actual_page));"
- OFF for at least 0.2s led_id: bar1_left_rgb_front
then: r: 1.0
lambda: |- g: 0.5
id(bar2_btn_left_event).trigger("double_click page " + std::to_string(id(actual_page))); b: 0.0
- timing: - id: !extend 'bar1_btn_right'
- ON for at most 300ms filters:
- OFF for at most 0.2s - delayed_off: 10ms
- ON for at most 300ms internal: true
- OFF for at most 0.2s on_multi_click:
- ON for at most 300ms - timing:
- OFF for at least 0.2s - ON for at most 300ms
then: - OFF for at least 0.2s
lambda: |- then:
id(bar2_btn_left_event).trigger("triple_click page " + std::to_string(id(actual_page))); - script.execute:
- timing: id: trigger_with_feedback
- ON for 1s to 5s event_id: bar1_btn_right_event
- OFF for at least 0.2s event_msg: !lambda "return \"click page \" + std::to_string(id(actual_page));"
then: led_id: bar1_right_rgb_front
lambda: |- r: 0.0
id(bar2_btn_left_event).trigger("hold page " + std::to_string(id(actual_page))); g: 1.0
b: 0.0
- id: !extend bar2_btn_right - timing:
filters: - ON for at most 300ms
- delayed_off: 10ms - OFF for at most 0.2s
internal: true - ON for at most 300ms
on_multi_click: - OFF for at least 0.2s
- timing: then:
- ON for at most 300ms - script.execute:
- OFF for at least 0.2s id: trigger_with_feedback
then: event_id: bar1_btn_right_event
lambda: |- event_msg: !lambda "return \"double_click page \" + std::to_string(id(actual_page));"
id(bar2_btn_right_event).trigger("click page " + std::to_string(id(actual_page))); led_id: bar1_right_rgb_front
- timing: r: 0.0
- ON for at most 300ms g: 0.0
- OFF for at most 0.2s b: 1.0
- ON for at most 300ms - timing:
- OFF for at least 0.2s - ON for at most 300ms
then: - OFF for at most 0.2s
lambda: |- - ON for at most 300ms
id(bar2_btn_right_event).trigger("double_click page " + std::to_string(id(actual_page))); - OFF for at most 0.2s
- timing: - ON for at most 300ms
- ON for at most 300ms - OFF for at least 0.2s
- OFF for at most 0.2s then:
- ON for at most 300ms - script.execute:
- OFF for at most 0.2s id: trigger_with_feedback
- ON for at most 300ms event_id: bar1_btn_right_event
- OFF for at least 0.2s event_msg: !lambda "return \"triple_click page \" + std::to_string(id(actual_page));"
then: led_id: bar1_right_rgb_front
lambda: |- r: 1.0
id(bar2_btn_right_event).trigger("triple_click page " + std::to_string(id(actual_page))); g: 0.0
- timing: b: 1.0
- ON for 1s to 5s - timing:
- OFF for at least 0.2s - ON for at least 1s
then: - OFF for at least 0.2s
lambda: |- then:
id(bar2_btn_right_event).trigger("hold page " + std::to_string(id(actual_page))); - script.execute:
id: trigger_with_feedback
event_id: bar1_btn_right_event
- id: !extend bar3_btn_left event_msg: !lambda "return \"hold page \" + std::to_string(id(actual_page));"
filters: led_id: bar1_right_rgb_front
- delayed_off: 10ms r: 1.0
internal: true g: 0.5
on_multi_click: b: 0.0
- timing: - id: !extend 'bar2_btn_left'
- ON for at most 300ms filters:
- OFF for at least 0.2s - delayed_off: 10ms
then: internal: true
lambda: |- on_multi_click:
id(bar3_btn_left_event).trigger("click page " + std::to_string(id(actual_page))); - timing:
- timing: - ON for at most 300ms
- ON for at most 300ms - OFF for at least 0.2s
- OFF for at most 0.2s then:
- ON for at most 300ms - script.execute:
- OFF for at least 0.2s id: trigger_with_feedback
then: event_id: bar2_btn_left_event
lambda: |- event_msg: !lambda "return \"click page \" + std::to_string(id(actual_page));"
id(bar3_btn_left_event).trigger("double_click page " + std::to_string(id(actual_page))); led_id: bar2_left_rgb_front
- timing: r: 0.0
- ON for at most 300ms g: 1.0
- OFF for at most 0.2s b: 0.0
- ON for at most 300ms - timing:
- OFF for at most 0.2s - ON for at most 300ms
- ON for at most 300ms - OFF for at most 0.2s
- OFF for at least 0.2s - ON for at most 300ms
then: - OFF for at least 0.2s
lambda: |- then:
id(bar3_btn_left_event).trigger("triple_click page " + std::to_string(id(actual_page))); - script.execute:
- timing: id: trigger_with_feedback
- ON for 1s to 5s event_id: bar2_btn_left_event
- OFF for at least 0.2s event_msg: !lambda "return \"double_click page \" + std::to_string(id(actual_page));"
then: led_id: bar2_left_rgb_front
lambda: |- r: 0.0
id(bar3_btn_left_event).trigger("hold page " + std::to_string(id(actual_page))); g: 0.0
b: 1.0
- timing:
- id: !extend bar3_btn_right - ON for at most 300ms
filters: - OFF for at most 0.2s
- delayed_off: 10ms - ON for at most 300ms
internal: true - OFF for at most 0.2s
on_multi_click: - ON for at most 300ms
- timing: - OFF for at least 0.2s
- ON for at most 300ms then:
- OFF for at least 0.2s - script.execute:
then: id: trigger_with_feedback
lambda: |- event_id: bar2_btn_left_event
id(bar3_btn_right_event).trigger("click page " + std::to_string(id(actual_page))); event_msg: !lambda "return \"triple_click page \" + std::to_string(id(actual_page));"
- timing: led_id: bar2_left_rgb_front
- ON for at most 300ms r: 1.0
- OFF for at most 0.2s g: 0.0
- ON for at most 300ms b: 1.0
- OFF for at least 0.2s - timing:
then: - ON for at least 1s
lambda: |- - OFF for at least 0.2s
id(bar3_btn_right_event).trigger("double_click page " + std::to_string(id(actual_page))); then:
- timing: - script.execute:
- ON for at most 300ms id: trigger_with_feedback
- OFF for at most 0.2s event_id: bar2_btn_left_event
- ON for at most 300ms event_msg: !lambda "return \"hold page \" + std::to_string(id(actual_page));"
- OFF for at most 0.2s led_id: bar2_left_rgb_front
- ON for at most 300ms r: 1.0
- OFF for at least 0.2s g: 0.5
then: b: 0.0
lambda: |- - id: !extend 'bar2_btn_right'
id(bar3_btn_right_event).trigger("triple_click page " + std::to_string(id(actual_page))); filters:
- timing: - delayed_off: 10ms
- ON for 1s to 5s internal: true
- OFF for at least 0.2s on_multi_click:
then: - timing:
lambda: |- - ON for at most 300ms
id(bar3_btn_right_event).trigger("hold page " + std::to_string(id(actual_page))); - OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar2_btn_right_event
event_msg: !lambda "return \"click page \" + std::to_string(id(actual_page));"
led_id: bar2_right_rgb_front
r: 0.0
g: 1.0
b: 0.0
- timing:
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar2_btn_right_event
event_msg: !lambda "return \"double_click page \" + std::to_string(id(actual_page));"
led_id: bar2_right_rgb_front
r: 0.0
g: 0.0
b: 1.0
- timing:
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar2_btn_right_event
event_msg: !lambda "return \"triple_click page \" + std::to_string(id(actual_page));"
led_id: bar2_right_rgb_front
r: 1.0
g: 0.0
b: 1.0
- timing:
- ON for at least 1s
- OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar2_btn_right_event
event_msg: !lambda "return \"hold page \" + std::to_string(id(actual_page));"
led_id: bar2_right_rgb_front
r: 1.0
g: 0.5
b: 0.0
- 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.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar3_btn_left_event
event_msg: !lambda "return \"click page \" + std::to_string(id(actual_page));"
led_id: bar3_left_rgb_front
r: 0.0
g: 1.0
b: 0.0
- timing:
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar3_btn_left_event
event_msg: !lambda "return \"double_click page \" + std::to_string(id(actual_page));"
led_id: bar3_left_rgb_front
r: 0.0
g: 0.0
b: 1.0
- timing:
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar3_btn_left_event
event_msg: !lambda "return \"triple_click page \" + std::to_string(id(actual_page));"
led_id: bar3_left_rgb_front
r: 1.0
g: 0.0
b: 1.0
- timing:
- ON for at least 1s
- OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar3_btn_left_event
event_msg: !lambda "return \"hold page \" + std::to_string(id(actual_page));"
led_id: bar3_left_rgb_front
r: 1.0
g: 0.5
b: 0.0
- 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.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar3_btn_right_event
event_msg: !lambda "return \"click page \" + std::to_string(id(actual_page));"
led_id: bar3_right_rgb_front
r: 0.0
g: 1.0
b: 0.0
- timing:
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar3_btn_right_event
event_msg: !lambda "return \"double_click page \" + std::to_string(id(actual_page));"
led_id: bar3_right_rgb_front
r: 0.0
g: 0.0
b: 1.0
- timing:
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at most 0.2s
- ON for at most 300ms
- OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar3_btn_right_event
event_msg: !lambda "return \"triple_click page \" + std::to_string(id(actual_page));"
led_id: bar3_right_rgb_front
r: 1.0
g: 0.0
b: 1.0
- timing:
- ON for at least 1s
- OFF for at least 0.2s
then:
- script.execute:
id: trigger_with_feedback
event_id: bar3_btn_right_event
event_msg: !lambda "return \"hold page \" + std::to_string(id(actual_page));"
led_id: bar3_right_rgb_front
r: 1.0
g: 0.5
b: 0.0