AlexxIT / YandexStation

Управление Яндекс.Станцией и другими устройствами умного дома с Алисой из Home Assistant
https://t.me/AlexxIT_SmartHome
MIT License
1.37k stars 125 forks source link

перестать слушать после локальной команды #111

Open instingt opened 3 years ago

instingt commented 3 years ago

Команда всегда отправляется через облако, даже на локальный колонках, потому что это единственно известный способ, чтоб станция НЕ продолжала слушать после TTS.

Нашел способ, что бы колонка перестала слушать после сообщения со спецэффектами в локальном режиме. Для этого сразу после отправки спецэффектов вызываю команду "хватит". Тем самым колонка перестает слушать.

- alias: beep
  trigger: 
    .....
  action:
    - service: media_player.play_media
      entity_id: media_player.yandex_station
      data:
        media_content_id: <speaker audio="alice-sounds-animals-cat-3.opus">
        media_content_type: dialog
    - service: media_player.play_media
      entity_id: media_player.yandex_station
      data:
        media_content_id: хватит
        media_content_type: command

Пока работает отлично. Можно пользоваться.

AlexxIT commented 3 years ago

Есть проблема - она остановит музыку, если та игралась в данный момент

MrSnakeSPb commented 3 years ago

Этот набор позволяет сохранять статус колонки (громкость, проигрывание музыки), останавливать музыку, проговаривать сообщение с необходимой громкостью и возвращать все обратно (громкость и музыку)

  input_number:
    yandex_volume_report:
      name: "Громкость TTS уведомлений"
      icon: mdi:volume-vibrate
      min: 0
      max: 100
      step: 5
#-------------------------------------------------------------------------------
  variable: # Хранилище для переменных
    storage:
        value: 
        attributes:
          friendly_name: "Хранитель"
          secure: 'on'
          yandex_volume1:
          yandex_volume2:
          yandex_status1:
          yandex_status2:
          icon: mdi:database
  script:
    save_yandex_sound: # Скрипт сохраняет в Хранилище статус и громкость станций 
      alias: Сохранить громкость колонки
      icon: mdi:progress-wrench
      sequence:
        - service: variable.set_variable
          data:
            variable: storage
            attributes: >-
                {"yandex_volume1":  {{state_attr('media_player.yandex_box_1', 'volume_level')|float|round(3)}},
                 "yandex_volume2":  {{state_attr('media_player.yandex_box_2', 'volume_level')|float|round(3)}},
                 "yandex_status1": "{{states('media_player.yandex_box_1')}}",
                 "yandex_status2": "{{states('media_player.yandex_box_2')}}" }
        - service: media_player.media_pause # Пауза на колонках
          entity_id:
           - media_player.yandex_box_1
           - media_player.yandex_box_2
        - delay:
            milliseconds: 350
        - service: script.set_yandex_sound # Устанавливаем громкость на колонках из слайдера TTS Уведомлений
      mode: queued
#-------------------------------------------------------------------------------
    load_yandex_sound:
      alias: Восстановить громкость колонки
      icon: mdi:progress-wrench
      sequence:
        - delay:
            milliseconds: 200 # Ожидаем статус простаивания колонок, когда заканчивает говорить #
        - wait_template: '{{ is_state_attr("media_player.yandex_box_1", "alice_state", "IDLE") and is_state_attr("media_player.yandex_box_2", "alice_state", "IDLE") }}'
        - service: media_player.volume_set # Восстанавливаем громкость на 1 колонке из Хранилища
          entity_id: media_player.yandex_box_1
          data_template:
            volume_level: '{{ ( state_attr("variable.storage", "yandex_volume1")|float )|round(3) }}'
        - service: media_player.volume_set # Восстанавливаем громкость на 2 колонке из Хранилища
          entity_id: media_player.yandex_box_2
          data_template:
            volume_level: '{{ ( state_attr("variable.storage", "yandex_volume2")|float )|round(3) }}'
        - wait_template: >
                        {{ is_state_attr("media_player.yandex_box_1", "volume_level", state_attr("variable.storage", "yandex_volume1"))
                        and is_state_attr("media_player.yandex_box_2", "volume_level", state_attr("variable.storage", "yandex_volume2")) }}
        - service_template: >
                {% if is_state_attr("variable.storage", "yandex_status1", "playing") %}
                  media_player.turn_on
                {% else %}  
                  media_player.media_pause
                {% endif %}           
          entity_id: media_player.yandex_box_1 # Восстанавливаем статус на 1 колонке из Хранилища
        - service_template: >
                {% if is_state_attr("variable.storage", "yandex_status2", "playing") %}
                  media_player.turn_on
                {% else %}  
                  media_player.media_pause
                {% endif %}           
          entity_id: media_player.yandex_box_2 # Восстанавливаем статус на 2 колонке из Хранилища
      mode: queued
#-------------------------------------------------------------------------------
    set_yandex_sound:
      alias: Установить громкость колонки # Устанавливаем громкость на колонках из слайдера TTS Уведомлений
      icon: mdi:progress-wrench
      sequence:
        - service: media_player.volume_set
          data_template:
            entity_id:
             - media_player.yandex_box_1
             - media_player.yandex_box_2
            volume_level: '{{ ( states("input_number.yandex_volume_report")|int /100 )|round(3) }}'
      mode: queued
  automation:
  - alias: TTS Погода за окном
    trigger:
      - platform: event
        event_type: state_changed
        event_data: 
          entity_id: sensor.gismeteo_current_weather

    action:
      - service: script.save_yandex_sound

      - service: tts.yandex_station_say
        entity_id:
          - media_player.yandex_box_1
          - media_player.yandex_box_2
        data_template:
          message: >
            За окном {{ states("sensor.gismeteo_current_weather") }}.

      - service: script.load_yandex_sound
    mode: queued
RestOp commented 3 years ago

Скажите, нет ли возможности имплементировать какой-то из этих вариантов в интеграцию?