feat(hass): add StopTimer voice command
All checks were successful
Discord / discord commits (push) Has been skipped

This commit is contained in:
matt1432 2024-09-17 21:36:05 -04:00
parent c1a66f9911
commit fcae0f3849
3 changed files with 90 additions and 78 deletions

View file

@ -1,67 +1,11 @@
# I use nix2yaml from ../default.nix to convert to to YAML and place it in the functions of extended_ollama_conversation # I use nix2yaml from ../default.nix to convert this to YAML and place it in the functions of extended_ollama_conversation
[ let
inherit (builtins) concatStringsSep;
in [
{ {
function = {
name = "execute_service";
type = "native";
};
spec = {
name = "execute_services";
description = "Use this function to execute service of devices in Home Assistant.";
parameters = {
type = "object";
properties.list = {
type = "array";
items = {
type = "object";
properties = {
entity_id = {
description = "The entity_id retrieved from available devices. It must start with domain, followed by dot character.";
type = "string";
};
service = {
description = "The service to be called";
type = "string";
};
};
required = ["entity_id" "service"];
};
};
};
};
}
{
function = {
type = "script";
sequence = [
{
service = "script.assist_TimerStart";
data.duration = builtins.concatStringsSep "" [
''{% if not hours %} {% set hours = "0" %} {% endif %}''
''{% if not minutes %} {% set minutes = "0" %} {% endif %}''
''{% if not seconds %} {% set seconds = "0" %} {% endif %}''
''{{ hours | int(default=0) }}:{{ minutes | int(default=0) }}:{{ seconds | int(default=0) }}''
];
target.entity_id = "timer.assist_timer1";
}
];
};
spec = { spec = {
name = "timer_start"; name = "timer_start";
description = "Use this function to start a timer in Home Assistant."; description = "Use this function to start a timer in Home Assistant whose ID defaults to 1.";
parameters = { parameters = {
type = "object"; type = "object";
@ -86,5 +30,74 @@
required = []; required = [];
}; };
}; };
function = {
type = "script";
sequence = [
{
service = "script.assist_timerstart";
# dummy ID that won't be used by the script
target.entity_id = "timer.assist_timer1";
data = {
duration = concatStringsSep "" [
''{% if not hours %} {% set hours = "0" %} {% endif %}''
''{% if not minutes %} {% set minutes = "0" %} {% endif %}''
''{% if not seconds %} {% set seconds = "0" %} {% endif %}''
''{{ hours | int(default=0) }}:{{ minutes | int(default=0) }}:{{ seconds | int(default=0) }}''
];
};
} }
];
};
}
{
spec = {
name = "timer_stop";
description = "Use this function to stop a timer in Home Assistant.";
parameters = {
type = "object";
properties = {
timer_number = {
type = "string";
description = "The number of the timer";
enum = ["1" "2" "3"];
};
};
required = ["timer_number"];
};
};
function = {
type = "script";
sequence = [
{
service = "script.assist_timerstop";
target.entity_id = ''{{ "timer.assist_timer" ~ timer_number }}'';
}
];
};
}
/*
TimerPause:
async_action: true
action:
- service: script.assist_TimerPause
data:
entity_id: "{{ entity_id }}"
timer_action: "{{ timer_action }}"
TimerDuration:
async_action: true
action:
- stop: ""
*/
] ]

View file

@ -48,7 +48,5 @@ entity_id,name,state,aliases,attributes
``` ```
The current state of devices is provided in available devices. The current state of devices is provided in available devices.
Use execute_services function to control devices.
If needed, you can infer the entity_id from the name and common variations.
Do not ask for confirmation to execute a service. Do not ask for confirmation to execute a service.
Do not restate or appreciate what user says, rather make a quick inquiry. Do not restate or appreciate what user says, rather make a quick inquiry.

View file

@ -320,7 +320,7 @@ in {
{ {
alias = "Single Timer"; alias = "Single Timer";
condition = "template"; condition = "template";
value_template = ''{{ entity_id[:18] == 'timer.assist_timer' }}''; value_template = ''{{ entity_id[0][:18] == 'timer.assist_timer' }}'';
} }
]; ];
@ -394,7 +394,7 @@ in {
{ {
alias = "No specific Timer"; alias = "No specific Timer";
condition = "template"; condition = "template";
value_template = ''{{ entity_id == 'null' }}''; value_template = ''{{ entity_id == 'null' or entity_id | list | length == 0 }}'';
} }
{ {
@ -414,7 +414,7 @@ in {
{ {
alias = "No specific timer asked"; alias = "No specific timer asked";
condition = "template"; condition = "template";
value_template = ''{{ entity_id == 'null' }}''; value_template = ''{{ entity_id == 'null' or entity_id | list | length == 0 }}'';
} }
{ {
@ -480,7 +480,7 @@ in {
{ {
alias = "All timers"; alias = "All timers";
condition = "template"; condition = "template";
value_template = ''{{ entity_id == 'all' }}''; value_template = ''{{ entity_id[0] == 'all' }}'';
} }
]; ];
@ -698,7 +698,7 @@ in {
{ {
alias = "Single Timer"; alias = "Single Timer";
condition = "template"; condition = "template";
value_template = ''{{ entity_id[:18] == 'timer.assist_timer' }}''; value_template = ''{{ entity_id[0][:18] == 'timer.assist_timer' }}'';
} }
]; ];
@ -723,13 +723,6 @@ in {
]; ];
default = [ default = [
{
alias = "Cancel single timer";
service = "timer.cancel";
target.entity_id = ''{{ entity_id }}'';
}
{ {
alias = "Reset timer location value"; alias = "Reset timer location value";
service = "input_text.set_value"; service = "input_text.set_value";
@ -740,6 +733,14 @@ in {
value = "0"; value = "0";
}; };
} }
{
alias = "Cancel single timer";
service = "timer.cancel";
target.entity_id = ''{{ entity_id }}'';
}
{stop = "Timer cancelled";} {stop = "Timer cancelled";}
]; ];
} }
@ -753,7 +754,7 @@ in {
{ {
alias = "No specific Timer"; alias = "No specific Timer";
condition = "template"; condition = "template";
value_template = ''{{ entity_id == 'null' }}''; value_template = ''{{ entity_id == 'null' or entity_id | list | length == 0 }}'';
} }
{ {
@ -773,7 +774,7 @@ in {
{ {
alias = "No specific timer asked"; alias = "No specific timer asked";
condition = "template"; condition = "template";
value_template = ''{{ entity_id == 'null' }}''; value_template = ''{{ entity_id == 'null' or entity_id | list | length == 0 }}'';
} }
{ {
@ -820,7 +821,7 @@ in {
{ {
alias = "All timers"; alias = "All timers";
condition = "template"; condition = "template";
value_template = ''{{ entity_id == 'all' }}''; value_template = ''{{ entity_id[0] == 'all' }}'';
} }
]; ];