Voz da Vitoria - TTS Amazon Polly - Mude a voz do Google Home/Nest e do Apple Homepod!

Neste tutorial explico como podem configurar o tts Polly, um ótimo TTS para ser usado em dispositivos Google Home/Nest e Apple Homepod.

nuvem

Antes de tudo é necessário ter acesso externo ao Home Assistant para o TTS funcionar.

Polly é um serviço pago via Amazon Web Services. Há um nível gratuito para os primeiros 12 meses e, depois, uma cobrança por milhão de caracteres.

Criando a conta na AWS

Para iniciar a configuração, é necessário criar uma conta na Amazon Web Services.
image

Vai solicitar informações para incluir cartão de crédito/débito. Será necessário incluir, mas não se preocupe, não haverá nenhuma cobrança, mesmo depois de 12 meses não será cobrado. No máximo será cobrado $ 1,00 para verificar se as informações do cartão estão corretas, e depois de alguns dias será estornado.

Também vai ser necessário preencher um número de telefone, a qual ao preencher, a Amazon vai te ligar, nessa ligação vai ser solicitado para para preencher um código através do teclado numérico confirmando o seu número. O código vai aparecer na tela do seu navegador.


Obs.: Pode ser uma mensagem ao invés de uma ligação.

Após isso seu número será verificado com sucesso, basta clicar em continuar.

Na próxima tela será necessário escolher um plano, selecione o plano básico que é gratuito.

Em seguida preencha suas informações de acesso para realizar a autenticação.

Configurando a Polly na AWS

Primeiro será necessário selecionar o serviços IAM

Segundo passo será criar um novo usuário
image

Na tela seguinte, defina um nome para seu usuário, habilite as duas opções conforme a imagem abaixo e defina uma senha de sua preferência.

Na próxima etapa clique em next.

Em seguida Create user


Por último clique no botão Close.

Com o usuário criado, no menu a esquerda clique em User ou Usuário, e após clique no nome/usuário criado.
image

Na tela seguinte, clique em Add inline policy

Escolham o serviço Polly,

Selecionem todas as ações

Em seguida na opção Specify request conditions (optional)
image

Na opção Resources, selecione All sesources
image

Após isso cliquem em image
Na tela seguinte, defina um nome para policy e clique no botão Creat policy.

Credenciais

Com a polly criada e configurada, vamos para a parte das credenciais. Para isso come acessando a aba Security credentials.
image

Em seguida, clicar em Create access key image

E copie Copiar a Access key ID e Secret access key

Configurando no Home Assistant

Dentro do tts: que fica no arquivo configuration.yaml, coloque a seguinte configuração:

4

tts:
  - platform: amazon_polly
    aws_access_key_id: !secret aws_access_key_id
    aws_secret_access_key: !secret aws_secret_access_key
    voice: Vitoria

Perceba que você usar a voz do Ricardo ou Vitória.

Caso o áudio não saia adicione um outra linha:

base_url: https://minhacasa.duckdns.org:8123

Exemplo de automação:

  - alias: Informa hora de meio dia
    trigger:
      platform: time
      at: '12:00:00'
    action:
      - service: tts.amazon_polly_say
        data_template:
          entity_id: media_player.meu_media_player
          message: >
                 <speak><amazon:auto-breaths frequency='medium'>Olá! Agora é meio dia em ponto.</amazon:auto-breaths></speak>

No Node-red:

Em um node Call Service:

0

Em Entity Id coloque seu dispositivo Google Home ou Apple Homepod.
Em Data:

{
    "message": "Aqui vai a mensagem"
}

Review pelo @jhbcosta:

Tutorial que pode te ajudar:

5 curtidas

@douglas gostei do AWS…me chamou de Usuário Raiz!! kkk

image

2 curtidas

Muito legal…funcionou direitinho aqui… parabéns e obrigado pelo empenho em compartilhar.

1 curtida

Parou de funcionar depois da última atualização? (0.100)

Olá, @piveiga!

Sim, parou! Eles estão trabalhando na correção. Em breve deve sair uma nova versão com a correção.

Abraço,
José Henrique.

2 curtidas

Eu atualizei para o, 0.100.3 e parou de de funcionar aqui também.

Alguém sabe se já voltou a funcionar ??
Temos outra opção ?

Está funcionando a Polly do Amazon?

Estou utilizando a Google depois que parou de funcionar o Watson, mas é MUITO ruim!!!

Estou utilizando a versão Home Assistant 0.101.3

Pessoal, para quem está com problema a alternativa é criar uma pasta chamada amazon_polly dentro da pasta custom_components. Se você não tem essa pasta custom_components, você deve criar também.

Após isso você precisa baixar os arquivos abaixo e colocar dentro da pasta amazon_polly:

  • __init__.py
  • manifest.json
  • tts.py

Os arquivos se encontram no seguinte endereço:

Para baixar vocês podem acessar o arquivo e clicar na opção “Raw”

A estrutura no seu HA deve ficar assim:
image

Pronto, agora basta reiniciar seu HA e testar novamente.

1 curtida

Douglas, fiz os procedimentos acima descrito. Testei o TTS pelo serviço do HA é a voz saiu perfeita.

