-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathKNX - Media Player Volume step Control and Mute.yaml
274 lines (260 loc) · 8.98 KB
/
KNX - Media Player Volume step Control and Mute.yaml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
blueprint:
name: KNX - Media Player Volume step Control and Mute (by toben1997)
description: 'Use KNX to control the volume of a Home Assistant media player entity
with optional state feedback.
This blueprint allows you to select which media player should be controlled and
provides input fields for the KNX group addresses:
- One address for stepwise volume control (0 for decrease, 1 for increase), with
a slider to set the number of steps.
- One address for mute control (0 for unmute, 1 for mute).
- One address for mute state feedback (0 for unmute, 1 for mute).
Each address has an option to invert the received/sent values.
'
author: toben1997
source_url: https://github.com/toben1997/KNX-Home-Assistant/blob/main/KNX%20-%20Media%20Player%20Volume%20step%20Control%20and%20Mute.yaml
domain: automation
input:
media_player_entity:
name: Media Player Entity
description: 'Choose the media player to control via KNX.
'
selector:
entity:
domain:
- media_player
multiple: false
knx_volume_step_address:
name: KNX Volume Step Group Address
description: 'Group address for stepwise volume control (0 for decrease, 1 for
increase). DPT 1.001. Example: ''1/0/4'' (leave empty if unused).
'
default: ''
knx_volume_step_invert:
name: Invert KNX Volume Step Address
description: 'Invert the received value for volume step control (1 for decrease,
0 for increase).
'
default: false
selector:
boolean: {}
volume_steps:
name: Volume Steps
description: 'Number of steps to increase or decrease the volume.
'
selector:
number:
min: 1.0
max: 10.0
step: 1.0
unit_of_measurement: steps
mode: slider
default: 1
knx_mute_address:
name: KNX Mute Group Address
description: 'Group address for controlling mute (0 for unmute, 1 for mute).
DPT 1.001. Example: ''1/0/5'' (leave empty if unused).
'
default: ''
knx_mute_invert:
name: Invert KNX Mute Address
description: 'Invert the received value for mute control (1 for unmute, 0 for
mute).
'
default: false
selector:
boolean: {}
knx_mute_state_address:
name: KNX Mute State Group Address
description: 'Group address to send feedback of the mute state (0 for unmute,
1 for mute). DPT 1.001. Example: ''1/4/5'' (leave empty if unused).
'
default: ''
knx_mute_state_invert:
name: Invert KNX Mute State Address
description: 'Invert the sent value for mute state feedback (1 for unmute, 0
for mute).
'
default: false
selector:
boolean: {}
mode: parallel
max_exceeded: silent
variables:
media_player_entity: !input media_player_entity
knx_volume_step_address: !input knx_volume_step_address
knx_volume_step_invert: !input knx_volume_step_invert
volume_steps: !input volume_steps
knx_mute_address: !input knx_mute_address
knx_mute_invert: !input knx_mute_invert
knx_mute_state_address: !input knx_mute_state_address
knx_mute_state_invert: !input knx_mute_state_invert
last_mute_state: '{{ is_state_attr(media_player_entity, ''is_volume_muted'', true)
}}'
trigger:
- platform: homeassistant
event: start
id: initialize
- platform: event
event_type: automation_reloaded
id: initialize
- platform: event
event_type: service_registered
event_data:
domain: knx
service: event_register
id: initialize
- platform: state
entity_id: !input media_player_entity
id: media_player_entity
- platform: event
event_type: knx_event
event_data:
destination: !input knx_volume_step_address
telegramtype: GroupValueWrite
direction: Incoming
id: knx_volume_step_address
- platform: event
event_type: knx_event
event_data:
destination: !input knx_mute_address
telegramtype: GroupValueWrite
direction: Incoming
id: knx_mute_address
- platform: event
event_type: knx_event
event_data:
destination: !input knx_mute_state_address
telegramtype: GroupValueRead
direction: Incoming
id: knx_mute_state_address
action:
- choose:
- conditions:
- condition: trigger
id: initialize
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ knx_volume_step_address != '''' }}'
sequence:
- service: knx.event_register
data:
address: '{{ knx_volume_step_address }}'
- choose:
- conditions:
- condition: template
value_template: '{{ knx_mute_address != '''' }}'
sequence:
- service: knx.event_register
data:
address: '{{ knx_mute_address }}'
- choose:
- conditions:
- condition: template
value_template: '{{ knx_mute_state_address != '''' }}'
sequence:
- service: knx.event_register
data:
address: '{{ knx_mute_state_address }}'
- variables:
last_mute_state: '{{ is_state_attr(media_player_entity, ''is_volume_muted'',
true) }}'
- conditions:
- condition: template
value_template: '{{ trigger.platform == ''event'' and trigger.event.event_type
== ''knx_event'' and trigger.event.data.direction == ''Incoming'' and trigger.event.data.destination
== knx_volume_step_address }}'
sequence:
- choose:
- conditions:
- condition: template
value_template: "{% if knx_volume_step_invert %}\n {{ trigger.event.data.data
| int(default=0) == 1 }}\n{% else %}\n {{ trigger.event.data.data | int(default=0)
== 0 }}\n{% endif %}\n"
sequence:
- repeat:
count: '{{ volume_steps }}'
sequence:
- service: media_player.volume_down
target:
entity_id: '{{ media_player_entity }}'
- conditions:
- condition: template
value_template: "{% if knx_volume_step_invert %}\n {{ trigger.event.data.data
| int(default=0) == 0 }}\n{% else %}\n {{ trigger.event.data.data | int(default=0)
== 1 }}\n{% endif %}\n"
sequence:
- repeat:
count: '{{ volume_steps }}'
sequence:
- service: media_player.volume_up
target:
entity_id: '{{ media_player_entity }}'
- conditions:
- condition: template
value_template: '{{ trigger.platform == ''event'' and trigger.event.event_type
== ''knx_event'' and trigger.event.data.direction == ''Incoming'' and trigger.event.data.destination
== knx_mute_address }}'
sequence:
- choose:
- conditions:
- condition: template
value_template: "{% if knx_mute_invert %}\n {{ trigger.event.data.data
| int(default=0) == 0 }}\n{% else %}\n {{ trigger.event.data.data | int(default=0)
== 1 }}\n{% endif %}\n"
sequence:
- service: media_player.volume_mute
data:
is_volume_muted: true
target:
entity_id: '{{ media_player_entity }}'
- conditions:
- condition: template
value_template: "{% if knx_mute_invert %}\n {{ trigger.event.data.data
| int(default=0) == 1 }}\n{% else %}\n {{ trigger.event.data.data | int(default=0)
== 0 }}\n{% endif %}\n"
sequence:
- service: media_player.volume_mute
data:
is_volume_muted: false
target:
entity_id: '{{ media_player_entity }}'
- conditions:
- condition: template
value_template: '{{ trigger.platform == ''state'' and trigger.entity_id == media_player_entity
}}'
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ knx_mute_state_address != '''' and (is_state_attr(media_player_entity,
''is_volume_muted'', true) != last_mute_state) }}'
sequence:
- choose:
- conditions:
- condition: template
value_template: '{{ is_state_attr(media_player_entity, ''is_volume_muted'',
true) }}'
sequence:
- service: knx.send
data:
address: '{{ knx_mute_state_address }}'
payload: "{% if knx_mute_state_invert %}\n 0\n{% else %}\n 1\n{%
endif %}\n"
type: '1.001'
- variables:
last_mute_state: true
- conditions:
- condition: template
value_template: '{{ is_state_attr(media_player_entity, ''is_volume_muted'',
false) }}'
sequence:
- service: knx.send
data:
address: '{{ knx_mute_state_address }}'
payload: "{% if knx_mute_state_invert %}\n 1\n{% else %}\n 0\n{%
endif %}\n"
type: '1.001'
- variables:
last_mute_state: false