Advertisement
GrzegorzM

Skrypt uruchaniający TTS i wznawiający media player'a

Mar 20th, 2022 (edited)
332
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
YAML 5.72 KB | None | 0 0
  1. script:
  2.   tts_gadaj:
  3.     alias: TTS Gadaj
  4.     fields:
  5.       entity_id:
  6.         name: Media player entitity.
  7.         description: Name(s) of media player entities.
  8.         required: true
  9.         example: media_player.jbl_salon
  10.         selector:
  11.           entity:
  12.             domain: media_player
  13.       volume_day:
  14.         name: Day volume level
  15.         description: The volume of the media player during the day.
  16.         required: true
  17.         example: '0.5'
  18.         selector:
  19.           number:
  20.             min: 0
  21.             max: 1
  22.             step: 0.1
  23.             mode: slider
  24.       volume_night:
  25.         name: Night volume level
  26.         description: Media player volume at night.
  27.         example: '0.3'
  28.         selector:
  29.           number:
  30.             min: 0
  31.             max: 1
  32.             step: 0.1
  33.             mode: slider
  34.       message:
  35.         name: TTS message
  36.         description: Text to speak on devices.
  37.         required: true
  38.         example: Siała baba mak!
  39.         selector:
  40.           text:
  41.       audio_file:
  42.         name: Audio file path
  43.         description: The path to a file that will be played before the message
  44.         required: false
  45.         example: /media/local/tadaaa.mp3
  46.         selector:
  47.           text:
  48.     sequence:
  49. #włącz głośnik jeśli wyłączony (aby odcztać głośność do późniejszego przywrócenia)
  50.     - choose:
  51.       - conditions:
  52.         - condition: template
  53.           value_template: '{{ media_player_is_off }}'
  54.         sequence:
  55.         - service: media_player.turn_on
  56.           target:
  57.             entity_id: '{{ entity_id }}'
  58.         #czekaj 3s aż się włączy, przerwij skrypt jeśli się nie włączy
  59.         - wait_template: '{{ not is_state(entity_id, "off") }}'
  60.           timeout: 3
  61.           continue_on_timeout: false
  62.       - conditions:
  63.         - condition: template
  64.           value_template: '{{ media_player_is_playing }}'
  65.         sequence:
  66.         - service: media_player.media_stop
  67.           target:
  68.             entity_id: '{{ entity_id }}'
  69.         #czekaj 3s aż przestanie grać, przerwij skrypt jeśli nie przestanie
  70.         - wait_template: '{{ not is_state(entity_id, "playing") }}'
  71.           timeout: 3
  72.           continue_on_timeout: false
  73.       default: []
  74. #odczytaj stan głośnika
  75.     - variables:
  76.         media_player_content_id: '{{ state_attr(entity_id, "media_content_id") }}'
  77.         media_player_volume_level: '{{ state_attr(entity_id, "volume_level") }}'
  78.         media_player_content_type: '{% set c_type = state_attr(entity_id, "media_content_type") %}{% if c_type == None %} music {% else %} {{ c_type }} {% endif %}'
  79.         media_player_app_name: '{{ state_attr(entity_id, "app_name") }}'
  80. #ustaw głośność
  81.     - service: media_player.volume_set
  82.       data:
  83.         volume_level: '{{ tts_volume_level }}'
  84.       target:
  85.         entity_id: '{{ entity_id }}'
  86. #graj plik jeśli zdefiniowany
  87.     - if:
  88.       - condition: template
  89.         value_template: '{{ audio_file is defined }}'
  90.       then:
  91.       - service: media_player.play_media
  92.         target:
  93.           entity_id: '{{ entity_id }}'
  94.         data:
  95.           media_content_type: music
  96.           media_content_id: '{{ audio_file }}'
  97.       - delay: 2
  98.       - wait_template: '{{ not is_state(entity_id, "playing") }}'
  99. #gadaj
  100.     - service: tts.google_translate_say
  101.       data:
  102.         entity_id: '{{ entity_id }}'
  103.         message: '{{ message }}'
  104.         cache: true
  105.         language: pl
  106. #czekaj aż zacznie gadać
  107.     - delay: 2
  108. #czekaj aż skończy gadać
  109.     - wait_template: '{{ not is_state(entity_id, "playing") }}'
  110. #przywróć głośność
  111.     - if:
  112.       - condition: template
  113.         value_template: '{{ media_player_volume_level != None }}'
  114.       then:
  115.       - service: media_player.volume_set
  116.         target:
  117.           entity_id: '{{ entity_id }}'
  118.         data:
  119.           volume_level: '{{ media_player_volume_level }}'
  120. #przywróć stan playera
  121.     - choose:
  122.       - conditions:
  123.         - condition: template
  124.           value_template: '{{ media_player_is_playing }}'
  125.         sequence:
  126.         - if:
  127.           - condition: template
  128.             value_template: '{{ media_player_app_name == "Spotify" }}'
  129.           then:
  130.           - service: spotcast.start
  131.             data:
  132.               entity_id: '{{ entity_id }}'
  133.               force_playback: true
  134.           else:
  135.           - service: media_player.play_media
  136.             target:
  137.               entity_id: '{{ entity_id }}'
  138.             data:
  139.               media_content_id: '{{ media_player_content_id }}'
  140.               media_content_type: '{{ media_player_content_type }}'
  141.       - conditions:
  142.         - condition: template
  143.           value_template: '{{ media_player_is_off }}'
  144.         sequence:
  145.         - service: media_player.turn_off
  146.           target:
  147.             entity_id: '{{ entity_id }}'
  148.       default: []
  149.     mode: queued
  150.     icon: mdi:text-to-speech
  151.     variables:
  152.       media_player_is_playing: '{{ is_state(entity_id, "playing") }}'
  153.       media_player_is_off: '{{ is_state(entity_id, "off") }}'
  154.       tts_volume_level: |
  155.         {% set h = now().hour %}
  156.         {% if (h >= 6 and h < 20) or volume_night is not defined %} {{ volume_day }}
  157.         {% else %} {{ volume_night }} {% endif %}
  158.    
  159. ###########################################################################
  160. # usage example 1
  161. service: script.tts_gadaj
  162. data:
  163.   entity_id: media_player.jbl_sypialnia
  164.   volume_day: 0.5
  165.   volume_night: 0.3
  166.   message: Siała baba mak!
  167. ###########################################################################
  168. # usage example 2
  169. service: script.tts_gadaj
  170. data:
  171.   entity_id: media_player.jbl_sypialnia
  172.   volume_day: 0.5
  173.   message: Siała baba mak!
  174.   audio_file: /media/local/tadaaa.mp3
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement