Ma méthode de diffusion de messages sur enceintes en local ou distance

Bonjour à tous, je vous propose de vous partager ici la méthode que je viens de mettre en place pour diffuser des messages en local ou à distance sur des enceintes de type nest.

Vous pourrez adapter à vos entitées, j’ai déjà prévu 5 enceintes mais vous pouvez en ajouter.

Petite particularité en raison du fonctionnement de la carte de dashboard, avant d’utiliser les boutons en bas de la carte il faut activer un bouton ou le désactiver pour ne pas ouvrir le clavier quand vous êtes sous Android, cela est lié au fait que la carte garde en mémoire que vous êtes en saisie.

On utilise Google TTS :

Voici comment se présente la carte :

Vous pouvez diffuser un message que vous écrivez en actionnant le sélecteur mode message vocal sinon le message diffusé sera celui sélectionné dans la liste des messages pre-enregistrés.

Vous saisissez votre message dans le premier champ puis vous sélectionnez mode vocal puis l’enceinte ou les enceintes sur lesquelles diffuser puis le bouton en bas de carte envoyer.

Dans le champ nouvelle phrase vous pouvez enregistrer des nouvelles phrases réutilisables qui s’ajoute à la liste en dessous avec le bouton ajouter phrase, vous pouvez sélectionner une phrase existante puis cliquer sur supprimer (toujours penser à cliquer sur un bouton enceinte ou mode vocal avant de cliquer sur ajouter ou supprimer sinon le clavier se rouvre à nouveau, sur android en tout cas)

Ensuite si vous voulez diffuser une phrase pre-enregistrées alors vous la choisissez dans la liste, vous placez le sélecteur vocal sur off, vous sélectionnez les enceintes puis bouton envoyer le message.

Vous avez aussi des boutons pour vider les champs de saisie ce qui vous évite d’avoir à tout sélectionner puis effacer.

Voici les éléments qu’il vous faudra pour tout cela.

Les inputs :

input_boolean.diffuser_alicia
input_boolean.diffuser_etage
input_boolean.diffuser_oceane
input_boolean.diffuser_parents
input_boolean.diffuser_salon

Puis input texte :

input_text.message_vocal


Puis un autre input interrupteur :

input_boolean.mode_message_vocal

Puis un autre input text :

input_text.nouvelle_phrase

Puis un input liste déroulante :

input_select.phrases_vocales

Ensuite il vous faudra les 5 scripts :

alias: Ajouter phrase vocale
mode: single
sequence:
  - variables:
      nouvelle: "{{ states('input_text.nouvelle_phrase') | trim }}"
      liste: "{{ state_attr('input_select.phrases_vocales', 'options') or [] }}"
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ nouvelle | length == 0 }}"
        sequence:
          - stop: Phrase vide.
  - target:
      entity_id: input_select.phrases_vocales
    data:
      options: |
        {{ (liste + [nouvelle]) | list }}
    action: input_select.set_options
  - target:
      entity_id: input_text.nouvelle_phrase
    data:
      value: ""
    action: input_text.set_value

alias: Envoyer message vocal multi-enceintes
mode: single
sequence:
  - variables:
      enceintes: >
        {% set liste = [] %} {% if is_state('input_boolean.diffuser_salon',
        'on') %}
          {% set liste = liste + ['media_player.mini'] %}
        {% endif %} {% if is_state('input_boolean.diffuser_alicia', 'on') %}
          {% set liste = liste + ['media_player.reva'] %}
        {% endif %} {% if is_state('input_boolean.diffuser_oceane', 'on') %}
          {% set liste = liste + ['media_player.revo'] %}
        {% endif %} {% if is_state('input_boolean.diffuser_parents', 'on') %}
          {% set liste = liste + ['media_player.reveil'] %}
        {% endif %} {% if is_state('input_boolean.diffuser_etage', 'on') %}
          {% set liste = liste + ['media_player.etage'] %}
        {% endif %} {{ liste }}
      mode_texte: "{{ is_state('input_boolean.mode_message_vocal', 'on') }}"
      texte_libre: "{{ states('input_text.message_vocal') | trim }}"
      phrase_liste: "{{ states('input_select.phrases_vocales') | trim }}"
  - choose:
      - conditions: "{{ mode_texte }}"
        sequence:
          - variables:
              message: "{{ texte_libre }}"
      - conditions: "{{ not mode_texte }}"
        sequence:
          - variables:
              message: "{{ phrase_liste }}"
  - choose:
      - conditions: "{{ message | length == 0 }}"
        sequence:
          - stop: Aucun message à envoyer.
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ enceintes | length == 0 }}"
        sequence:
          - stop: Aucune enceinte sélectionnée.
  - action: media_player.turn_on
    target:
      entity_id: "{{ enceintes }}"
  - action: media_player.volume_set
    target:
      entity_id: "{{ enceintes }}"
    data:
      volume_level: 1
  - delay: "00:00:02"
  - action: tts.speak
    target:
      entity_id: tts.google_translate_fr_fr
    data:
      cache: true
      media_player_entity_id: "{{ enceintes | join(',') }}"
      language: fr
      message: "{{ message }}"

alias: Supprimer phrase vocale
mode: single
sequence:
  - variables:
      phrase: "{{ states('input_select.phrases_vocales') | trim }}"
      liste: "{{ state_attr('input_select.phrases_vocales', 'options') or [] }}"
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ phrase | length == 0 }}"
        sequence:
          - stop: Aucune phrase sélectionnée.
  - target:
      entity_id: input_select.phrases_vocales
    data:
      options: |
        {{ liste | reject('equalto', phrase) | list }}
    action: input_select.set_options
  - choose:
      - conditions:
          - condition: template
            value_template: "{{ (liste | reject('equalto', phrase) | list) | length > 0 }}"
        sequence:
          - target:
              entity_id: input_select.phrases_vocales
            data:
              option: |
                {{ (liste | reject('equalto', phrase) | list)[0] }}
            action: input_select.select_option

alias: Vider message vocal
mode: single
sequence:
  - target:
      entity_id: input_text.message_vocal
    data:
      value: ""
    action: input_text.set_value
description: ""

alias: Vider nouvelle phrase
mode: single
sequence:
  - target:
      entity_id: input_text.nouvelle_phrase
    data:
      value: ""
    action: input_text.set_value
description: ""

Puis la carte pour le dashboard :

type: entities
entities:
  - entity: input_text.message_vocal
  - entity: input_boolean.mode_message_vocal
  - entity: input_text.nouvelle_phrase
  - entity: input_select.phrases_vocales
  - entity: input_boolean.diffuser_salon
    icon: mdi:speaker-wireless
  - entity: input_boolean.diffuser_parents
  - entity: input_boolean.diffuser_etage
  - entity: input_boolean.diffuser_alicia
  - entity: input_boolean.diffuser_oceane
footer:
  type: buttons
  entities:
    - entity: script.vider_message_vocal
      show_icon: true
      show_name: true
    - entity: script.vider_message_vocal_2
      show_icon: true
      show_name: true
    - entity: script.ajouter_phrase_vocale
      show_icon: true
      show_name: true
    - entity: script.supprimer_phrase_vocale
      show_icon: true
      show_name: true
    - entity: script.envoyer_message_vocal_multi_enceintes
      show_icon: true
      show_name: true

Vous devriez tout avoir.

Merci

4 « J'aime »