{"id":13560,"date":"2023-07-08T13:30:40","date_gmt":"2023-07-08T13:30:40","guid":{"rendered":"https:\/\/www.rjt.org.uk\/home\/?post_type=home_assistant_tip&#038;p=13560"},"modified":"2023-07-08T13:30:41","modified_gmt":"2023-07-08T13:30:41","slug":"adding-a-timer-to-assist","status":"publish","type":"home_assistant_tip","link":"https:\/\/www.rjt.org.uk\/home\/archives\/home-assistant-tip\/adding-a-timer-to-assist\/","title":{"rendered":"Adding a Timer to Assist"},"content":{"rendered":"\n<p>With the Alexa timers via Alexa media player being rather flaky, I decided to see if I could work them up in assist.   I have only done one at the moment,  but it would be easy to extend it to pass in a timer name.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Custom Sentences Code<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">  SetTimer:\n    data: \n      - sentences:\n        - \"set timer {time_minutes} (minutes | minute)\"\n        - \"set timer {time_seconds} (seconds | second)\"\n        - \"set timer {time_hours} (hour | hours)\"\n        - \"set timer {time_minutes} (minutes | minute) [and] {time_seconds} (seconds | second)\"\n        - \"set timer {time_hours} (hour | hours) [and] {time_minutes} (minutes | minute) [and] {time_seconds} (seconds | second)\"\n        - \"set timer {time_hours} (hour | hours) [and] {time_minutes} (minutes | minute)\"\n  CancelTimer:\n    data: \n      - sentences:\n        - \"Cancel Timer\"\n        - \"Stop Timer\"\n  TimerRemaining:\n    data:\n       - sentences:\n         - \"How much time is left\" \n\nlists:  \n  time_minutes:\n    range:\n      from: 1\n      to: 600\n  time_seconds:\n    range:\n      from: 1\n      to: 600\n  time_hours:\n    range:\n      from: 1\n      to: 600<\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Intent<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"generic\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">SetTimer:\n  speech:\n    text: >-\n      {%from \"messages.jinja\" import timer_start_sentence %}\n      {{timer_start_sentence(time_hours,time_minutes,time_seconds) }}\n  action:\n    - service: timer.start\n      data:\n        duration: >-\n          {%from \"messages.jinja\" import timer_start_seconds %}\n          {{timer_start_seconds(time_hours,time_minutes,time_seconds) }}\n      target:\n        entity_id: timer.timer   \nCancelTimer:\n  speech:\n    text: \"Timer cancelled\"\n  action:\n    - service: timer.cancel\n      target:\n        entity_id: timer.timer   \nTimerRemaining:\n  speech:\n    text: >-\n       {% from 'messages.jinja' import timer_remaining  %}\n       {{timer_remaining('timer.timer')}} <\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Jinja Macros<\/h2>\n\n\n\n<pre class=\"EnlighterJSRAW\" data-enlighter-language=\"yaml\" data-enlighter-theme=\"\" data-enlighter-highlight=\"\" data-enlighter-linenumbers=\"\" data-enlighter-lineoffset=\"\" data-enlighter-title=\"\" data-enlighter-group=\"\">\n{%- macro timer_remaining(timer) -%}\n{% from 'easy_time.jinja' import easy_time  %}\n{% set state = states(timer) %}\n{{ 'The timer is idle' if state == 'idle'}}\n{%- set  duration = state_attr(timer,'duration') %}\n{%- set hours = duration.split(':')[0] | int %}\n{%- set mins = duration.split(':')[1] | int %}\n{%- set secs = duration.split(':')[2] | int %}\n{{ 'There is ' + easy_time(state_attr(timer,'finishes_at')) + ' remaining' if state == 'active'}}\n{%- if state == 'active' %}\n{{- ' on the '}}{{hour | string + ' hours' if hours > 0}}\n{{- ' ' + mins  | string + ' minute' if mins > 0}}\n{{- ' ' + secs  | string + ' second' if secs &lt; 3 and secs != 0 }} timer\n{% endif %}\n{%- endmacro -%}\n{#\n\nTake hours minutes and seconds and return string for sentence\n\n{%from \"messages.jinja\" import timer_start_sentence %}\n{{timer_start_sentence(time_hours,time_minutes,time_seconds) }}\n\n#}\n{%- macro timer_start_sentence(time_hours,time_minutes,time_seconds)%}\n{%- set hours = time_hours | default(0)|int %}\n{%- set minutes = time_minutes | default(0)|int %}\n{%- set seconds = time_seconds | default(0)|int %}\n{%- set time = minutes + hours * 60 %}\n{%- if seconds > 0 %}\n{%- set time = time * 60 + seconds  %}\n{%- endif %}\n{{- 'Timer started for ' + time | string + ' minutes' if seconds == 0 }}\n{{- 'Timer started for ' + time | string + ' seconds' if seconds > 0 }}\n{%- endmacro %}\n\n{#\n\nTake hours minutes and seconds and return number of seconds\n\n{%from \"messages.jinja\" import timer_start_seconds %}\n{{timer_start_seconds(time_hours,time_minutes,time_seconds) }}\n\n#}\n{%- macro timer_start_seconds(time_hours,time_minutes,time_seconds)%}\n{%- set hours = time_hours | default(0)|int %}\n{%- set minutes = time_minutes | default(0)|int %}\n{%- set seconds = time_seconds | default(0)|int %}\n{%- set time = minutes + hours * 60 %}\n{%- set time = time * 60 + seconds  %}\n{{time}}\n{%- endmacro %}<\/pre>\n","protected":false},"template":"","class_list":["post-13560","home_assistant_tip","type-home_assistant_tip","status-publish","hentry","comments-off"],"_links":{"self":[{"href":"https:\/\/www.rjt.org.uk\/home\/wp-json\/wp\/v2\/home_assistant_tip\/13560","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.rjt.org.uk\/home\/wp-json\/wp\/v2\/home_assistant_tip"}],"about":[{"href":"https:\/\/www.rjt.org.uk\/home\/wp-json\/wp\/v2\/types\/home_assistant_tip"}],"wp:attachment":[{"href":"https:\/\/www.rjt.org.uk\/home\/wp-json\/wp\/v2\/media?parent=13560"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}