Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add blueprint with entity state trigger #65

Open
Slalamander opened this issue Mar 9, 2024 · 3 comments
Open

Add blueprint with entity state trigger #65

Slalamander opened this issue Mar 9, 2024 · 3 comments
Labels
documentation Improvements or additions to documentation enhancement New feature or request

Comments

@Slalamander
Copy link
Contributor

General information

The current provided blueprint works on device triggers. These don't provide as much information in their trigger variable as a state trigger does (most importantly, there is no from_state).
I've edited the full.yaml blueprint to make this work, and I've added the code below. Since I saw some python files in the folder of which I wasn't sure what they did, I opted not to make a pull request but instead do it like this. My idea would be to simply add this as a second blueprint in the repo. Due to problems when re-importing (caused overwriting) I've commented out the source_url key currently.

Usage scenario

When starting sleep tracking, my sleep as android pauses first. I'd like to slowly dim the lights once this happens, but also would like a night light to turn on when I pause it while actually asleep. By using the from_state trigger variable, I can put a condition in the action that makes it only trigger if the previous state was not sleep_tracking_started for example.

Blueprint

blueprint:
  name: Sleep as Android MQTT entity actions
  description: Define actions based on Sleep As Android sensor states
  domain: automation
  #source_url: https://github.com/IATkachenko/HA-SleepAsAndroid/blob/main/blueprint/full.yaml
  input:
    sleep_entity:
      name: SleepAsAndroid Entity
      description: 'Sleep As Android Integration Entity'
      selector:
        entity:
          filter:
            integration: sleep_as_android
          multiple: false
    person:
      name: Person
      description: Person for checking state
      selector:
        entity:
          domain: person
          multiple: false
    state:
      name: State
      description: Person must be in this state
      default: home
    sleep_tracking_started:
      name: sleep_tracking_started
      description: sleep_tracking_started event
      default: []
      selector:
        action: {}
    sleep_tracking_stopped:
      name: sleep_tracking_stopped
      description: sleep_tracking_stopped event
      default: []
      selector:
        action: {}
    sleep_tracking_paused:
      name: sleep_tracking_paused
      description: sleep_tracking_paused event
      default: []
      selector:
        action: {}
    sleep_tracking_resumed:
      name: sleep_tracking_resumed
      description: sleep_tracking_resumed event
      default: []
      selector:
        action: {}
    alarm_snooze_clicked:
      name: alarm_snooze_clicked
      description: alarm_snooze_clicked event
      default: []
      selector:
        action: {}
    alarm_snooze_canceled:
      name: alarm_snooze_canceled
      description: alarm_snooze_canceled event
      default: []
      selector:
        action: {}
    time_to_bed_alarm_alert:
      name: time_to_bed_alarm_alert
      description: time_to_bed_alarm_alert event
      default: []
      selector:
        action: {}
    alarm_alert_start:
      name: alarm_alert_start
      description: alarm_alert_start event
      default: []
      selector:
        action: {}
    alarm_alert_dismiss:
      name: alarm_alert_dismiss
      description: alarm_alert_dismiss event
      default: []
      selector:
        action: {}
    alarm_skip_next:
      name: alarm_skip_next
      description: alarm_skip_next event
      default: []
      selector:
        action: {}
    show_skip_next_alarm:
      name: show_skip_next_alarm
      description: show_skip_next_alarm event
      default: []
      selector:
        action: {}
    rem:
      name: rem
      description: rem event
      default: []
      selector:
        action: {}
    smart_period:
      name: smart_period
      description: smart_period event
      default: []
      selector:
        action: {}
    before_smart_period:
      name: before_smart_period
      description: before_smart_period event
      default: []
      selector:
        action: {}
    lullaby_start:
      name: lullaby_start
      description: lullaby_start event
      default: []
      selector:
        action: {}
    lullaby_stop:
      name: lullaby_stop
      description: lullaby_stop event
      default: []
      selector:
        action: {}
    lullaby_volume_down:
      name: lullaby_volume_down
      description: lullaby_volume_down event
      default: []
      selector:
        action: {}
    deep_sleep:
      name: deep_sleep
      description: deep_sleep event
      default: []
      selector:
        action: {}
    light_sleep:
      name: light_sleep
      description: light_sleep event
      default: []
      selector:
        action: {}
    awake:
      name: awake
      description: awake event
      default: []
      selector:
        action: {}
    not_awake:
      name: not_awake
      description: not_awake event
      default: []
      selector:
        action: {}
    apnea_alarm:
      name: apnea_alarm
      description: apnea_alarm event
      default: []
      selector:
        action: {}
    antisnoring:
      name: antisnoring
      description: antisnoring event
      default: []
      selector:
        action: {}
    sound_event_snore:
      name: sound_event_snore
      description: sound_event_snore event
      default: []
      selector:
        action: {}
    sound_event_talk:
      name: sound_event_talk
      description: sound_event_talk event
      default: []
      selector:
        action: {}
    sound_event_cough:
      name: sound_event_cough
      description: sound_event_cough event
      default: []
      selector:
        action: {}
    sound_event_baby:
      name: sound_event_baby
      description: sound_event_baby event
      default: []
      selector:
        action: {}
    sound_event_laugh:
      name: sound_event_laugh
      description: sound_event_laugh event
      default: []
      selector:
        action: {}
    before_alarm:
      name: before_alarm
      description: before_alarm event
      default: []
      selector:
        action: {}