Fui nas minhas automações é mudei a saída do TTS para o da Polly, mandei executar o gatilho é a voz não saiu. Um exemplo de minha automação com uso do TTS abaixo:

- alias: "Despertador"
  initial_state: true
  hide_entity: true
    
  trigger:
   - platform: time
     at: '06:15:00' 
   
  action:
    - service: tts.amazon_polly_say
      data_template:
        entity_id: media_player.google_mini
        message: 'Bom dia familia Pontes, são 6 horas e 15 minutos da manhã. A previsão de hoje é: {{ states.sensor.dark_sky_hourly_summary.state }}.'

Marcelo, por favor sempre que postar um código, selecione o código e pressione o botão </>. Assim que fica como um código, mais legível, e pratico ao copiar para poder testar.

Quanto ao seu problema. Você sempre deve verificar o LOG quando algo não funciona para te dar uma noção do que pode estar ocorrendo. Se verificar o log deve aparecer algo parecido como:

Error while executing automation automation.despertador. Unknown error for call_service at pos 1:
13:56 custom_components/amazon_polly/tts.py (ERROR)

E se clicar no erro irá mostrar mais detalhes.

Como tinha comentado no telegram, eu deixei um exemplo de automação nesse mesmo tópico, e se você perceber na minha mensagem com o teste que coloquei aqui tem algumas tags entre a mensagem. É preciso colocar para poder funcionar, não sei o motivo exato do porque, mas assim funciona.

    message: "<speak><amazon:auto-breaths frequency='medium'>Bom dia familia Pontes, são 6 horas e 15 minutos da manhã. A previsão de hoje é: {{ states.sensor.dark_sky_hourly_summary.state }}.</amazon:auto-breaths></speak>"

Sempre bom verificar esses detalhes, porque muitas vezes faz a diferença. :+1:

1 curtida

Obrigado Douglas, era isso mesmo! Prometo não cometer mais o erro do código nas próximas postagem. Não foi a primeira vez que fiz assim, mas agora ficou registrado!
Vou mudar minhas outras automações, agora vou ficar atento as tags. Obrigado, novamente!

Aproveitando sua boa vontade e o fato que eu quero fazer o correto, como ficar a tag para uma automação assim?!

- alias: Garagem
  trigger:
    platform: state
    entity_id: switch.luz_garagem
    to: 'on'
  action:
    - service: tts.amazon_polly_say
      entity_id: media_player.google_mini
      data_template:
        message: >
          {{ [
          "Atenção!!! movimento na garagem.",
          "Ops! alguma coisa se mexeu na garagem.",
          "Caraca, será que tem gato na garagem.",
          "Eita, algo sem mexeu la na garagem.",
          "Ops!!  Deve ser o Lucca nesse entra e sai da rua.",
          "Eu acho que vi um gatinho.",
          ] | random }}

Ps.: Aqui em casa temos 5 bichanos de pêlos e um filho de 6 anos as mensagens foram sugestão da esposa.

Tente colocar as tags antes de cada mensagem, dentro das aspas duplas como nos demais exemplos.

<amazon:auto-breaths frequency=‘medium’>MENSAGEM</amazon:auto-breaths>

1 curtida

@douglas parabéns pelo POST, excelente tutorial!

Apenas complementando, segue uma das maneiras de utilizar o TTS Amazon Polly no Node RED

image

Função

msg.payload = {};
msg.payload.data = {};
msg.payload.data.entity_id = {};
msg.payload.data.message ={};

var myArray = [
 "xxxxxxxxxxxxxxxxxxxxx",
 "yyyyyyyyyyyyyyyyyyyy",
 "zzzzzzzzzzzzzzzzzzzz",
 "aaaaaaaaaaaaaaaaaaaa",
 "bbbbbbbbbbbbbbbbbbbbbbbbb" 
];

//Google
//var randomItem = myArray[Math.floor(Math.random()*myArray.length)];

//Amazon Poly
var randomItem = "<speak><amazon:auto-breaths frequency='medium'>" + myArray[Math.floor(Math.random()*myArray.length)] + "</amazon:auto-breaths></speak>";

msg.payload.data.entity_id = "media_player.general_group";
msg.payload.data.message = randomItem;


return msg;

Chamada TTS
image

1 curtida

Deu certinho! Ultima duvida a voz em Português somente Ricardo ou Vitoria?

Achei agora esse vídeo, ajuda na escolha da voz

1 curtida

Com essa última atualização do HA (Home Assistant 0.102.1) não precisa mais da pasta custom_components/amazon_polly/. Removi aqui, reiniciei e funcionou.

1 curtida

Amigos o meu fica apresentando esse erro:

Falha ao chamar o serviço tts/amazon_polly_say. An error occurred (InvalidSsmException) whe calling the SynthesizeSpeech operation: Invalid SSML request

Sabem me dizer onde estou errando?

Para poder ajudar você tem que passar a sua configuração, formatada aqui com o ícone </> e com isso poder entender onde está o erro.

Douglas,

Fiz todo o seu procedimento e consegui integrar a Polly com o Home Assistant, se vou em serviços consigo fazer meus googles falar normalmente.
Agora quando entro no Node-Red e coloco o Domain tts, não aparece pra mim o amazon_polly_say (só aparece os que eu já tinha do wattson e google) preciso fazer algo mais?
Obrigado