Como enviar notificações de voz para os alto-falantes da Sonos

Hoje, mostrarei como configurar notificações de voz no seu sistema Sonos, usando receitas IFTTT, integrações OpenHAB e muito mais.

Hoje, mostrarei como configurar notificações de voz no seu sistema Sonos, usando receitas IFTTT, integrações OpenHAB e muito mais.
Propaganda

O sonho de qualquer entusiasta de casa inteligente é uma casa que você pode conversar, mas a realidade está muito distante disso.

O Amazon Echo, por exemplo, permite que você use qualquer número de recursos controlados por voz, mas o diálogo deve ser iniciado por você com uma pergunta - você não pode simplesmente fazer com que ela anuncie uma mensagem importante.

Você pode fazer isso com um sistema Sonos, e um pouco de magia DIY Raspberry Pi. Hoje mostrarei como configurar notificações de voz no seu sistema Sonos, introduzindo algumas receitas úteis do IFTTT, integrações do OpenHAB e mais, para usar o recurso de notificação.

Observe que há uma ligação Sonos nativa para OpenHAB disponível, mas ela é conhecida por causar problemas de memória devido a uma biblioteca uPnP defeituosa. Eu sugeriria pular isso por enquanto e usar o método neste tutorial.

Um Raspberry Pi executando o Raspian linux é ideal para este tutorial, mas também deve funcionar em qualquer servidor doméstico baseado em Linux que esteja sendo executado. Neste caso, estou usando o mesmo Raspberry Pi que executa o OpenHAB, o sistema de automação residencial de código aberto Introdução ao OpenHAB Home Automation no Raspberry Pi Introdução ao OpenHAB Home Automation no Raspberry Pi OpenHAB é uma plataforma de automação residencial madura e de código aberto que é executado em uma variedade de hardware e é independente de protocolo, o que significa que ele pode se conectar a praticamente qualquer hardware de automação residencial no mercado hoje. Consulte Mais informação . O restante deste tutorial pressupõe que você também esteja executando isso em um Raspberry Pi e tenha uma janela de terminal local aberta na área de trabalho ou esteja conectado remotamente usando o SSH Configurando seu Raspberry Pi para uso sem cabeça com o SSH Configurando o seu Raspberry Pi para uso sem cabeça com SSH O Raspberry Pi pode aceitar comandos SSH quando conectado a uma rede local (por Ethernet ou Wi-Fi), permitindo que você configure-o facilmente. Os benefícios da SSH vão além de perturbar a triagem diária ... Leia Mais.

Você precisará

  • Framboesa Pi 2 (modelos mais antigos devem funcionar, mas verifique se há mudanças específicas nas instruções)
  • Pelo menos um alto-falante Sonos (outros sistemas de áudio não são suportados, este é um tutorial somente para o Sonos)
  • Conta gratuita no VoiceRSS.org. Registre-se e encontre sua chave de API, que precisaremos mais tarde para gerar as mensagens de voz.

Instalar o nó mais recente

Verifique qual versão do Node você tem digitando:

node -v 

Observe que a versão 6 não é suportada. Se você tiver o Nó 6, primeiro remova-o e siga as instruções abaixo para instalar a v5.5.

Se você não tiver o v5 ou se receber um erro não encontrado, siga estas instruções para instalar o Node. O seguinte comando assume um Raspberry Pi 2; para modelos mais antigos, use armv6l em vez de armv7l .

 wget https://nodejs.org/download/release/latest-v5.x/node-v5.12.0-linux-armv7l.tar.gz tar -xvf node-v5.12.0-linux-armv7l.tar.gz cd node-v5.12.0-linux-armv7l sudo cp -R * /usr/local 

Confirme novamente digitando:

 node -v 

E você deve ver v5.12 (ou qualquer que seja o último que você baixou).

Em seguida, temos alguns módulos do Node para instalar. Também queremos o Gerenciador de Pacotes Node.

 sudo apt-get install npm sudo npm install -g npm sudo npm install -g node-gyp 

Esses são os pré-requisitos fora do caminho, agora para as coisas divertidas.

API HTTP Sonos

A Sonos HTTP API cria um servidor web na rede local, o que nos permite fazer o ping de uma URL com uma mensagem para anunciar em um Sonos (e controlá-lo remotamente se você quiser, embora este tutorial se concentre apenas no aspecto de notificação de voz).

 git clone https://github.com/jishi/node-sonos-http-api.git sonos cd sonos npm install --production npm start 

