refactor(hass): restructure files with sentences
All checks were successful
Discord / discord commits (push) Has been skipped
All checks were successful
Discord / discord commits (push) Has been skipped
This commit is contained in:
parent
ce4f9c23ec
commit
fdb7c08643
6 changed files with 346 additions and 323 deletions
|
@ -8,9 +8,10 @@
|
||||||
./bluetooth.nix
|
./bluetooth.nix
|
||||||
./firmware.nix
|
./firmware.nix
|
||||||
./frontend.nix
|
./frontend.nix
|
||||||
|
|
||||||
./netdaemon
|
./netdaemon
|
||||||
./spotify.nix
|
./spotify
|
||||||
./timer.nix
|
./timer
|
||||||
|
|
||||||
self.nixosModules.ha-plus
|
self.nixosModules.ha-plus
|
||||||
];
|
];
|
||||||
|
|
|
@ -1,108 +0,0 @@
|
||||||
{
|
|
||||||
language = "en";
|
|
||||||
|
|
||||||
intents = {
|
|
||||||
PlayAlbum.data = [
|
|
||||||
{
|
|
||||||
sentences = [
|
|
||||||
"play[ing] [the] album {album} from [the] [artist] {artist}"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
sentences = [
|
|
||||||
"play[ing] [the] album {album}"
|
|
||||||
];
|
|
||||||
slots.artist = "";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
PlayArtist.data = [
|
|
||||||
{
|
|
||||||
sentences = [
|
|
||||||
"play[ing] [some] music from [the] [artist] {artist}"
|
|
||||||
"play[ing] [the] artist {artist}"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
PlayPlaylist.data = [
|
|
||||||
{
|
|
||||||
sentences = [
|
|
||||||
"play[ing] [(the|my)] playlist {playlist}"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
PlaySong.data = [
|
|
||||||
{
|
|
||||||
sentences = [
|
|
||||||
"play[ing] [the] (song|track) {song} from [the] [artist] {artist}"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
{
|
|
||||||
sentences = [
|
|
||||||
"play[ing] [the] (song|track) {song}"
|
|
||||||
];
|
|
||||||
slots.artist = "";
|
|
||||||
}
|
|
||||||
];
|
|
||||||
|
|
||||||
Pause.data = [
|
|
||||||
{
|
|
||||||
sentences = [
|
|
||||||
"(pause|stop) [the] [(song|track|music)]"
|
|
||||||
"(pause|stop) spotify"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
Unpause.data = [
|
|
||||||
{
|
|
||||||
sentences = [
|
|
||||||
"(unpause|resume) [the] [(song|track|music)]"
|
|
||||||
"(unpause|resume) spotify"
|
|
||||||
];
|
|
||||||
}
|
|
||||||
];
|
|
||||||
};
|
|
||||||
|
|
||||||
lists = {
|
|
||||||
album.wildcard = true;
|
|
||||||
artist.wildcard = true;
|
|
||||||
playlist.wildcard = true;
|
|
||||||
song.wildcard = true;
|
|
||||||
};
|
|
||||||
|
|
||||||
responses.intents = {
|
|
||||||
PlayAlbum.default = ''
|
|
||||||
Searching for the album {{ slots.album }}
|
|
||||||
{% if slots.artist != "" %}
|
|
||||||
by {{ slots.artist }}
|
|
||||||
{% endif %}
|
|
||||||
on Spotify and playing it.
|
|
||||||
'';
|
|
||||||
|
|
||||||
PlayArtist.default = ''
|
|
||||||
Searching for the artist {{ slots.artist }} on Spotify and playing their top songs.
|
|
||||||
'';
|
|
||||||
|
|
||||||
PlayPlaylist.default = ''
|
|
||||||
Searching for {{ slots.playlist }} in your favorites, or elsewhere if not found, and playing it.
|
|
||||||
'';
|
|
||||||
|
|
||||||
PlaySong.default = ''
|
|
||||||
Searching for the song {{ slots.song }}
|
|
||||||
{% if slots.artist != "" %}
|
|
||||||
by {{ slots.artist }}
|
|
||||||
{% endif %}
|
|
||||||
on Spotify and playing it.
|
|
||||||
'';
|
|
||||||
|
|
||||||
Pause.default = ''
|
|
||||||
Pausing the music.
|
|
||||||
'';
|
|
||||||
|
|
||||||
Unpause.default = ''
|
|
||||||
Resuming the music.
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
|
|
@ -16,7 +16,7 @@
|
||||||
"spotify"
|
"spotify"
|
||||||
];
|
];
|
||||||
|
|
||||||
customSentences."assist_spotify" = import ./spotify-sentences.nix;
|
customSentences."assist_spotify" = import ./sentences.nix;
|
||||||
|
|
||||||
configFiles.
|
configFiles.
|
||||||
".storage/SpotifyWebApiPython_librespot_credentials.json"
|
".storage/SpotifyWebApiPython_librespot_credentials.json"
|
129
devices/homie/modules/home-assistant/spotify/sentences.nix
Normal file
129
devices/homie/modules/home-assistant/spotify/sentences.nix
Normal file
|
@ -0,0 +1,129 @@
|
||||||
|
{
|
||||||
|
language = "en";
|
||||||
|
|
||||||
|
lists = {
|
||||||
|
album.wildcard = true;
|
||||||
|
artist.wildcard = true;
|
||||||
|
playlist.wildcard = true;
|
||||||
|
song.wildcard = true;
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# PlayAlbum
|
||||||
|
# ---------------------------------------
|
||||||
|
intents.PlayAlbum.data = [
|
||||||
|
{
|
||||||
|
sentences = [
|
||||||
|
"play[ing] [the] album {album} from [the] [artist] {artist}"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
sentences = [
|
||||||
|
"play[ing] [the] album {album}"
|
||||||
|
];
|
||||||
|
slots.artist = "";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
responses.intents.PlayAlbum.default = ''
|
||||||
|
Searching for the album {{ slots.album }}
|
||||||
|
{% if slots.artist != "" %}
|
||||||
|
by {{ slots.artist }}
|
||||||
|
{% endif %}
|
||||||
|
on Spotify and playing it.
|
||||||
|
'';
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# PlayArtist
|
||||||
|
# ---------------------------------------
|
||||||
|
intents.PlayArtist.data = [
|
||||||
|
{
|
||||||
|
sentences = [
|
||||||
|
"play[ing] [some] music from [the] [artist] {artist}"
|
||||||
|
"play[ing] [the] artist {artist}"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
responses.intents.PlayArtist.default = ''
|
||||||
|
Searching for the artist {{ slots.artist }} on Spotify and playing their top songs.
|
||||||
|
'';
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# PlayPlaylist
|
||||||
|
# ---------------------------------------
|
||||||
|
intents.PlayPlaylist.data = [
|
||||||
|
{
|
||||||
|
sentences = [
|
||||||
|
"play[ing] [(the|my)] playlist {playlist}"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
responses.intents.PlayPlaylist.default = ''
|
||||||
|
Searching for {{ slots.playlist }} in your favorites, or elsewhere if not found, and playing it.
|
||||||
|
'';
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# PlaySong
|
||||||
|
# ---------------------------------------
|
||||||
|
intents.PlaySong.data = [
|
||||||
|
{
|
||||||
|
sentences = [
|
||||||
|
"play[ing] [the] (song|track) {song} from [the] [artist] {artist}"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
{
|
||||||
|
sentences = [
|
||||||
|
"play[ing] [the] (song|track) {song}"
|
||||||
|
];
|
||||||
|
slots.artist = "";
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
responses.intents.PlaySong.default = ''
|
||||||
|
Searching for the song {{ slots.song }}
|
||||||
|
{% if slots.artist != "" %}
|
||||||
|
by {{ slots.artist }}
|
||||||
|
{% endif %}
|
||||||
|
on Spotify and playing it.
|
||||||
|
'';
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Pause
|
||||||
|
# ---------------------------------------
|
||||||
|
intents.Pause.data = [
|
||||||
|
{
|
||||||
|
sentences = [
|
||||||
|
"(pause|stop) [the] [(song|track|music)]"
|
||||||
|
"(pause|stop) spotify"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
responses.intents.Pause.default = ''
|
||||||
|
Pausing the music.
|
||||||
|
'';
|
||||||
|
|
||||||
|
|
||||||
|
# ---------------------------------------
|
||||||
|
# Unpause
|
||||||
|
# ---------------------------------------
|
||||||
|
intents.Unpause.data = [
|
||||||
|
{
|
||||||
|
sentences = [
|
||||||
|
"(unpause|resume) [the] [(song|track|music)]"
|
||||||
|
"(unpause|resume) spotify"
|
||||||
|
];
|
||||||
|
}
|
||||||
|
];
|
||||||
|
|
||||||
|
responses.intents.Unpause.default = ''
|
||||||
|
Resuming the music.
|
||||||
|
'';
|
||||||
|
}
|
|
@ -1,3 +1,4 @@
|
||||||
|
# TODO: rewrite this in NetDaemon
|
||||||
# From https://github.com/don86nl/ha_intents/blob/main/config/packages/assist_timers.yaml
|
# From https://github.com/don86nl/ha_intents/blob/main/config/packages/assist_timers.yaml
|
||||||
{lib, ...}: let
|
{lib, ...}: let
|
||||||
inherit (lib) concatStrings concatStringsSep;
|
inherit (lib) concatStrings concatStringsSep;
|
||||||
|
@ -39,7 +40,7 @@
|
||||||
};
|
};
|
||||||
in {
|
in {
|
||||||
services.home-assistant = {
|
services.home-assistant = {
|
||||||
customSentences."assist_timers" = import ./timer-sentences.nix;
|
customSentences."assist_timers" = import ./sentences.nix;
|
||||||
|
|
||||||
config = {
|
config = {
|
||||||
homeassistant.customize."script.assist_timerstart" = {inherit settings;};
|
homeassistant.customize."script.assist_timerstart" = {inherit settings;};
|
|
@ -123,6 +123,217 @@
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
responses.intents = {
|
||||||
|
TimerDuration.default = ''
|
||||||
|
{%- set timer_amount = states.timer
|
||||||
|
| selectattr('state','eq','active')
|
||||||
|
| selectattr('entity_id','match','timer.assist_timer*')
|
||||||
|
| map(attribute='entity_id')
|
||||||
|
| list
|
||||||
|
| length -%}
|
||||||
|
|
||||||
|
{% if timer_amount == 0 %}
|
||||||
|
There are no timers active.
|
||||||
|
{% else %}
|
||||||
|
{%- if slots.entity_id != 'all' and slots.entity_id != 'null' %}
|
||||||
|
{%- set active_timers = states.timer
|
||||||
|
| selectattr('state','eq','active')
|
||||||
|
| selectattr('entity_id','match',slots.entity_id)
|
||||||
|
| list -%}
|
||||||
|
{%- else%}
|
||||||
|
{%- set active_timers = states.timer
|
||||||
|
| selectattr('state','eq','active')
|
||||||
|
| selectattr('entity_id','match','timer.assist_timer*')
|
||||||
|
| list -%}
|
||||||
|
{%- endif %}
|
||||||
|
|
||||||
|
{% if active_timers|length == 0 %}
|
||||||
|
{%- if slots.entity_id != 'all' and slots.entity_id != 'null' %}
|
||||||
|
This timer is not active.
|
||||||
|
{%- else %}
|
||||||
|
There are no timers active.
|
||||||
|
{%- endif %}
|
||||||
|
{% elif active_timers|length > 1 %}
|
||||||
|
There are {{active_timers|length }} timers active.
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% for timer in active_timers %}
|
||||||
|
{% set timer_id = timer.entity_id %}
|
||||||
|
{% set timer_finishes_at = state_attr(timer_id, 'finishes_at') %}
|
||||||
|
|
||||||
|
{% set time_remaining = as_datetime(timer_finishes_at) - now() %}
|
||||||
|
{% set hours_remaining = time_remaining.total_seconds() // 3600 %}
|
||||||
|
{% set minutes_remaining = (time_remaining.total_seconds() % 3600) // 60 %}
|
||||||
|
{% set seconds_remaining = time_remaining.total_seconds() % 60 %}
|
||||||
|
|
||||||
|
{% if timer.state == "active" or timer.state == "paused" %}
|
||||||
|
{% if slots.entity_id != timer_id %}
|
||||||
|
{{ state_attr(timer_id, 'friendly_name')[9:] }}
|
||||||
|
|
||||||
|
{% if timer.state == "paused" %}
|
||||||
|
is paused and
|
||||||
|
{% endif %}
|
||||||
|
has
|
||||||
|
{% else %}
|
||||||
|
There are
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if hours_remaining > 0 %}
|
||||||
|
{{ hours_remaining | round }} hours
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if minutes_remaining == 1 %}
|
||||||
|
1 minute
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if minutes_remaining > 1 %}
|
||||||
|
{{ minutes_remaining | round }} minutes
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if seconds_remaining == 1 and hours_remaining == 0%}
|
||||||
|
1 seconde
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if seconds_remaining > 1 and hours_remaining == 0 %}
|
||||||
|
{{ seconds_remaining | round }} seconds
|
||||||
|
{% endif %}
|
||||||
|
remaining.
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
'';
|
||||||
|
|
||||||
|
TimerPause.default = ''
|
||||||
|
{%- if slots.timer_action is set or slots.timer_action != "" -%}
|
||||||
|
{%- set timer_action = slots.timer_action -%}
|
||||||
|
{%- else -%}
|
||||||
|
{%- set timer_action = "resume" -%}
|
||||||
|
{%- endif -%}
|
||||||
|
|
||||||
|
{%- set timer_amount = states.timer
|
||||||
|
| selectattr('state','eq','active')
|
||||||
|
| selectattr('entity_id','match','timer.assist_timer*')
|
||||||
|
| map(attribute='entity_id')
|
||||||
|
| list
|
||||||
|
| length -%}
|
||||||
|
|
||||||
|
{% if timer_amount == 0 %}
|
||||||
|
There are no timers active.
|
||||||
|
|
||||||
|
{% elif timer_amount > 1 and slots.entity_id == 'null' %}
|
||||||
|
There are multiple timers active.
|
||||||
|
{{ (["Please specify which timer you mean.", "Please specify which timer.", "Specify which timer you mean.", ""] | random) }}
|
||||||
|
|
||||||
|
{% elif slots.entity_id == 'all' %}
|
||||||
|
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}.
|
||||||
|
All timers
|
||||||
|
{% if timer_action == "pause" %}
|
||||||
|
paused
|
||||||
|
{% else %}
|
||||||
|
resumed
|
||||||
|
{% endif %}
|
||||||
|
.
|
||||||
|
|
||||||
|
{% elif (as_timestamp(now()) - as_timestamp(states.timer.assist_timer1.last_changed) < 3 and states('timer.assist_timer1') == 'idle') or
|
||||||
|
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer2.last_changed) < 3 and states('timer.assist_timer2') == 'idle') or
|
||||||
|
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer3.last_changed) < 3 and states('timer.assist_timer3') == 'idle') %}
|
||||||
|
Timer
|
||||||
|
{% if timer_action == "pause" %}
|
||||||
|
paused
|
||||||
|
{% else %}
|
||||||
|
resumed
|
||||||
|
{% endif %}
|
||||||
|
.
|
||||||
|
|
||||||
|
{% elif (timer_amount == 1 and slots.entity_id == 'null') or
|
||||||
|
(slots.entity_id == 'timer.assist_timer1' and states('timer.assist_timer1') != 'idle') or
|
||||||
|
(slots.entity_id == 'timer.assist_timer2' and states('timer.assist_timer2') != 'idle') or
|
||||||
|
(slots.entity_id == 'timer.assist_timer3' and states('timer.assist_timer3') != 'idle') %}
|
||||||
|
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}Timer
|
||||||
|
{% if timer_action == "pause" %}
|
||||||
|
paused
|
||||||
|
{% else %}
|
||||||
|
resumed
|
||||||
|
{% endif %}
|
||||||
|
.
|
||||||
|
{% else %}
|
||||||
|
|
||||||
|
This timer is not active.
|
||||||
|
{% endif %}
|
||||||
|
'';
|
||||||
|
|
||||||
|
TimerStart.default = ''
|
||||||
|
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) +
|
||||||
|
(["I will start a timer for ", "Timer started with ", "Starting timer with ", "Timer active for "] | random)}}
|
||||||
|
|
||||||
|
{% if (slots.hours | int(default=0)) == 1 %}
|
||||||
|
1 hour
|
||||||
|
{% elif (slots.hours | int(default=0)) > 1 %}
|
||||||
|
{{ (slots.hours | int)}} hours
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if (slots.hours | int(default=0)) > 0 and ((slots.minutes | int(default=0)) > 0 or (slots.seconds | int(default=0)) > 0) %}
|
||||||
|
and
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if (slots.minutes | int(default=0)) == 1 %}
|
||||||
|
1 minute
|
||||||
|
{% elif (slots.minutes | int(default=0)) > 1 %}
|
||||||
|
{{ (slots.minutes | int)}} minutes
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if (slots.minutes | int(default=0)) > 0 and (slots.seconds | int(default=0)) > 0 %}
|
||||||
|
and
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
{% if (slots.seconds | int(default=0)) == 1 %}
|
||||||
|
1 second
|
||||||
|
{% elif (slots.seconds | int(default=0)) > 1 %}
|
||||||
|
{{ (slots.seconds | int)}} secondes
|
||||||
|
{% endif %}.
|
||||||
|
'';
|
||||||
|
|
||||||
|
TimerStop.default = ''
|
||||||
|
{%- set timer_amount = states.timer
|
||||||
|
| selectattr('state','eq','active')
|
||||||
|
| selectattr('entity_id','match','timer.assist_timer*')
|
||||||
|
| map(attribute='entity_id')
|
||||||
|
| list
|
||||||
|
| length -%}
|
||||||
|
|
||||||
|
{% set mediaplayer = namespace(entity=[]) %}
|
||||||
|
|
||||||
|
{% for player in states.media_player %}
|
||||||
|
{%- if ((state_attr(player.entity_id, 'media_content_id') | lower != 'none'
|
||||||
|
and state_attr(player.entity_id, 'media_content_id')[:47][38:] == 'Timer.mp3')
|
||||||
|
or state_attr(player.entity_id, 'media_title') | lower == 'timer')
|
||||||
|
and states(player.entity_id) == 'playing' -%}
|
||||||
|
{%- set mediaplayer.entity = player.entity_id -%}
|
||||||
|
{% endif -%}
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% if mediaplayer.entity[:12] == 'media_player' %}
|
||||||
|
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}Timer stopped.
|
||||||
|
{% elif timer_amount == 0 and
|
||||||
|
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer1.last_changed) > 3 and states('timer.assist_timer1') == 'idle') and
|
||||||
|
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer2.last_changed) > 3 and states('timer.assist_timer2') == 'idle') and
|
||||||
|
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer3.last_changed) > 3 and states('timer.assist_timer3') == 'idle') %}
|
||||||
|
There are no timers active.
|
||||||
|
{% elif (slots_entity_id == 'timer.assist_timer1' and states('timer.assist_timer1') == 'idle') or
|
||||||
|
(slots_entity_id == 'timer.assist_timer2' and states('timer.assist_timer2') == 'idle') or
|
||||||
|
(slots_entity_id == 'timer.assist_timer3' and states('timer.assist_timer3') == 'idle') %}
|
||||||
|
This timer is not active.
|
||||||
|
{% elif timer_amount > 1 and slots_entity_id == 'null' %}
|
||||||
|
There are multiple timers active.
|
||||||
|
{{ (["Please specify which timer you mean.", "Please specify which timer.", "Specify which timer you mean.", ""] | random) }}
|
||||||
|
{% elif slots_entity_id == 'all' %}
|
||||||
|
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}All timers stopped.
|
||||||
|
{% else %}
|
||||||
|
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}Timer stopped.
|
||||||
|
{% endif %}
|
||||||
|
'';
|
||||||
|
};
|
||||||
|
|
||||||
lists = {
|
lists = {
|
||||||
entity_id.values = [
|
entity_id.values = [
|
||||||
{
|
{
|
||||||
|
@ -728,215 +939,4 @@
|
||||||
}
|
}
|
||||||
];
|
];
|
||||||
};
|
};
|
||||||
|
|
||||||
responses.intents = {
|
|
||||||
TimerDuration.default = ''
|
|
||||||
{%- set timer_amount = states.timer
|
|
||||||
| selectattr('state','eq','active')
|
|
||||||
| selectattr('entity_id','match','timer.assist_timer*')
|
|
||||||
| map(attribute='entity_id')
|
|
||||||
| list
|
|
||||||
| length -%}
|
|
||||||
|
|
||||||
{% if timer_amount == 0 %}
|
|
||||||
There are no timers active.
|
|
||||||
{% else %}
|
|
||||||
{%- if slots.entity_id != 'all' and slots.entity_id != 'null' %}
|
|
||||||
{%- set active_timers = states.timer
|
|
||||||
| selectattr('state','eq','active')
|
|
||||||
| selectattr('entity_id','match',slots.entity_id)
|
|
||||||
| list -%}
|
|
||||||
{%- else%}
|
|
||||||
{%- set active_timers = states.timer
|
|
||||||
| selectattr('state','eq','active')
|
|
||||||
| selectattr('entity_id','match','timer.assist_timer*')
|
|
||||||
| list -%}
|
|
||||||
{%- endif %}
|
|
||||||
|
|
||||||
{% if active_timers|length == 0 %}
|
|
||||||
{%- if slots.entity_id != 'all' and slots.entity_id != 'null' %}
|
|
||||||
This timer is not active.
|
|
||||||
{%- else %}
|
|
||||||
There are no timers active.
|
|
||||||
{%- endif %}
|
|
||||||
{% elif active_timers|length > 1 %}
|
|
||||||
There are {{active_timers|length }} timers active.
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% for timer in active_timers %}
|
|
||||||
{% set timer_id = timer.entity_id %}
|
|
||||||
{% set timer_finishes_at = state_attr(timer_id, 'finishes_at') %}
|
|
||||||
|
|
||||||
{% set time_remaining = as_datetime(timer_finishes_at) - now() %}
|
|
||||||
{% set hours_remaining = time_remaining.total_seconds() // 3600 %}
|
|
||||||
{% set minutes_remaining = (time_remaining.total_seconds() % 3600) // 60 %}
|
|
||||||
{% set seconds_remaining = time_remaining.total_seconds() % 60 %}
|
|
||||||
|
|
||||||
{% if timer.state == "active" or timer.state == "paused" %}
|
|
||||||
{% if slots.entity_id != timer_id %}
|
|
||||||
{{ state_attr(timer_id, 'friendly_name')[9:] }}
|
|
||||||
|
|
||||||
{% if timer.state == "paused" %}
|
|
||||||
is paused and
|
|
||||||
{% endif %}
|
|
||||||
has
|
|
||||||
{% else %}
|
|
||||||
There are
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if hours_remaining > 0 %}
|
|
||||||
{{ hours_remaining | round }} hours
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if minutes_remaining == 1 %}
|
|
||||||
1 minute
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if minutes_remaining > 1 %}
|
|
||||||
{{ minutes_remaining | round }} minutes
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if seconds_remaining == 1 and hours_remaining == 0%}
|
|
||||||
1 seconde
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if seconds_remaining > 1 and hours_remaining == 0 %}
|
|
||||||
{{ seconds_remaining | round }} seconds
|
|
||||||
{% endif %}
|
|
||||||
remaining.
|
|
||||||
{% endif %}
|
|
||||||
{% endfor %}
|
|
||||||
{% endif %}
|
|
||||||
'';
|
|
||||||
|
|
||||||
TimerPause.default = ''
|
|
||||||
{%- if slots.timer_action is set or slots.timer_action != "" -%}
|
|
||||||
{%- set timer_action = slots.timer_action -%}
|
|
||||||
{%- else -%}
|
|
||||||
{%- set timer_action = "resume" -%}
|
|
||||||
{%- endif -%}
|
|
||||||
|
|
||||||
{%- set timer_amount = states.timer
|
|
||||||
| selectattr('state','eq','active')
|
|
||||||
| selectattr('entity_id','match','timer.assist_timer*')
|
|
||||||
| map(attribute='entity_id')
|
|
||||||
| list
|
|
||||||
| length -%}
|
|
||||||
|
|
||||||
{% if timer_amount == 0 %}
|
|
||||||
There are no timers active.
|
|
||||||
|
|
||||||
{% elif timer_amount > 1 and slots.entity_id == 'null' %}
|
|
||||||
There are multiple timers active.
|
|
||||||
{{ (["Please specify which timer you mean.", "Please specify which timer.", "Specify which timer you mean.", ""] | random) }}
|
|
||||||
|
|
||||||
{% elif slots.entity_id == 'all' %}
|
|
||||||
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}.
|
|
||||||
All timers
|
|
||||||
{% if timer_action == "pause" %}
|
|
||||||
paused
|
|
||||||
{% else %}
|
|
||||||
resumed
|
|
||||||
{% endif %}
|
|
||||||
.
|
|
||||||
|
|
||||||
{% elif (as_timestamp(now()) - as_timestamp(states.timer.assist_timer1.last_changed) < 3 and states('timer.assist_timer1') == 'idle') or
|
|
||||||
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer2.last_changed) < 3 and states('timer.assist_timer2') == 'idle') or
|
|
||||||
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer3.last_changed) < 3 and states('timer.assist_timer3') == 'idle') %}
|
|
||||||
Timer
|
|
||||||
{% if timer_action == "pause" %}
|
|
||||||
paused
|
|
||||||
{% else %}
|
|
||||||
resumed
|
|
||||||
{% endif %}
|
|
||||||
.
|
|
||||||
|
|
||||||
{% elif (timer_amount == 1 and slots.entity_id == 'null') or
|
|
||||||
(slots.entity_id == 'timer.assist_timer1' and states('timer.assist_timer1') != 'idle') or
|
|
||||||
(slots.entity_id == 'timer.assist_timer2' and states('timer.assist_timer2') != 'idle') or
|
|
||||||
(slots.entity_id == 'timer.assist_timer3' and states('timer.assist_timer3') != 'idle') %}
|
|
||||||
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}Timer
|
|
||||||
{% if timer_action == "pause" %}
|
|
||||||
paused
|
|
||||||
{% else %}
|
|
||||||
resumed
|
|
||||||
{% endif %}
|
|
||||||
.
|
|
||||||
{% else %}
|
|
||||||
|
|
||||||
This timer is not active.
|
|
||||||
{% endif %}
|
|
||||||
'';
|
|
||||||
|
|
||||||
TimerStart.default = ''
|
|
||||||
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) +
|
|
||||||
(["I will start a timer for ", "Timer started with ", "Starting timer with ", "Timer active for "] | random)}}
|
|
||||||
|
|
||||||
{% if (slots.hours | int(default=0)) == 1 %}
|
|
||||||
1 hour
|
|
||||||
{% elif (slots.hours | int(default=0)) > 1 %}
|
|
||||||
{{ (slots.hours | int)}} hours
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if (slots.hours | int(default=0)) > 0 and ((slots.minutes | int(default=0)) > 0 or (slots.seconds | int(default=0)) > 0) %}
|
|
||||||
and
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if (slots.minutes | int(default=0)) == 1 %}
|
|
||||||
1 minute
|
|
||||||
{% elif (slots.minutes | int(default=0)) > 1 %}
|
|
||||||
{{ (slots.minutes | int)}} minutes
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if (slots.minutes | int(default=0)) > 0 and (slots.seconds | int(default=0)) > 0 %}
|
|
||||||
and
|
|
||||||
{% endif %}
|
|
||||||
|
|
||||||
{% if (slots.seconds | int(default=0)) == 1 %}
|
|
||||||
1 second
|
|
||||||
{% elif (slots.seconds | int(default=0)) > 1 %}
|
|
||||||
{{ (slots.seconds | int)}} secondes
|
|
||||||
{% endif %}.
|
|
||||||
'';
|
|
||||||
|
|
||||||
TimerStop.default = ''
|
|
||||||
{%- set timer_amount = states.timer
|
|
||||||
| selectattr('state','eq','active')
|
|
||||||
| selectattr('entity_id','match','timer.assist_timer*')
|
|
||||||
| map(attribute='entity_id')
|
|
||||||
| list
|
|
||||||
| length -%}
|
|
||||||
|
|
||||||
{% set mediaplayer = namespace(entity=[]) %}
|
|
||||||
|
|
||||||
{% for player in states.media_player %}
|
|
||||||
{%- if ((state_attr(player.entity_id, 'media_content_id') | lower != 'none'
|
|
||||||
and state_attr(player.entity_id, 'media_content_id')[:47][38:] == 'Timer.mp3')
|
|
||||||
or state_attr(player.entity_id, 'media_title') | lower == 'timer')
|
|
||||||
and states(player.entity_id) == 'playing' -%}
|
|
||||||
{%- set mediaplayer.entity = player.entity_id -%}
|
|
||||||
{% endif -%}
|
|
||||||
{% endfor %}
|
|
||||||
|
|
||||||
{% if mediaplayer.entity[:12] == 'media_player' %}
|
|
||||||
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}Timer stopped.
|
|
||||||
{% elif timer_amount == 0 and
|
|
||||||
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer1.last_changed) > 3 and states('timer.assist_timer1') == 'idle') and
|
|
||||||
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer2.last_changed) > 3 and states('timer.assist_timer2') == 'idle') and
|
|
||||||
(as_timestamp(now()) - as_timestamp(states.timer.assist_timer3.last_changed) > 3 and states('timer.assist_timer3') == 'idle') %}
|
|
||||||
There are no timers active.
|
|
||||||
{% elif (slots_entity_id == 'timer.assist_timer1' and states('timer.assist_timer1') == 'idle') or
|
|
||||||
(slots_entity_id == 'timer.assist_timer2' and states('timer.assist_timer2') == 'idle') or
|
|
||||||
(slots_entity_id == 'timer.assist_timer3' and states('timer.assist_timer3') == 'idle') %}
|
|
||||||
This timer is not active.
|
|
||||||
{% elif timer_amount > 1 and slots_entity_id == 'null' %}
|
|
||||||
There are multiple timers active.
|
|
||||||
{{ (["Please specify which timer you mean.", "Please specify which timer.", "Specify which timer you mean.", ""] | random) }}
|
|
||||||
{% elif slots_entity_id == 'all' %}
|
|
||||||
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}All timers stopped.
|
|
||||||
{% else %}
|
|
||||||
{{ (["Understood. ", "Okay. ", "Of course. ", ""] | random) }}Timer stopped.
|
|
||||||
{% endif %}
|
|
||||||
'';
|
|
||||||
};
|
|
||||||
}
|
}
|
Loading…
Reference in a new issue