blueprint:
  name: "HASPone activates a selected page after a specified period of inactivity"
  description: |

    ## Blueprint Version: `1.05.00`

    # Description

    Activates a selected page after a specified period of inactivity.

    ## HASPone Page and Button Reference

    The images below show each available HASPone page along with the layout of available button objects.

    <details>

    | Page 0 | Pages 1-3 | Pages 4-5 |
    |--------|-----------|-----------|
    | ![Page 0](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p0_Init_Screen.png) | ![Pages 1-3](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p1-p3_4buttons.png) | ![Pages 4-5](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p4-p5_3sliders.png) |

    | Page 6 | Page 7 | Page 8 |
    |--------|--------|--------|
    | ![Page 6](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p6_8buttons.png) | ![Page 7](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p7_12buttons.png) | ![Page 8](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p8_5buttons+1slider.png) |

    | Page 9 | Page 10 | Page 11 |
    |--------|---------|---------|
    | ![Page 9](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p9_9buttons.png) | ![Page 10](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p10_5buttons.png) | ![Page 11](https://raw.githubusercontent.com/HASwitchPlate/HASPone/main/images/NextionUI_p11_1button+1slider.png)

    </details>

  domain: automation
  input:
    haspdevice:
      name: "HASPone Device"
      description: "Select the HASPone device"
      selector:
        device:
          integration: mqtt
          manufacturer: "HASwitchPlate"
          model: "HASPone v1.0.0"
    targetpage:
      name: "Page to activate"
      description: "Select a destination page for this button to activate."
      default: 1
      selector:
        number:
          min: 1
          max: 11
          mode: slider
          unit_of_measurement: page
    idletime:
      name: "Idle Time"
      description: "Idle time in seconds"
      default: 30
      selector:
        number:
          min: 5
          max: 900
          step: 5
          mode: slider
          unit_of_measurement: seconds

mode: restart
max_exceeded: silent

variables:
  haspdevice: !input haspdevice
  haspname: >-
    {%- for entity in device_entities(haspdevice) -%}
      {%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
        {{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
      {%- endif -%}
    {%- endfor -%}
  targetpage: !input targetpage
  idletime: !input idletime
  pagecommandtopic: '{{ "hasp/" ~ haspname ~ "/command/page" }}'
  activepage: >-
    {%- set activepage = namespace() -%}
    {%- for entity in device_entities(haspdevice) -%}
      {%- if entity|regex_search("^number\..*_active_page(?:_\d+|)$") -%}
        {%- set activepage.entity=entity -%}
      {%- endif -%}
    {%- endfor -%}
    {{ states(activepage.entity) | int(default=-1) }}

trigger_variables:
  haspdevice: !input haspdevice
  haspname: >-
    {%- for entity in device_entities(haspdevice) -%}
      {%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
        {{- entity|regex_replace(find="^sensor\.", replace="", ignorecase=true)|regex_replace(find="_sensor(?:_\d+|)$", replace="", ignorecase=true) -}}
      {%- endif -%}
    {%- endfor -%}
  haspsensor: >-
    {%- for entity in device_entities(haspdevice) -%}
      {%- if entity|regex_search("^sensor\..+_sensor(?:_\d+|)$") -%}
        {{ entity }}
      {%- endif -%}
    {%- endfor -%}
  jsontopic: '{{ "hasp/" ~ haspname ~ "/state/json" }}'
  targetpage: !input targetpage
  pagejsonpayload: '{"event":"page","value":{{targetpage}}}'

trigger:
  - platform: mqtt
    topic: "{{jsontopic}}"

condition:
  - condition: template
    value_template: "{{ is_state(haspsensor, 'ON') }}"
  - condition: template
    value_template: >-
      {{-
        (trigger.payload_json.event is defined)
      and
        (trigger.payload_json.event == 'page')
      and
        (trigger.payload_json.value is defined)
      and
        (trigger.payload_json.value != targetpage)
      -}}

action:
  - delay:
      seconds: "{{idletime|int}}"

  - condition: template
    value_template: >-
      {%- set currentpage = namespace() -%}
      {%- for entity in device_entities(haspdevice) -%}
        {%- if entity|regex_search("^number\..*_active_page(?:_\d+|)$") -%}
          {%- set currentpage.entity=entity -%}
        {%- endif -%}
      {%- endfor -%}
      {%- if states(currentpage.entity) == targetpage -%}
        {{false}}
      {%- else -%}
        {{true}}
      {%- endif -%}

  - service: mqtt.publish
    data:
      topic: "{{pagecommandtopic}}"
      payload: "{{targetpage}}"
      retain: true