Se você vir uma mensagem sobre tal módulo e tal não encontrado, basta fazer outra instalação do npm e o nome do módulo, então tente o npm start novamente. Se você tiver erros relacionados a “requer um compilador C ++ 11”, corrija com os seguintes comandos:

 sudo apt-get install gcc-4.8 g++-4.8 sudo update-alternatives --install/usr/bin/gccgcc/usr/bin/gcc-4.6 20 sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 50 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 20 sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 50 

Eventualmente você deve ver algo assim:

sonos-http-api trabalhando

O servidor está agora em execução, fazendo interface com a Sonos. O formato desta API é fácil:

 http: // [IP DO SERVIDOR]: 5005 / [NOME DA SALA] / [AÇÃO] 

Ou como um exemplo específico:

 http://192.168.1.99:5005/kitchen/playlist/chillout 

A ação que estamos interessados ​​é o comando "say", usado da seguinte maneira:

 http://192.168.1.99:5005/kitchen/say/make%20use%20of%20is%20awesome/en-gb 

Você ouvirá uma mensagem de erro sobre ter que se registrar em uma chave de API no VoiceRSS.org. Você já deve ter feito isso, então digite o seguinte e cole a chave da API conforme apropriado:

 nano settings.json 

{

 "voicerss":"YOURAPIKEY" } 

(Pressione CTRL-X, Y para salvar o arquivo)

Reinicie o servidor e execute ping na URL novamente. Depois de alguns segundos, você deve ouvir uma agradável voz em inglês (embora você altere o final da URL para en-us, se preferir). Para fazer o servidor Sonos HTTP API iniciar novamente quando o Pi for reiniciado:

 sudo nano /etc/rc.local 

Adicione uma linha antes da saída 0 :

 sudo node /home/pi/sonos/server.js< /dev/null & 

Agora você tem a capacidade de criar uma mensagem de voz a partir de qualquer lugar na rede local simplesmente fazendo ping de uma URL, então as possibilidades estão abertas neste momento. Se você está lutando por ideias, leia algumas notificações úteis que eu configurei.

Notificações do OpenHAB em eventos

Vamos dar um exemplo simples primeiro: detecção de movimento. Este é um caso de uso comum para a ativação de luzes, mas você pode querer uma notificação de voz também se for um sensor de movimento em uma área de pouco tráfego ou talvez como um aviso de avanço de que alguém está subindo o caminho do jardim.

 rule "Garden motion detected" when Item Garden_Motion changed then var String message = "You have a visitor" sendHttpGetRequest("http://localhost:5005/kitchen/say/"+message.encode("UTF-8")+"/en-gb") end 

Você deve ver como você pode integrar essas notificações de voz simples em qualquer uma das suas regras, mas vamos tentar algo um pouco mais complexo.

Relatório de tempo diário do IFTTT para OpenHAB para Sonos

Nesta receita, a Sonos anunciará um boletim meteorológico diário no seu horário preferido.

Você precisará ativar a ligação My.OpenHAB, pois isso cria uma conexão segura entre o servidor OpenHAB interno e o serviço externo IFTTT. Se você ainda não fez isso - consulte a parte 1 do nosso guia OpenHAB Introdução ao OpenHAB Home Automation no Raspberry Pi Introdução ao OpenHAB Home Automation no Raspberry Pi O OpenHAB é uma plataforma de automação residencial madura e de código aberto que executa em uma variedade de hardware e é independente de protocolo, o que significa que ele pode se conectar a praticamente qualquer hardware de automação residencial no mercado hoje. Leia mais para obter instruções completas, caso contrário, suponho que você já tenha configurado com a persistência ativada para todos os itens.

Em seguida, crie um novo item String na instalação do OpenHAB, que armazenará o relatório meteorológico diário. Antes que isso seja visível no canal My.OpenHAB, precisamos inicializá-lo com alguma variável padrão. Faça o ping na seguinte URL (altere o raspberrypi.local para o seu servidor OpenHAB, ou apenas use seu endereço IP, e Todays_Weather para o que você chamou de String):

 http://raspberrypi.local:8080/CMD?Todays_Weather=Sunny 

Faça o login no My.OpenHAB e verifique a lista de itens para garantir que a variável já foi exportada.

meu cheque de exportação de item openhab

