| 1 | alias: Buzzer Alarm |
| 2 | description: Start and stop the MIDI player with the alarm toggle. |
| 3 | triggers: |
| 4 | - trigger: state |
| 5 | entity_id: input_boolean.alarm_ringing |
| 6 | to: 'on' |
| 7 | - trigger: state |
| 8 | entity_id: input_boolean.alarm_ringing |
| 9 | to: 'off' |
| 10 | actions: |
| 11 | - choose: |
| 12 | - conditions: |
| 13 | - condition: state |
| 14 | entity_id: input_boolean.alarm_ringing |
| 15 | state: 'on' |
| 16 | sequence: |
| 17 | - action: media_player.repeat_set |
| 18 | target: |
| 19 | entity_id: media_player.midi_player_tux_universe_esp32_wroom_1 |
| 20 | data: |
| 21 | repeat: all |
| 22 | - action: media_player.media_play |
| 23 | target: |
| 24 | entity_id: media_player.midi_player_tux_universe_esp32_wroom_1 |
| 25 | default: |
| 26 | - action: media_player.media_stop |
| 27 | target: |
| 28 | entity_id: media_player.midi_player_tux_universe_esp32_wroom_1 |
| 29 | mode: restart |
| 30 |
jonas / Homeassistant config files for my alarm system synced with school starting times
Last active 8 hours ago
YAML configs for my home assistant alarm setup
| 1 | views: |
| 2 | - type: sections |
| 3 | sections: |
| 4 | - type: grid |
| 5 | cards: |
| 6 | - type: heading |
| 7 | icon: mdi:alarm |
| 8 | heading: Alarm |
| 9 | heading_style: title |
| 10 | - type: tile |
| 11 | name: Enable alarms |
| 12 | entity: input_boolean.alarm_on |
| 13 | features: |
| 14 | - type: toggle |
| 15 | grid_options: |
| 16 | columns: 6 |
| 17 | rows: 2 |
| 18 | - type: tile |
| 19 | name: Turn on alarm |
| 20 | entity: input_boolean.alarm_ringing |
| 21 | features: |
| 22 | - type: toggle |
| 23 | - type: heading |
| 24 | icon: mdi:alarm-note |
| 25 | heading_style: title |
| 26 | heading: MIDI Alarm sound |
| 27 | - type: custom:stack-in-card |
| 28 | mode: vertical |
| 29 | card_mod: |
| 30 | style: | |
| 31 | ha-card { |
| 32 | overflow: visible !important; |
| 33 | } |
| 34 | #root { |
| 35 | overflow: visible !important; |
| 36 | } |
| 37 | cards: |
| 38 | - type: markdown |
| 39 | content: | |
| 40 | **Select MIDI file for alarm** |
| 41 | card_mod: |
| 42 | style: | |
| 43 | ha-card { |
| 44 | border: none; |
| 45 | box-shadow: none; |
| 46 | padding: 8px 16px 0; |
| 47 | } |
| 48 | - type: custom:custom-features-card |
| 49 | card_mod: |
| 50 | style: | |
| 51 | ha-card { |
| 52 | overflow: visible !important; |
| 53 | border: none; |
| 54 | box-shadow: none; |
| 55 | } |
| 56 | features: |
| 57 | - type: custom:service-call |
| 58 | entries: |
| 59 | - type: dropdown |
| 60 | entity_id: media_player.midi_player_tux_universe_esp32_wroom_1 |
| 61 | icon: mdi:music |
| 62 | label: Alarm MIDI |
| 63 | option_type: attribute |
| 64 | option_entity: media_player.midi_player_tux_universe_esp32_wroom_1 |
| 65 | options_attribute: source_list |
| 66 | option_attribute: source_list |
| 67 | value_attribute: source |
| 68 | option_template: |
| 69 | label: '{{ option | safe }}' |
| 70 | tap_action: |
| 71 | action: perform-action |
| 72 | perform_action: media_player.select_source |
| 73 | target: |
| 74 | entity_id: media_player.midi_player_tux_universe_esp32_wroom_1 |
| 75 | data: |
| 76 | source: '{{ option | safe }}' |
| 77 | - type: custom:stack-in-card |
| 78 | mode: vertical |
| 79 | card_mod: |
| 80 | style: | |
| 81 | ha-card { |
| 82 | overflow: visible !important; |
| 83 | } |
| 84 | #root { |
| 85 | overflow: visible !important; |
| 86 | } |
| 87 | cards: |
| 88 | - type: markdown |
| 89 | content: | |
| 90 | **Select Buzzer for alarm** |
| 91 | card_mod: |
| 92 | style: | |
| 93 | ha-card { |
| 94 | border: none; |
| 95 | box-shadow: none; |
| 96 | padding: 8px 16px 0; |
| 97 | } |
| 98 | - type: custom:custom-features-card |
| 99 | card_mod: |
| 100 | style: | |
| 101 | ha-card { |
| 102 | overflow: visible !important; |
| 103 | border: none; |
| 104 | box-shadow: none; |
| 105 | } |
| 106 | features: |
| 107 | - type: custom:service-call |
| 108 | entries: |
| 109 | - type: dropdown |
| 110 | entity_id: media_player.midi_player_tux_universe_esp32_wroom_1 |
| 111 | icon: mdi:volume-high |
| 112 | label: Alarm Buzzer |
| 113 | option_type: attribute |
| 114 | option_entity: media_player.midi_player_tux_universe_esp32_wroom_1 |
| 115 | options_attribute: sound_mode_list |
| 116 | option_attribute: sound_mode_list |
| 117 | value_attribute: sound_mode |
| 118 | option_template: |
| 119 | label: '{{ option | safe }}' |
| 120 | tap_action: |
| 121 | action: perform-action |
| 122 | perform_action: media_player.select_sound_mode |
| 123 | target: |
| 124 | entity_id: media_player.midi_player_tux_universe_esp32_wroom_1 |
| 125 | data: |
| 126 | sound_mode: '{{ option | safe }}' |
| 127 | - type: grid |
| 128 | cards: |
| 129 | - type: heading |
| 130 | heading: OSIRIS sync |
| 131 | heading_style: title |
| 132 | icon: mdi:calendar-account |
| 133 | - type: horizontal-stack |
| 134 | cards: |
| 135 | - type: button |
| 136 | name: Sync with OSIRIS |
| 137 | icon: mdi:sync |
| 138 | tap_action: |
| 139 | action: call-service |
| 140 | service: script.osiris_update_week |
| 141 | show_state: false |
| 142 | - type: button |
| 143 | name: FORCE Sync with OSIRIS |
| 144 | icon: mdi:sync-alert |
| 145 | tap_action: |
| 146 | action: call-service |
| 147 | service: script.osiris_force_update_week |
| 148 | show_state: false |
| 149 | - type: markdown |
| 150 | content: > |
| 151 | Adjust the times for each weekday using the time pickers. |
| 152 | |
| 153 | |
| 154 | The schedule automatically syncs with your OSIRIS timetable every |
| 155 | day at **05:00**. By default, each time is set to **1 hour and 30 |
| 156 | minutes before the first event of that day**. |
| 157 | |
| 158 | |
| 159 | Manual edits remain active for the current week and are not |
| 160 | overwritten by the regular sync. |
| 161 | |
| 162 | |
| 163 | **Sync with OSIRIS** updates the schedule while keeping manual |
| 164 | edits. |
| 165 | |
| 166 | **FORCE Sync with OSIRIS** overwrites all manual edits and fully |
| 167 | refreshes the schedule. |
| 168 | - type: heading |
| 169 | heading: Manual edit |
| 170 | heading_style: title |
| 171 | icon: mdi:pencil |
| 172 | - type: grid |
| 173 | columns: 2 |
| 174 | square: false |
| 175 | cards: |
| 176 | - type: custom:time-picker-card |
| 177 | entity: input_datetime.osiris_maandag |
| 178 | name: Monday |
| 179 | hour_mode: 24 |
| 180 | minute_step: 5 |
| 181 | hide: |
| 182 | seconds: true |
| 183 | layout: |
| 184 | hour_mode: single |
| 185 | align_controls: center |
| 186 | name: outside |
| 187 | card_mod: |
| 188 | style: |
| 189 | .time-picker-row: |
| 190 | time-unit: |
| 191 | $: | |
| 192 | .time-input { |
| 193 | transform: scale(0.8); |
| 194 | margin: -4px !important; |
| 195 | } |
| 196 | .name: |
| 197 | $: | |
| 198 | background: none !important; |
| 199 | - type: custom:time-picker-card |
| 200 | entity: input_datetime.osiris_dinsdag |
| 201 | name: Tuesday |
| 202 | hour_mode: 24 |
| 203 | minute_step: 5 |
| 204 | hide: |
| 205 | seconds: true |
| 206 | layout: |
| 207 | hour_mode: single |
| 208 | align_controls: center |
| 209 | name: outside |
| 210 | card_mod: |
| 211 | style: |
| 212 | .time-picker-row: |
| 213 | time-unit: |
| 214 | $: | |
| 215 | .time-input { |
| 216 | transform: scale(0.8); |
| 217 | margin: -4px !important; |
| 218 | } |
| 219 | .name: |
| 220 | $: | |
| 221 | background: none !important; |
| 222 | - type: custom:time-picker-card |
| 223 | entity: input_datetime.osiris_woensdag |
| 224 | name: Wednesday |
| 225 | hour_mode: 24 |
| 226 | minute_step: 5 |
| 227 | hide: |
| 228 | seconds: true |
| 229 | layout: |
| 230 | hour_mode: single |
| 231 | align_controls: center |
| 232 | name: outside |
| 233 | card_mod: |
| 234 | style: |
| 235 | .time-picker-row: |
| 236 | time-unit: |
| 237 | $: | |
| 238 | .time-input { |
| 239 | transform: scale(0.8); |
| 240 | margin: -4px !important; |
| 241 | } |
| 242 | .name: |
| 243 | $: | |
| 244 | background: none !important; |
| 245 | - type: custom:time-picker-card |
| 246 | entity: input_datetime.osiris_donderdag |
| 247 | name: Thursday |
| 248 | hour_mode: 24 |
| 249 | minute_step: 5 |
| 250 | hide: |
| 251 | seconds: true |
| 252 | layout: |
| 253 | hour_mode: single |
| 254 | align_controls: center |
| 255 | name: outside |
| 256 | card_mod: |
| 257 | style: |
| 258 | .time-picker-row: |
| 259 | time-unit: |
| 260 | $: | |
| 261 | .time-input { |
| 262 | transform: scale(0.8); |
| 263 | margin: -4px !important; |
| 264 | } |
| 265 | .name: |
| 266 | $: | |
| 267 | background: none !important; |
| 268 | - type: custom:time-picker-card |
| 269 | entity: input_datetime.osiris_vrijdag |
| 270 | name: Friday |
| 271 | hour_mode: 24 |
| 272 | minute_step: 5 |
| 273 | hide: |
| 274 | seconds: true |
| 275 | layout: |
| 276 | hour_mode: single |
| 277 | align_controls: center |
| 278 | name: outside |
| 279 | card_mod: |
| 280 | style: |
| 281 | .time-picker-row: |
| 282 | time-unit: |
| 283 | $: | |
| 284 | .time-input { |
| 285 | transform: scale(0.8); |
| 286 | margin: -4px !important; |
| 287 | } |
| 288 | .name: |
| 289 | $: | |
| 290 | background: none !important; |
| 291 |
| 1 | alias: OSIRIS Alarm Trigger |
| 2 | description: >- |
| 3 | Turns on the alarm when the configured weekday time is reached and Alarm on is |
| 4 | enabled. |
| 5 | triggers: |
| 6 | - trigger: time |
| 7 | at: input_datetime.osiris_maandag |
| 8 | - trigger: time |
| 9 | at: input_datetime.osiris_dinsdag |
| 10 | - trigger: time |
| 11 | at: input_datetime.osiris_woensdag |
| 12 | - trigger: time |
| 13 | at: input_datetime.osiris_donderdag |
| 14 | - trigger: time |
| 15 | at: input_datetime.osiris_vrijdag |
| 16 | conditions: |
| 17 | - condition: state |
| 18 | entity_id: input_boolean.alarm_on |
| 19 | state: 'on' |
| 20 | - condition: template |
| 21 | value_template: | |
| 22 | {% set weekday = now().weekday() %} |
| 23 | {% set helpers = [ |
| 24 | 'input_datetime.osiris_maandag', |
| 25 | 'input_datetime.osiris_dinsdag', |
| 26 | 'input_datetime.osiris_woensdag', |
| 27 | 'input_datetime.osiris_donderdag', |
| 28 | 'input_datetime.osiris_vrijdag' |
| 29 | ] %} |
| 30 | {{ weekday < 5 and trigger.entity_id == helpers[weekday] }} |
| 31 | actions: |
| 32 | - action: input_boolean.turn_on |
| 33 | target: |
| 34 | entity_id: input_boolean.alarm_ringing |
| 35 | mode: single |
| 36 |
| 1 | alias: OSIRIS Force Update Week |
| 2 | mode: single |
| 3 | sequence: |
| 4 | - action: calendar.get_events |
| 5 | target: |
| 6 | entity_id: calendar.osiris |
| 7 | data: |
| 8 | start_date_time: >- |
| 9 | {{ (today_at('00:00') - |
| 10 | timedelta(days=today_at('00:00').weekday())).strftime('%Y-%m-%d |
| 11 | 00:00:00') }} |
| 12 | end_date_time: >- |
| 13 | {{ (today_at('00:00') - timedelta(days=today_at('00:00').weekday()) + |
| 14 | timedelta(days=5)).strftime('%Y-%m-%d 00:00:00') }} |
| 15 | response_variable: osiris_calendar |
| 16 | - variables: |
| 17 | maandag_events: > |
| 18 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 19 | (today_at('00:00') - |
| 20 | timedelta(days=today_at('00:00').weekday())).strftime('%Y-%m-%d') %} {% |
| 21 | for event in osiris_calendar['calendar.osiris']['events'] %} |
| 22 | {% set start = as_datetime(event.start) %} |
| 23 | {% if start and start.strftime('%Y-%m-%d') == target_date and event.summary != 'ZIE PERSOONLIJK ROOSTER' %} |
| 24 | {% set ns.events = ns.events + [event] %} |
| 25 | {% endif %} |
| 26 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 27 | dinsdag_events: > |
| 28 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 29 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - |
| 30 | 1)).strftime('%Y-%m-%d') %} {% for event in |
| 31 | osiris_calendar['calendar.osiris']['events'] %} |
| 32 | {% set start = as_datetime(event.start) %} |
| 33 | {% if start and start.strftime('%Y-%m-%d') == target_date and event.summary != 'ZIE PERSOONLIJK ROOSTER' %} |
| 34 | {% set ns.events = ns.events + [event] %} |
| 35 | {% endif %} |
| 36 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 37 | woensdag_events: > |
| 38 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 39 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - |
| 40 | 2)).strftime('%Y-%m-%d') %} {% for event in |
| 41 | osiris_calendar['calendar.osiris']['events'] %} |
| 42 | {% set start = as_datetime(event.start) %} |
| 43 | {% if start and start.strftime('%Y-%m-%d') == target_date and event.summary != 'ZIE PERSOONLIJK ROOSTER' %} |
| 44 | {% set ns.events = ns.events + [event] %} |
| 45 | {% endif %} |
| 46 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 47 | donderdag_events: > |
| 48 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 49 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - |
| 50 | 3)).strftime('%Y-%m-%d') %} {% for event in |
| 51 | osiris_calendar['calendar.osiris']['events'] %} |
| 52 | {% set start = as_datetime(event.start) %} |
| 53 | {% if start and start.strftime('%Y-%m-%d') == target_date and event.summary != 'ZIE PERSOONLIJK ROOSTER' %} |
| 54 | {% set ns.events = ns.events + [event] %} |
| 55 | {% endif %} |
| 56 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 57 | vrijdag_events: > |
| 58 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 59 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - |
| 60 | 4)).strftime('%Y-%m-%d') %} {% for event in |
| 61 | osiris_calendar['calendar.osiris']['events'] %} |
| 62 | {% set start = as_datetime(event.start) %} |
| 63 | {% if start and start.strftime('%Y-%m-%d') == target_date and event.summary != 'ZIE PERSOONLIJK ROOSTER' %} |
| 64 | {% set ns.events = ns.events + [event] %} |
| 65 | {% endif %} |
| 66 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 67 | - if: |
| 68 | - condition: template |
| 69 | value_template: '{{ maandag_events | length > 0 }}' |
| 70 | then: |
| 71 | - action: input_datetime.set_datetime |
| 72 | target: |
| 73 | entity_id: input_datetime.osiris_maandag |
| 74 | data: |
| 75 | datetime: > |
| 76 | {{ (as_datetime(maandag_events[0].start) - |
| 77 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 78 | - if: |
| 79 | - condition: template |
| 80 | value_template: '{{ dinsdag_events | length > 0 }}' |
| 81 | then: |
| 82 | - action: input_datetime.set_datetime |
| 83 | target: |
| 84 | entity_id: input_datetime.osiris_dinsdag |
| 85 | data: |
| 86 | datetime: > |
| 87 | {{ (as_datetime(dinsdag_events[0].start) - |
| 88 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 89 | - if: |
| 90 | - condition: template |
| 91 | value_template: '{{ woensdag_events | length > 0 }}' |
| 92 | then: |
| 93 | - action: input_datetime.set_datetime |
| 94 | target: |
| 95 | entity_id: input_datetime.osiris_woensdag |
| 96 | data: |
| 97 | datetime: > |
| 98 | {{ (as_datetime(woensdag_events[0].start) - |
| 99 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 100 | - if: |
| 101 | - condition: template |
| 102 | value_template: '{{ donderdag_events | length > 0 }}' |
| 103 | then: |
| 104 | - action: input_datetime.set_datetime |
| 105 | target: |
| 106 | entity_id: input_datetime.osiris_donderdag |
| 107 | data: |
| 108 | datetime: > |
| 109 | {{ (as_datetime(donderdag_events[0].start) - |
| 110 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 111 | - if: |
| 112 | - condition: template |
| 113 | value_template: '{{ vrijdag_events | length > 0 }}' |
| 114 | then: |
| 115 | - action: input_datetime.set_datetime |
| 116 | target: |
| 117 | entity_id: input_datetime.osiris_vrijdag |
| 118 | data: |
| 119 | datetime: > |
| 120 | {{ (as_datetime(vrijdag_events[0].start) - |
| 121 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 122 |
| 1 | alias: OSIRIS Update Week |
| 2 | mode: single |
| 3 | sequence: |
| 4 | - action: calendar.get_events |
| 5 | target: |
| 6 | entity_id: calendar.osiris |
| 7 | data: |
| 8 | start_date_time: >- |
| 9 | {{ (today_at('00:00') - |
| 10 | timedelta(days=today_at('00:00').weekday())).strftime('%Y-%m-%d |
| 11 | 00:00:00') }} |
| 12 | end_date_time: >- |
| 13 | {{ (today_at('00:00') - timedelta(days=today_at('00:00').weekday()) + |
| 14 | timedelta(days=5)).strftime('%Y-%m-%d 00:00:00') }} |
| 15 | response_variable: osiris_calendar |
| 16 | - variables: |
| 17 | osiris_events: | |
| 18 | {{ osiris_calendar['calendar.osiris']['events'] |
| 19 | | rejectattr('summary', 'equalto', 'ZIE PERSOONLIJK ROOSTER') |
| 20 | | list }} |
| 21 | - if: |
| 22 | - condition: template |
| 23 | value_template: | |
| 24 | {{ states('input_datetime.osiris_maandag')[0:10] != |
| 25 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday())).strftime('%Y-%m-%d') }} |
| 26 | then: |
| 27 | - variables: |
| 28 | maandag_events: > |
| 29 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 30 | (today_at('00:00') - |
| 31 | timedelta(days=today_at('00:00').weekday())).strftime('%Y-%m-%d') %} |
| 32 | {% for event in osiris_events %} |
| 33 | {% set start = as_datetime(event.start) %} |
| 34 | {% if start and start.strftime('%Y-%m-%d') == target_date %} |
| 35 | {% set ns.events = ns.events + [event] %} |
| 36 | {% endif %} |
| 37 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 38 | - if: |
| 39 | - condition: template |
| 40 | value_template: '{{ maandag_events | length > 0 }}' |
| 41 | then: |
| 42 | - action: input_datetime.set_datetime |
| 43 | target: |
| 44 | entity_id: input_datetime.osiris_maandag |
| 45 | data: |
| 46 | datetime: > |
| 47 | {{ (as_datetime(maandag_events[0].start) - |
| 48 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 49 | - if: |
| 50 | - condition: template |
| 51 | value_template: | |
| 52 | {{ states('input_datetime.osiris_dinsdag')[0:10] != |
| 53 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - 1)).strftime('%Y-%m-%d') }} |
| 54 | then: |
| 55 | - variables: |
| 56 | dinsdag_events: > |
| 57 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 58 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - |
| 59 | 1)).strftime('%Y-%m-%d') %} {% for event in osiris_events %} |
| 60 | {% set start = as_datetime(event.start) %} |
| 61 | {% if start and start.strftime('%Y-%m-%d') == target_date %} |
| 62 | {% set ns.events = ns.events + [event] %} |
| 63 | {% endif %} |
| 64 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 65 | - if: |
| 66 | - condition: template |
| 67 | value_template: '{{ dinsdag_events | length > 0 }}' |
| 68 | then: |
| 69 | - action: input_datetime.set_datetime |
| 70 | target: |
| 71 | entity_id: input_datetime.osiris_dinsdag |
| 72 | data: |
| 73 | datetime: > |
| 74 | {{ (as_datetime(dinsdag_events[0].start) - |
| 75 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 76 | - if: |
| 77 | - condition: template |
| 78 | value_template: | |
| 79 | {{ states('input_datetime.osiris_woensdag')[0:10] != |
| 80 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - 2)).strftime('%Y-%m-%d') }} |
| 81 | then: |
| 82 | - variables: |
| 83 | woensdag_events: > |
| 84 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 85 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - |
| 86 | 2)).strftime('%Y-%m-%d') %} {% for event in osiris_events %} |
| 87 | {% set start = as_datetime(event.start) %} |
| 88 | {% if start and start.strftime('%Y-%m-%d') == target_date %} |
| 89 | {% set ns.events = ns.events + [event] %} |
| 90 | {% endif %} |
| 91 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 92 | - if: |
| 93 | - condition: template |
| 94 | value_template: '{{ woensdag_events | length > 0 }}' |
| 95 | then: |
| 96 | - action: input_datetime.set_datetime |
| 97 | target: |
| 98 | entity_id: input_datetime.osiris_woensdag |
| 99 | data: |
| 100 | datetime: > |
| 101 | {{ (as_datetime(woensdag_events[0].start) - |
| 102 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 103 | - if: |
| 104 | - condition: template |
| 105 | value_template: | |
| 106 | {{ states('input_datetime.osiris_donderdag')[0:10] != |
| 107 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - 3)).strftime('%Y-%m-%d') }} |
| 108 | then: |
| 109 | - variables: |
| 110 | donderdag_events: > |
| 111 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 112 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - |
| 113 | 3)).strftime('%Y-%m-%d') %} {% for event in osiris_events %} |
| 114 | {% set start = as_datetime(event.start) %} |
| 115 | {% if start and start.strftime('%Y-%m-%d') == target_date %} |
| 116 | {% set ns.events = ns.events + [event] %} |
| 117 | {% endif %} |
| 118 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 119 | - if: |
| 120 | - condition: template |
| 121 | value_template: '{{ donderdag_events | length > 0 }}' |
| 122 | then: |
| 123 | - action: input_datetime.set_datetime |
| 124 | target: |
| 125 | entity_id: input_datetime.osiris_donderdag |
| 126 | data: |
| 127 | datetime: > |
| 128 | {{ (as_datetime(donderdag_events[0].start) - |
| 129 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 130 | - if: |
| 131 | - condition: template |
| 132 | value_template: | |
| 133 | {{ states('input_datetime.osiris_vrijdag')[0:10] != |
| 134 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - 4)).strftime('%Y-%m-%d') }} |
| 135 | then: |
| 136 | - variables: |
| 137 | vrijdag_events: > |
| 138 | {% set ns = namespace(events=[]) %} {% set target_date = |
| 139 | (today_at('00:00') - timedelta(days=today_at('00:00').weekday() - |
| 140 | 4)).strftime('%Y-%m-%d') %} {% for event in osiris_events %} |
| 141 | {% set start = as_datetime(event.start) %} |
| 142 | {% if start and start.strftime('%Y-%m-%d') == target_date %} |
| 143 | {% set ns.events = ns.events + [event] %} |
| 144 | {% endif %} |
| 145 | {% endfor %} {{ ns.events | sort(attribute='start') }} |
| 146 | - if: |
| 147 | - condition: template |
| 148 | value_template: '{{ vrijdag_events | length > 0 }}' |
| 149 | then: |
| 150 | - action: input_datetime.set_datetime |
| 151 | target: |
| 152 | entity_id: input_datetime.osiris_vrijdag |
| 153 | data: |
| 154 | datetime: > |
| 155 | {{ (as_datetime(vrijdag_events[0].start) - |
| 156 | timedelta(minutes=90)).strftime('%Y-%m-%d %H:%M:%S') }} |
| 157 |
| 1 | alias: Run OSIRIS Update |
| 2 | description: '' |
| 3 | triggers: |
| 4 | - trigger: time |
| 5 | at: '05:00:00' |
| 6 | weekday: |
| 7 | - mon |
| 8 | - tue |
| 9 | - wed |
| 10 | - thu |
| 11 | - fri |
| 12 | conditions: [] |
| 13 | actions: |
| 14 | - action: script.osiris_update_week |
| 15 | metadata: {} |
| 16 | data: {} |
| 17 | mode: single |
| 18 |
| 1 | alias: Toggle alarm with button |
| 2 | description: '' |
| 3 | triggers: |
| 4 | - trigger: state |
| 5 | entity_id: |
| 6 | - binary_sensor.jonas_bedroom_tux_universe_esp32_wroom_1_button_1 |
| 7 | from: 'off' |
| 8 | to: 'on' |
| 9 | actions: |
| 10 | - action: input_boolean.toggle |
| 11 | target: |
| 12 | entity_id: input_boolean.alarm_ringing |
| 13 | mode: single |
| 14 |