mode: queued
max_exceeded: silent
trigger:
- platform: state
  entity_id: !input sleep_entity
  to: sleep_tracking_started
  id: sleep_tracking_started
# - platform: device
#   domain: sleep_as_android
#   device_id: !input device
#   type: sleep_tracking_started
#   id: sleep_tracking_started
- platform: state
  entity_id: !input sleep_entity
  to:  sleep_tracking_stopped
  id: sleep_tracking_stopped
- platform: state
  entity_id: !input sleep_entity
  to:  sleep_tracking_paused
  id: sleep_tracking_paused
- platform: state
  entity_id: !input sleep_entity
  to:  sleep_tracking_resumed
  id: sleep_tracking_resumed
- platform: state
  entity_id: !input sleep_entity
  to:  alarm_snooze_clicked
  id: alarm_snooze_clicked
- platform: state
  entity_id: !input sleep_entity
  to:  alarm_snooze_canceled
  id: alarm_snooze_canceled
- platform: state
  entity_id: !input sleep_entity
  to:  time_to_bed_alarm_alert
  id: time_to_bed_alarm_alert
- platform: state
  entity_id: !input sleep_entity
  to:  alarm_alert_start
  id: alarm_alert_start
- platform: state
  entity_id: !input sleep_entity
  to:  alarm_alert_dismiss
  id: alarm_alert_dismiss
- platform: state
  entity_id: !input sleep_entity
  to:  alarm_skip_next
  id: alarm_skip_next
- platform: state
  entity_id: !input sleep_entity
  to:  show_skip_next_alarm
  id: show_skip_next_alarm
- platform: state
  entity_id: !input sleep_entity
  to:  rem
  id: rem
- platform: state
  entity_id: !input sleep_entity
  to:  smart_period
  id: smart_period
- platform: state
  entity_id: !input sleep_entity
  to:  before_smart_period
  id: before_smart_period
- platform: state
  entity_id: !input sleep_entity
  to:  lullaby_start
  id: lullaby_start
- platform: state
  entity_id: !input sleep_entity
  to:  lullaby_stop
  id: lullaby_stop
- platform: state
  entity_id: !input sleep_entity
  to:  lullaby_volume_down
  id: lullaby_volume_down
- platform: state
  entity_id: !input sleep_entity
  to:  deep_sleep
  id: deep_sleep
- platform: state
  entity_id: !input sleep_entity
  to:  light_sleep
  id: light_sleep
- platform: state
  entity_id: !input sleep_entity
  to:  awake
  id: awake
- platform: state
  entity_id: !input sleep_entity
  to:  not_awake
  id: not_awake
- platform: state
  entity_id: !input sleep_entity
  to:  apnea_alarm
  id: apnea_alarm
- platform: state
  entity_id: !input sleep_entity
  to:  antisnoring
  id: antisnoring
- platform: state
  entity_id: !input sleep_entity
  to:  sound_event_snore
  id: sound_event_snore
- platform: state
  entity_id: !input sleep_entity
  to:  sound_event_talk
  id: sound_event_talk
- platform: state
  entity_id: !input sleep_entity
  to:  sound_event_cough
  id: sound_event_cough
- platform: state
  entity_id: !input sleep_entity
  to:  sound_event_baby
  id: sound_event_baby
- platform: state
  entity_id: !input sleep_entity
  to:  sound_event_laugh
  id: sound_event_laugh