De volta ao IFTTT, crie uma nova receita e use o canal Weather como o acionador na sua hora do dia preferida. Você precisará definir sua localização primeiro se nunca a usou antes.

Selecione My.OpenHAB como a ação e escolha o Todays_Weather como a variável a ser atualizada.

ifttt relatório meteorológico

Por enquanto, basta escolher o próximo intervalo de meia hora para testes - você pode atualizar a receita mais tarde, quando souber que está funcionando.

Com certeza, no tempo de teste (na verdade, um pouco antes), recebi a previsão de hoje atualizada com sucesso.

 2016-02-27 10:28:01.689 [DEBUG] [ooimiMyOpenHABServiceImpl] - Received command Mostly Cloudy today! With a high of 7C and a low of 1C. Repeat. Conditions will be Mostly Cloudy today, with a high of 7C and a low of 1C. for item Todays_Weather 2016-02-27 10:28:01.697 [DEBUG] [ooimiMyOpenHABServiceImpl] - store(Todays_Weather), state = Mostly Cloudy today! With a high of 7C and a low of 1C. Repeat. Conditions will be Mostly Cloudy today, with a high of 7C and a low of 1C. 

Em seguida, precisamos de uma regra do OpenHAB para enviar essa variável para a URL "say" do Sonos. O seguinte deve fazê-lo:

 rule "Announce daily weather report" when Item Todays_Weather received update then sendHttpGetRequest("http://localhost:5005/kitchen/say/"+Todays_Weather.state.toString.encode("UTF-8")+"/en-gb") end 

Isso é bastante simples: sempre que a variável Todays_Weather for atualizada (o que será, automaticamente, às 8h todos os dias), execute ping na URL. Usamos a função String de codificação (“UTF-8”) para tornar a sentença do IFTTT adequada para uso em uma URL. Para testar manualmente essa parte do sistema, basta usar a API HTTP do OpenHAB novamente:

 http://raspberrypi.local:8080/CMD?Todays_Weather=Cloudy, with a chance of meatballs. 

Conecte-se ao IFTTT sem o OpenHAB, usando If-This-Then-Node

Finalmente, vamos ver como se conectar a partir de qualquer receita do IFTTT sem o intermediário OpenHAB. Em vez disso, instalaremos outro servidor da Web e exporemos isso à Internet aberta. Isso não é isento de riscos: qualquer tipo de servidor aberto é um risco de segurança, mas estamos atenuando isso por não executar uma pilha de servidores completa, apenas um pequeno serviço específico que aceita apenas determinados comandos em um formato de pacote de dados JSON seguro. A injeção de SQL ou ataques de autenticação serão possíveis). Assim que terminar, você terá um URL público para o qual poderá enviar mensagens do canal do Criador do IFTTT.

Comece por configurar um dos muitos serviços gratuitos de DNS dinâmico 5 melhores provedores de DNS dinâmico que você pode procurar gratuitamente hoje 5 melhores provedores de DNS dinâmico que você pode procurar gratuitamente hoje DynDNS sempre foi uma menção superior quando DNSes dinâmicos livres foram criados. Mas agora que se foi, existem boas alternativas? Com certeza existem. Leia mais por aí - Eu recomendo o DuckDNS, especificamente porque ele fornece um simples conjunto de instruções para o Raspberry Pi, permitindo que ele atualize seu endereço IP automaticamente. Acompanhe tudo isso e lembre-se do seu URL para as próximas etapas. Seu roteador também pode ter uma função DNS dinâmica integrada, portanto, verifique primeiro. No meu caso, posso obter um URL * .mynetgear.com gratuitamente, então usei isso.

Em seguida, encontre o encaminhamento de porta do seu roteador O que é encaminhamento de porta e como ele pode me ajudar? [MakeUseOf Explains] O que é o encaminhamento de porta e como ele pode me ajudar? [MakeUseOf Explains] Você chora um pouco por dentro quando alguém lhe diz que há um problema de redirecionamento de porta e é por isso que seu novo aplicativo não funciona? Seu Xbox não permite que você jogue, seus downloads de torrent recusam ... Leia Mais página de configuração; é aqui que vamos dizer o que fazer com as solicitações recebidas. Encaminhe todas as solicitações HTTP (porta 80) para a porta 1337 em seu servidor Raspberry Pi. Estou assumindo que você já tem um endereço IP reservado para o seu Raspberry Pi - se você não tiver, verifique a página de configuração do seu roteador para IPs reservados enquanto estiver lá, pois você não precisa mudar na próxima semana e para o servidor parar de funcionar de repente.

