Skip to content

Commit 5e55a7b

Browse files
authored
Merge pull request #49 from music-assistant/TheFes-20250128-version_management
Version management
2 parents ed1146d + 09d284e commit 5e55a7b

File tree

8 files changed

+72
-194
lines changed

8 files changed

+72
-194
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
![Image](https://github.com/music-assistant/voice-support/blob/main/assets/music-assistant.png?raw=true)
2+
3+
# Changelog: Option 2 - LLM Enhanced automation
4+
5+
## 20250128
6+
7+
* Initial version when the changelog was created

llm-enhanced-local-assist-blueprint/mass_llm_enhanced_assist_blueprint_en.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -494,6 +494,7 @@ triggers:
494494
actions:
495495
- alias: Store input from blueprint in variables so they can be used in the prompt
496496
variables:
497+
version: 20250128
497498
expose_areas: !input expose_areas
498499
expose_players: !input expose_players
499500
prompt:

llm-script-blueprint/changelog.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
![Image](https://github.com/music-assistant/voice-support/blob/main/assets/music-assistant.png?raw=true)
2+
3+
# Changelog: Option 3 - Full LLM Script
4+
5+
## 20250128
6+
7+
* Initial version when the changelog was created

llm-script-blueprint/llm_voice_script.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -330,6 +330,7 @@ fields:
330330
description: !input media_player_prompt
331331
sequence:
332332
- variables:
333+
version: 20250128
333334
default_player: !input default_player
334335
player_data: "{% set ma = integration_entities('music_assistant') %}
335336
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
![Image](https://github.com/music-assistant/voice-support/blob/main/assets/music-assistant.png?raw=true)
2+
3+
# Changelog: Option 1 - Fully local automation
4+
5+
## 20250128
6+
7+
* Initial version when the changelog was created

local-assist-blueprint/mass_assist_blueprint_de.yaml

Lines changed: 24 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -84,108 +84,35 @@ triggers:
8484
conditions: []
8585
actions:
8686
- variables:
87+
version: 20250128
8788
default_player_entity_id: !input default_player_entity_id_input
8889
trigger_id: "{{ trigger.id }}"
89-
media_name: "{{ trigger.slots.media_name }}"
90-
media_type: |
91-
{% if 'radio' in media_name or 'Radio' in media_name %}
92-
radio
93-
{% else %}
94-
{{ trigger_id }}
95-
{% endif %}
96-
artist: "{{ trigger.slots.artist }}"
97-
area_or_player_name: "{{ trigger.slots.area_or_player_name }}"
90+
area_or_player_name: "{{ trigger.slots.area_or_player_name | default }}"
9891
assist_device_id: "{{ trigger.device_id }}"
99-
radio_mode_str: "{{ trigger.slots.radio_mode or '' }}"
100-
radio_mode: "{{ 'radio' in radio_mode_str.lower() }}"
92+
action_data:
93+
media_id: "{{ trigger.slots.media_name }}"
94+
media_type: "{{ 'radio' if 'radio' in media_name | lower else trigger_id }}"
95+
artist: "{{ trigger.slots.artist | default }}"
96+
radio_mode: "{{ 'radio' in trigger.slots.radio_mode | default | lower }}"
10197
player_entity_id_by_player_name: >
102-
{{ expand(integration_entities('music_assistant')) |
103-
selectattr("attributes.mass_player_type", 'defined') |
104-
selectattr("attributes.friendly_name", 'equalto', area_or_player_name) |
105-
join(', ', attribute="entity_id") }}
98+
{{ integration_entities('music_assistant') | expand
99+
| selectattr('name', 'match', area_or_player_name ~ '$', ignorecase=true)
100+
| map(attribute='entity_id') | list }}
106101
player_entity_id_by_area_name: >
107-
{{ expand(area_entities(area_or_player_name)) |
108-
selectattr("attributes.mass_player_type", 'defined') |
109-
selectattr("attributes.friendly_name", 'equalto', area_or_player_name) |
110-
join(', ', attribute="entity_id") }}
111-
player_entity_id_by_assist_area: |
112-
{% if assist_device_id and area_id(assist_device_id) %}
113-
{{ expand(area_entities(area_id(assist_device_id))) | selectattr("attributes.mass_player_type", 'defined') | join(', ', attribute="entity_id") }}
114-
{% else %}
115-
None
116-
{% endif %}
102+
{{ areas() | map('area_name') | select('match', area_or_player_name ~ '$',
103+
ignorecase=true) | map('area_entities') | sum(start=[]) | select('in',
104+
integration_entities('music_assistant')) | list }}
105+
player_entity_id_by_assist_area: >
106+
{{ area_entities(area_id(trigger.device_id))
107+
| select('in', integration_entities('music_assistant')) | list }}
117108
mass_player_entity_id: |
118-
{% if player_entity_id_by_player_name %}
119-
{{ player_entity_id_by_player_name }}
120-
{% elif player_entity_id_by_area_name %}
121-
{{ player_entity_id_by_area_name }}
122-
{% elif player_entity_id_by_assist_area %}
123-
{{ player_entity_id_by_assist_area }}
124-
{% else %}
125-
{{ default_player_entity_id }}
126-
{% endif %}
127-
mass_player_name: "{{ state_attr(mass_player_entity_id, 'friendly_name') }}"
128-
- choose:
129-
- conditions:
130-
- condition: template
131-
value_template: "{{ media_type == 'album' }}"
132-
sequence:
133-
- action: music_assistant.play_media
134-
metadata: {}
135-
data:
136-
media_id: "{{ media_name }}"
137-
artist: "{{ artist }}"
138-
media_type: "{{ media_type }}"
139-
radio_mode: "{{ radio_mode }}"
140-
target:
141-
entity_id: "{{ mass_player_entity_id }}"
142-
- conditions:
143-
- condition: template
144-
value_template: "{{ media_type == 'track' }}"
145-
sequence:
146-
- action: music_assistant.play_media
147-
metadata: {}
148-
data:
149-
media_id: "{{ media_name }}"
150-
artist: "{{ artist }}"
151-
media_type: "{{ media_type }}"
152-
radio_mode: "{{ radio_mode }}"
153-
target:
154-
entity_id: "{{ mass_player_entity_id }}"
155-
- conditions:
156-
- condition: template
157-
value_template: "{{ media_type == 'artist' }}"
158-
sequence:
159-
- action: music_assistant.play_media
160-
metadata: {}
161-
data:
162-
media_id: "{{ media_name }}"
163-
media_type: "{{ media_type }}"
164-
radio_mode: "{{ radio_mode }}"
165-
target:
166-
entity_id: "{{ mass_player_entity_id }}"
167-
- conditions:
168-
- condition: template
169-
value_template: "{{ media_type == 'radio' }}"
170-
sequence:
171-
- action: music_assistant.play_media
172-
metadata: {}
173-
data:
174-
media_id: "{{ media_name }}"
175-
media_type: "{{ media_type }}"
176-
target:
177-
entity_id: "{{ mass_player_entity_id }}"
178-
- conditions:
179-
- condition: template
180-
value_template: "{{ media_type == 'playlist' }}"
181-
sequence:
182-
- action: music_assistant.play_media
183-
metadata: {}
184-
data:
185-
media_id: "{{ media_name }}"
186-
media_type: "{{ media_type }}"
187-
radio_mode: "{{ radio_mode }}"
188-
target:
189-
entity_id: "{{ mass_player_entity_id }}"
109+
{{ player_entity_id_by_player_name or player_entity_id_by_area_name
110+
or player_entity_id_by_assist_area or [default_player_entity_id] }}
111+
mass_player_name: "{{ mass_player_entity_id | map('state_attr', 'friendly_name') | join(', ') }}"
112+
- alias: Send media to selected Music Assistant Player
113+
action: music_assistant.play_media
114+
data: "{{ dict(action_data.items() | selectattr('1')) }}"
115+
target:
116+
entity_id: "{{ mass_player_entity_id }}"
190117
- set_conversation_response: "{{ trigger.slots.media_name }} wird auf {{ mass_player_name }} abgespielt"
191118
mode: single

local-assist-blueprint/mass_assist_blueprint_en.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -174,6 +174,7 @@ triggers:
174174
actions:
175175
- alias: Define variables to be used in the automation
176176
variables:
177+
version: 20250128
177178
default_player_entity_id: !input default_player_entity_id_input
178179
trigger_id: "{{ trigger.id }}"
179180
area_or_player_name: "{{ trigger.slots.area_or_player_name | default }}"

local-assist-blueprint/mass_assist_blueprint_nl.yaml

Lines changed: 24 additions & 97 deletions
Original file line numberDiff line numberDiff line change
@@ -85,108 +85,35 @@ triggers:
8585
conditions: []
8686
actions:
8787
- variables:
88+
version: 20250128
8889
default_player_entity_id: !input default_player_entity_id_input
8990
trigger_id: "{{ trigger.id }}"
90-
media_name: "{{ trigger.slots.media_name }}"
91-
media_type: |
92-
{% if 'radio' in media_name or 'Radio' in media_name %}
93-
radio
94-
{% else %}
95-
{{ trigger_id }}
96-
{% endif %}
97-
artist: "{{ trigger.slots.artist }}"
98-
area_or_player_name: "{{ trigger.slots.area_or_player_name }}"
91+
area_or_player_name: "{{ trigger.slots.area_or_player_name | default }}"
9992
assist_device_id: "{{ trigger.device_id }}"
100-
radio_mode_str: "{{ trigger.slots.radio_mode or '' }}"
101-
radio_mode: "{{ 'radio' in radio_mode_str.lower() }}"
93+
action_data:
94+
media_id: "{{ trigger.slots.media_name }}"
95+
media_type: "{{ 'radio' if 'radio' in media_name | lower else trigger_id }}"
96+
artist: "{{ trigger.slots.artist | default }}"
97+
radio_mode: "{{ 'radio' in trigger.slots.radio_mode | default | lower }}"
10298
player_entity_id_by_player_name: >
103-
{{ expand(integration_entities('music_assistant')) |
104-
selectattr("attributes.mass_player_type", 'defined') |
105-
selectattr("attributes.friendly_name", 'equalto', area_or_player_name) |
106-
join(', ', attribute="entity_id") }}
99+
{{ integration_entities('music_assistant') | expand
100+
| selectattr('name', 'match', area_or_player_name ~ '$', ignorecase=true)
101+
| map(attribute='entity_id') | list }}
107102
player_entity_id_by_area_name: >
108-
{{ expand(area_entities(area_or_player_name)) |
109-
selectattr("attributes.mass_player_type", 'defined') |
110-
selectattr("attributes.friendly_name", 'equalto', area_or_player_name) |
111-
join(', ', attribute="entity_id") }}
112-
player_entity_id_by_assist_area: |
113-
{% if assist_device_id and area_id(assist_device_id) %}
114-
{{ expand(area_entities(area_id(assist_device_id))) | selectattr("attributes.mass_player_type", 'defined') | join(', ', attribute="entity_id") }}
115-
{% else %}
116-
None
117-
{% endif %}
103+
{{ areas() | map('area_name') | select('match', area_or_player_name ~ '$',
104+
ignorecase=true) | map('area_entities') | sum(start=[]) | select('in',
105+
integration_entities('music_assistant')) | list }}
106+
player_entity_id_by_assist_area: >
107+
{{ area_entities(area_id(trigger.device_id))
108+
| select('in', integration_entities('music_assistant')) | list }}
118109
mass_player_entity_id: |
119-
{% if player_entity_id_by_player_name %}
120-
{{ player_entity_id_by_player_name }}
121-
{% elif player_entity_id_by_area_name %}
122-
{{ player_entity_id_by_area_name }}
123-
{% elif player_entity_id_by_assist_area %}
124-
{{ player_entity_id_by_assist_area }}
125-
{% else %}
126-
{{ default_player_entity_id }}
127-
{% endif %}
128-
mass_player_name: "{{ state_attr(mass_player_entity_id, 'friendly_name') }}"
129-
- choose:
130-
- conditions:
131-
- condition: template
132-
value_template: "{{ media_type == 'album' }}"
133-
sequence:
134-
- action: music_assistant.play_media
135-
metadata: {}
136-
data:
137-
media_id: "{{ media_name }}"
138-
artist: "{{ artist }}"
139-
media_type: "{{ media_type }}"
140-
radio_mode: "{{ radio_mode }}"
141-
target:
142-
entity_id: "{{ mass_player_entity_id }}"
143-
- conditions:
144-
- condition: template
145-
value_template: "{{ media_type == 'track' }}"
146-
sequence:
147-
- action: music_assistant.play_media
148-
metadata: {}
149-
data:
150-
media_id: "{{ media_name }}"
151-
artist: "{{ artist }}"
152-
media_type: "{{ media_type }}"
153-
radio_mode: "{{ radio_mode }}"
154-
target:
155-
entity_id: "{{ mass_player_entity_id }}"
156-
- conditions:
157-
- condition: template
158-
value_template: "{{ media_type == 'artist' }}"
159-
sequence:
160-
- action: music_assistant.play_media
161-
metadata: {}
162-
data:
163-
media_id: "{{ media_name }}"
164-
media_type: "{{ media_type }}"
165-
radio_mode: "{{ radio_mode }}"
166-
target:
167-
entity_id: "{{ mass_player_entity_id }}"
168-
- conditions:
169-
- condition: template
170-
value_template: "{{ media_type == 'radio' }}"
171-
sequence:
172-
- action: music_assistant.play_media
173-
metadata: {}
174-
data:
175-
media_id: "{{ media_name }}"
176-
media_type: "{{ media_type }}"
177-
target:
178-
entity_id: "{{ mass_player_entity_id }}"
179-
- conditions:
180-
- condition: template
181-
value_template: "{{ media_type == 'playlist' }}"
182-
sequence:
183-
- action: music_assistant.play_media
184-
metadata: {}
185-
data:
186-
media_id: "{{ media_name }}"
187-
media_type: "{{ media_type }}"
188-
radio_mode: "{{ radio_mode }}"
189-
target:
190-
entity_id: "{{ mass_player_entity_id }}"
110+
{{ player_entity_id_by_player_name or player_entity_id_by_area_name
111+
or player_entity_id_by_assist_area or [default_player_entity_id] }}
112+
mass_player_name: "{{ mass_player_entity_id | map('state_attr', 'friendly_name') | join(', ') }}"
113+
- alias: Send media to selected Music Assistant Player
114+
action: music_assistant.play_media
115+
data: "{{ dict(action_data.items() | selectattr('1')) }}"
116+
target:
117+
entity_id: "{{ mass_player_entity_id }}"
191118
- set_conversation_response: "{{ trigger.slots.media_name }} wordt afgespeeld op {{ mass_player_name }}"
192119
mode: single

0 commit comments

Comments
 (0)