- platform: state
  entity_id: !input sleep_entity
  to:  before_alarm
  id: before_alarm
condition:
- condition: state
  entity_id: !input person
  state: !input state
action:
- choose:
  - conditions:
      condition: trigger
      id: sleep_tracking_started
    sequence: !input sleep_tracking_started
  - conditions:
      condition: trigger
      id: sleep_tracking_stopped
    sequence: !input sleep_tracking_stopped
  - conditions:
      condition: trigger
      id: sleep_tracking_paused
    sequence: !input sleep_tracking_paused
  - conditions:
      condition: trigger
      id: sleep_tracking_resumed
    sequence: !input sleep_tracking_resumed
  - conditions:
      condition: trigger
      id: alarm_snooze_clicked
    sequence: !input alarm_snooze_clicked
  - conditions:
      condition: trigger
      id: alarm_snooze_canceled
    sequence: !input alarm_snooze_canceled
  - conditions:
      condition: trigger
      id: time_to_bed_alarm_alert
    sequence: !input time_to_bed_alarm_alert
  - conditions:
      condition: trigger
      id: alarm_alert_start
    sequence: !input alarm_alert_start
  - conditions:
      condition: trigger
      id: alarm_alert_dismiss
    sequence: !input alarm_alert_dismiss
  - conditions:
      condition: trigger
      id: alarm_skip_next
    sequence: !input alarm_skip_next
  - conditions:
      condition: trigger
      id: show_skip_next_alarm
    sequence: !input show_skip_next_alarm
  - conditions:
      condition: trigger
      id: rem
    sequence: !input rem
  - conditions:
      condition: trigger
      id: smart_period
    sequence: !input smart_period
  - conditions:
      condition: trigger
      id: before_smart_period
    sequence: !input before_smart_period
  - conditions:
      condition: trigger
      id: lullaby_start
    sequence: !input lullaby_start
  - conditions:
      condition: trigger
      id: lullaby_stop
    sequence: !input lullaby_stop
  - conditions:
      condition: trigger
      id: lullaby_volume_down
    sequence: !input lullaby_volume_down
  - conditions:
      condition: trigger
      id: deep_sleep
    sequence: !input deep_sleep
  - conditions:
      condition: trigger
      id: light_sleep
    sequence: !input light_sleep
  - conditions:
      condition: trigger
      id: awake
    sequence: !input awake
  - conditions:
      condition: trigger
      id: not_awake
    sequence: !input not_awake
  - conditions:
      condition: trigger
      id: apnea_alarm
    sequence: !input apnea_alarm
  - conditions:
      condition: trigger
      id: antisnoring
    sequence: !input antisnoring
  - conditions:
      condition: trigger
      id: sound_event_snore
    sequence: !input sound_event_snore
  - conditions:
      condition: trigger
      id: sound_event_talk
    sequence: !input sound_event_talk
  - conditions:
      condition: trigger
      id: sound_event_cough
    sequence: !input sound_event_cough
  - conditions:
      condition: trigger
      id: sound_event_baby
    sequence: !input sound_event_baby
  - conditions:
      condition: trigger
      id: sound_event_laugh
    sequence: !input sound_event_laugh
  - conditions:
      condition: trigger
      id: before_alarm
    sequence: !input before_alarm
@Slalamander Slalamander added the enhancement New feature or request label Mar 9, 2024
@IATkachenko
Copy link
Owner

Slalamander, hello!

Thank you for the request and blueprint!

The integration creates blueprints automatically, based on known triggers via blueprint_generator.py as part of the release process
The best way to create blueprint -- update it.

But I have not much time for this, so you may just create PR with your static blueprint (with correct source_url and without comment part in the blueprint), and I'll add automation later.
Static blueprint will not be overwritten, before generator update.

@IATkachenko IATkachenko added documentation Improvements or additions to documentation help wanted Extra attention is needed labels Mar 10, 2024
@Slalamander
Copy link
Contributor Author

I've created the PR. If there's anything left to do please let me know :)

@IATkachenko
Copy link
Owner

IATkachenko commented Mar 10, 2024

Looks great, thank you!

Merged without new release, but I'll add a note to next release notes.

Will keep this issue open until blueprint_generator update.

@IATkachenko IATkachenko removed the help wanted Extra attention is needed label Mar 10, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
documentation Improvements or additions to documentation enhancement New feature or request
Projects
None yet
Development

No branches or pull requests

2 participants