encaminhamento de porta de configuração do roteador

Agora, para instalar o último bit do software do servidor.

 https://github.com/sebauer/if-this-then-node.git cd if-this-then-node/ npm install node server.js 

Você deve ver o seguinte.

se isso, em seguida, erro de valores padrão do nó

Tudo bem, isso significa apenas que precisamos atualizar nossos detalhes. Abra o config.js no Nano e edite esses detalhes para algo diferente do padrão e salve. Quando você executar o servidor novamente, você verá isso:

se isso, então, servidor do nó em execução

Ótimo. Teste sua máquina é acessível do mundo exterior, digitando seu nome de host DNS dinâmico e acrescentar / ifttn / ao final do URL. Se tudo funcionar, a mensagem “IFTTN - se esta versão do nó 2.0.1 estiver em funcionamento!” Será exibida no seu navegador. Novamente, para que este script seja executado na inicialização, edite o arquivo /etc/rc.local e adicione:

 sudo node /home/pi/if-this-then-node/server.js< /dev/null & 

If-This-Then-Node funciona através de plugins - há alguns padrões fornecidos, mas não são de interesse para nós. Em vez disso, faça o download desse plug-in personalizado que escrevi para você com os seguintes comandos.

 cd plugins wget https://gist.githubusercontent.com/jamesabruce/4af8db24ba3452b94877/raw/d11c1cff3aa44dbb6a738eeb15202f3db461de75/sonos.js 

Você também precisará instalar o módulo de solicitação .

 npm install request 

Em seguida, reinicie o servidor. O plugin é bem simples, mas um pouco diferente do URL que usamos até agora. Neste caso, usei a ação especial "sayall", que envia a mensagem para todos os dispositivos Sonos.

 request('http://localhost:5005/sayall/'+params.message+'/en-gb', function (error, response, body) 

Se você preferir segmentar dispositivos específicos, substitua essa linha por:

 request('http://localhost:5005/'+params.device+'/say/'+params.message+'/en-gb', function (error, response, body) 

Adicione outro parâmetro de linha chamado device à solicitação JSON abaixo para especificar o nome do dispositivo Sonos.

Para testar isso, estou usando o aplicativo de botão “Do” do IFTTT. Crie uma nova receita, navegue pelos canais e selecione o canal Maker .

botão

Crie uma nova receita. Entre no URL que você configurou anteriormente de um provedor de DNS dinâmico gratuito (incluindo / ifttn / no final do URL. Não esqueça essas barras). Selecione a solicitação POST, o conteúdo do aplicativo / json e o corpo da mensagem da seguinte maneira, substituindo todas as variáveis, conforme necessário, pelas que você configurou anteriormente:

 { "action":"sonos", "user":"YOURUSER", "pw":"YOURPASSWORD", "message":"Incoming message for everyone: Dinner is ready! Repeat. Dinner is ready. Get your asses upstairs now." } 

Agora eu tenho um botão prontamente acessível que anunciará a mensagem em cada dispositivo de Sonos na casa. É claro que você pode emparelhar isso com qualquer canal IFTTT para fazer uma mensagem personalizada usando variáveis ​​desse canal. Você deve ser capaz de replicar o relatório meteorológico de cima sem usar o OpenHAB agora, embora tenha sido necessário um esforço extra para instalar outro servidor.

Nota: os hackers irão escanear você automaticamente . Isso acontece o tempo todo, mas se você estiver vendo logs, pode parecer alarmante. Abaixo, você pode ver que alguém sistematicamente tentou verificar se alguma das interfaces padrão do PHPMyAdmin estava acessível. Quais não eram. Não se assuste se vir algo parecido. É o equivalente da Internet a números de telefone aleatórios chamando para ver se alguém está lá.

tentativas de invasão do servidor da web

O que você vai anunciar?

Agora você deve ter as ferramentas e conhecimento para constantemente banhar toda a sua casa em notificações de voz sobre tudo o que você poderia pensar. Quem precisa de musica? Seu único limite é de 350 solicitações diárias do VoiceRSS.org - mas isso é cerca de uma a cada 4 minutos, então você deve estar bem.

Então, o que você vai fazer com isso? Compartilhe suas idéias ou receita IFTTT nos comentários!

Créditos da Imagem: café e mulher por S_Photo via Shutterstock

In this article