YAML configs for my home assistant alarm setup

Revision c27e135ec127793c30cfffaf96975a7f83ec0677

buzzer-alarm-automation.yaml Raw
1alias: Buzzer Alarm
2description: Start and stop the MIDI player with the alarm toggle.
3triggers:
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'
10actions:
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
29mode: restart
30
dashboard.yaml Raw
1views:
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
osiris-alarm-trigger-automation.yaml Raw
1alias: OSIRIS Alarm Trigger
2description: >-
3 Turns on the alarm when the configured weekday time is reached and Alarm on is
4 enabled.
5triggers:
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
16conditions:
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] }}
31actions:
32 - action: input_boolean.turn_on
33 target:
34 entity_id: input_boolean.alarm_ringing
35mode: single
36
osiris-force-update.yaml Raw
1alias: OSIRIS Force Update Week
2mode: single
3sequence:
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
osiris-update-script.yaml Raw
1alias: OSIRIS Update Week
2mode: single
3sequence:
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
run-osiris-update-automation.yaml Raw
1alias: Run OSIRIS Update
2description: ''
3triggers:
4 - trigger: time
5 at: '05:00:00'
6 weekday:
7 - mon
8 - tue
9 - wed
10 - thu
11 - fri
12conditions: []
13actions:
14 - action: script.osiris_update_week
15 metadata: {}
16 data: {}
17mode: single
18
toggle-alarm-with-button-automation.yaml Raw
1alias: Toggle alarm with button
2description: ''
3triggers:
4 - trigger: state
5 entity_id:
6 - binary_sensor.jonas_bedroom_tux_universe_esp32_wroom_1_button_1
7 from: 'off'
8 to: 'on'
9actions:
10 - action: input_boolean.toggle
11 target:
12 entity_id: input_boolean.alarm_ringing
13mode: single
14