diff --git a/lounge-switch.yaml b/lounge-switch.yaml index 7c765d8..178088c 100644 --- a/lounge-switch.yaml +++ b/lounge-switch.yaml @@ -15,36 +15,132 @@ api: ota: binary_sensor: + - platform: gpio pin: number: GPIO0 mode: INPUT_PULLUP inverted: True - name: "Lounge Touchpad 1" + filters: + - delayed_on: 30ms + - delayed_off: 30ms + internal: True + on_multi_click: + # Single + - timing: + - ON for at most 1s + - OFF for at least 0.5s + then: + - text_sensor.template.publish: + id: louge_button_1 + state: !lambda 'return "single";' + # Double + - timing: + - ON for at most 1s + - OFF for at most 1s + - ON for at most 1s + - OFF for at least 0.2s + then: + - text_sensor.template.publish: + id: louge_button_1 + state: !lambda 'return "double";' + # Hold + - timing: + - ON for 1s to 3s + - OFF for at least 0.5s + then: + - text_sensor.template.publish: + id: louge_button_1 + state: !lambda 'return "hold";' + name: "Lounge Raw Touchpad 1" on_press: then: - output.turn_on: blue_led on_release: then: - output.turn_off: blue_led + - platform: gpio pin: number: GPIO9 mode: INPUT_PULLUP inverted: True - name: "Lounge Touchpad 2" + filters: + - delayed_on: 30ms + - delayed_off: 30ms + internal: True + on_multi_click: + # Single + - timing: + - ON for at most 1s + - OFF for at least 0.5s + then: + - text_sensor.template.publish: + id: louge_button_2 + state: !lambda 'return "single";' + # Double + - timing: + - ON for at most 1s + - OFF for at most 1s + - ON for at most 1s + - OFF for at least 0.2s + then: + - text_sensor.template.publish: + id: louge_button_2 + state: !lambda 'return "double";' + # Hold + - timing: + - ON for 1s to 3s + - OFF for at least 0.5s + then: + - text_sensor.template.publish: + id: louge_button_2 + state: !lambda 'return "hold";' + name: "Lounge Raw Touchpad 2" on_press: then: - output.turn_on: blue_led on_release: then: - output.turn_off: blue_led + - platform: gpio pin: number: GPIO10 mode: INPUT_PULLUP inverted: True - name: "Lounge Touchpad 3" + name: "Lounge Raw Touchpad 3" + filters: + - delayed_on: 30ms + - delayed_off: 30ms + internal: True + on_multi_click: + # Single + - timing: + - ON for at most 1s + - OFF for at least 0.5s + then: + - text_sensor.template.publish: + id: louge_button_3 + state: !lambda 'return "single";' + # Double + - timing: + - ON for at most 1s + - OFF for at most 1s + - ON for at most 1s + - OFF for at least 0.2s + then: + - text_sensor.template.publish: + id: louge_button_3 + state: !lambda 'return "double";' + # Hold + - timing: + - ON for 1s to 3s + - OFF for at least 0.5s + then: + - text_sensor.template.publish: + id: louge_button_3 + state: !lambda 'return "hold";' on_press: then: - output.turn_on: blue_led @@ -58,12 +154,15 @@ switch: - platform: gpio name: "Lounge Relay 1" pin: GPIO12 + restore_mode: ALWAYS_OFF - platform: gpio name: "Lounge Relay 2" pin: GPIO5 + restore_mode: ALWAYS_ON - platform: gpio name: "Lounge Relay 3" pin: GPIO4 + restore_mode: ALWAYS_OFF output: # Register the blue LED as a dimmable output .... @@ -72,8 +171,57 @@ output: pin: GPIO13 inverted: True -#light: -# # ... and then make a light out of it. -# - platform: monochromatic -# name: "Bedroom switch light" -# output: blue_led +# This sensor is published to homeassistant with the value: +# * single +# * double +# * hold +# This can be used to trigger automations by type "state" +text_sensor: + - platform: template + name: "Lounge Touchpad 1" + id: louge_button_1 + icon: "mdi:toggle-switch" + on_value: + then: + - if: + condition: + text_sensor.state: + id: louge_button_1 + state: "" + else: + - delay: 20ms + - text_sensor.template.publish: + id: louge_button_1 + state: !lambda 'return "";' + - platform: template + name: "Lounge Touchpad 2" + id: louge_button_2 + icon: "mdi:toggle-switch" + on_value: + then: + - if: + condition: + text_sensor.state: + id: louge_button_2 + state: "" + else: + - delay: 20ms + - text_sensor.template.publish: + id: louge_button_2 + state: !lambda 'return "";' + - platform: template + name: "Lounge Touchpad 3" + id: louge_button_3 + icon: "mdi:toggle-switch" + on_value: + then: + - if: + condition: + text_sensor.state: + id: louge_button_3 + state: "" + else: + - delay: 20ms + - text_sensor.template.publish: + id: louge_button_3 + state: !lambda 'return "";'