Propaganda

O sonho de qualquer entusiasta de lar inteligente é um lar com quem você pode conversar, mas a realidade está muito longe 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 apenas fazê-la anunciar uma mensagem importante.

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

Observe que existe uma ligação nativa do Sonos para o OpenHAB disponível, mas é conhecido por causar problemas de memória devido a uma biblioteca uPnP com defeito. Sugiro ignorar isso por enquanto e usar o método neste tutorial.

Um Raspberry Pi executando o Linux Raspian é ideal para este tutorial, mas também deve funcionar em qualquer servidor doméstico baseado em Linux que você esteja executando. Nesse caso, estou usando o mesmo Raspberry Pi executado

OpenHAB, o sistema de automação residencial de código aberto Introdução ao OpenHAB Home Automation no Raspberry PiO OpenHAB é uma plataforma madura de automação residencial de código aberto que roda 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 do 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 conectado remotamente usando SSH Configurando seu Raspberry Pi para uso sem cabeça com SSHO Raspberry Pi pode aceitar comandos SSH quando conectado a uma rede local (por Ethernet ou Wi-Fi), permitindo que você o configure com facilidade. Os benefícios do SSH vão além de perturbar a triagem diária ... consulte Mais informação .

Você precisará

  • Raspberry Pi 2 (modelos mais antigos devem funcionar, mas verifique se há alterações específicas nas instruções)
  • Pelo menos um Alto-falante Sonos (outros sistemas de áudio não são suportados, este é um tutorial apenas para Sonos)
  • Conta gratuita no VoiceRSS.org [Não está mais disponível]. Registre-se então encontre sua chave de API, que precisaremos posteriormente para gerar as mensagens de voz.

Nó de instalação mais recente

Verifique qual versão do Node você possui, digitando:

nó -v. 

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

Se você não possui a v5 ou se obtiver um erro não encontrado, siga estas instruções para instalar o Node. O comando a seguir assume um Raspberry Pi 2; para modelos mais antigos, use armv6l ao invés 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:

nó -v

E você deve ver a v5.12 (ou a versão mais recente que você baixou).

Em seguida, temos alguns módulos de nó para instalar. Também queremos o Node Package Manager.

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 do Sonos

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

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

Se você vir uma mensagem sobre esse e tal módulo não encontrada, faça outra instalação npm e o nome do módulo, tente início npm novamente. Se você encontrar erros relacionados a "Requer um compilador C ++ 11", corrija com os seguintes comandos:

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

Eventualmente, você deverá ver algo assim:

trabalho sonos-http-api

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

http://[SERVER IP]: 5005 / [NOME DO QUARTO] / [AÇÃO]

Ou como um exemplo específico:

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

A ação que nos interessa é o comando "dizer", 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 o registro em uma chave de API no VoiceRSS.org. Você já deve ter feito isso, digite o seguinte e cole sua chave de 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 voz agradável em inglês (embora altere o final do URL para en-us se você preferir). Para que o servidor da API HTTP do Sonos seja iniciado novamente quando o Pi for reiniciado:

sudo nano /etc/rc.local

Adicione uma linha antes do saída 0:

nó sudo /home/pi/sonos/server.js  dev / null &

Agora você tem a capacidade de criar uma mensagem de voz de qualquer lugar da rede local simplesmente executando o ping em um URL, para que as possibilidades estejam abertas neste momento. No entanto, se você está com dificuldades para obter idéias, continue lendo algumas notificações úteis que eu configurei.

Notificações do OpenHAB sobre eventos

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

regra "Movimento do jardim detectado" quando o Item Garden_Motion mudou, então var String message = "Você tem um visitante" sendHttpGetRequest (" http://localhost: 5005 / kitchen / say / "+ message.encode (" UTF-8 ") +" / en-gb ") fim.

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

Boletim Meteorológico Diário de IFTTT para OpenHAB para Sonos

Nesta receita, o Sonos anunciará um boletim meteorológico diário no horário que você preferir.

Você precisará do meu. Ligação do OpenHAB ativada, pois isso cria uma conexão segura entre o servidor OpenHAB interno e o serviço IFTTT externo. Configure isso se você ainda não o fez - pode consultar parte 1 do nosso guia OpenHAB Introdução ao OpenHAB Home Automation no Raspberry PiO OpenHAB é uma plataforma madura de automação residencial de código aberto que roda 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 do mercado hoje. consulte Mais informação para obter instruções completas, caso contrário, assumirei que você já a configurou com a persistência ativada para todos os itens.

Em seguida, crie um novo item String na sua instalação do OpenHAB, que armazenará o boletim meteorológico diário. Antes que isto seja visível no Meu. Canal OpenHAB, precisamos inicializá-lo com alguma variável padrão. Faça ping no seguinte URL (altere raspberrypi.local para o servidor OpenHAB, ou apenas use o endereço IP e Clima de hoje para o que você nomeou como String):

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

Faça login no Meu. OpenHAB [URL quebrado removido] e verifique o Itens lista para garantir que a variável foi exportada.

minha verificação de exportação de itens openhab

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

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

boletim meteorológico ifttt

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

Com certeza, no momento do teste (de fato, um pouco antes), recebi a previsão de hoje atualizada com êxito.

27-02-2016 10: 28: 01.689 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - comando recebido Principalmente nublado hoje! Com alta de 7C e baixa de 1C. Repetir. Hoje, as condições serão muito nubladas, com alta de 7 ° C e mínima de 1 ° C. para o item Todays_Weather. 27-02-2016 10: 28: 01.697 [DEBUG] [o.o.i.m.i. MyOpenHABServiceImpl] - store (Todays_Weather), state = Na maior parte nublado hoje! Com alta de 7C e baixa de 1C. Repetir. Hoje, as condições serão muito nubladas, com alta de 7 ° C e mínima de 1 ° C. 

Em seguida, precisamos de uma regra do OpenHAB para enviar essa variável ao URL do "say" do Sonos. O seguinte deve fazer isso:

regra "Anunciar boletim meteorológico diário" quando o Item Todays_Weather recebeu atualização. em seguida, sendHttpGetRequest (" http://localhost: 5005 / kitchen / say / "+ Todays_Weather.state.toString.encode (" UTF-8 ") +" / en-gb ") fim.

Isso é bastante simples: sempre que a variável Todays_Weather for atualizada (que será automaticamente às 8 da manhã todos os dias), faça ping na URL. Nós usamos codificar ("UTF-8") Função String para tornar a sentença do IFTTT adequada para uso em um URL. Para testar manualmente essa parte do sistema, basta usar a API HTTP do OpenHAB novamente:

http://raspberrypi.local: 8080 / CMD? Todays_Weather = Nublado, com possibilidade de almôndegas. 

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

Por fim, vamos ver como se conectar a partir de qualquer receita IFTTT sem o intermediário OpenHAB. Em vez disso, instalaremos outro servidor Web e o exporemos à Internet aberta. Isso não é isento de riscos: qualquer tipo de servidor aberto é um risco de segurança, mas estamos mitigando isso ao não executar uma pilha completa de servidores, apenas uma pequena serviço específico que aceita apenas determinados comandos em um formato de pacote de dados JSON seguro (portanto, nenhum ataque de injeção ou autenticação SQL será possível). Quando terminarmos, você terá um URL público para o qual poderá enviar mensagens do canal IFTTT Maker.

Comece configurando um dos muitos serviços DNS dinâmicos gratuitos Os 5 melhores provedores de DNS dinâmico gratuitoUm serviço DDNS pode ajudá-lo a se conectar ao seu PC doméstico enquanto estiver em movimento. Aqui estão os melhores provedores de DNS dinâmico gratuitos a serem considerados. consulte Mais informação por aí - eu recomendo o DuckDNS, especificamente porque fornece um conjunto simples de instruções para Raspberry Pi, permitindo que ele atualize seu endereço IP automaticamente. Siga-os e lembre-se do seu URL para as próximas etapas. Seu roteador também pode ter uma função DNS dinâmica incorporada, portanto verifique primeiro. No meu caso, posso obter um * .mynetgear.com URL de graça, então eu usei isso.

Em seguida, encontre o encaminhamento de porta O que é o encaminhamento de porta e como ele pode me ajudar? [MakeUseOf explica]Você chora um pouco quando alguém lhe diz que há um problema de encaminhamento de porta e é por isso que seu novo aplicativo brilhante não funciona? Seu Xbox não permite que você jogue, seus downloads de torrents recusam ... consulte Mais informação página de configuração; é aqui que diremos o que fazer com as solicitações recebidas. Encaminhe todas as solicitações HTTP (porta 80) para a porta 1337 no servidor Raspberry Pi. Suponho que você já tenha um endereço IP reservado para o seu Raspberry Pi - se não tiver, verifique a configuração do seu roteador página para IPs reservados enquanto você está lá, pois não muda na próxima semana e o servidor para de repente trabalhando.

encaminhamento de porta de configuração do roteador

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

https://github.com/sebauer/if-this-then-node.git. cd se-este-então-nó / instalação npm. nó server.js.

Você deve ver o seguinte.

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

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

se isso, servidor de nó em execução

Ótimo. Teste sua máquina para acessá-la do mundo exterior, digitando seu nome de host DNS dinâmico e anexando /ifttn / até o final do URL. Se tudo funcionar, a mensagem "IFTTN - se este nó, a versão 2.0.1 está em funcionamento!" será exibido no seu navegador. Novamente, para executar esse script na inicialização, edite o /etc/rc.local arquivo e adicione:

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

Se-este-então-nó funciona através de plug-ins - são fornecidos alguns padrão, mas não nos interessam. Em vez disso, faça o download deste plug-in personalizado que escrevi para você com os seguintes comandos.

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

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

solicitação de instalação do npm. 

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

solicitação(' http://localhost: 5005 / sayall / '+ params.message +' / en-gb ', função (erro, resposta, corpo)

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

solicitação(' http://localhost: 5005 / '+ params.device +' / say / '+ params.message +' / en-gb ', função (erro, resposta, corpo)

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

Para testar isso, estou usando o aplicativo de botão "Fazer" da IFTTT. Crie uma nova receita, navegue pelos canais e selecione o criador canal.

botão do

Crie uma nova receita. Digite a URL que você configurou anteriormente em um provedor DNS dinâmico gratuito (incluindo /ifttn/ no final do URL. Não esqueça essas barras). Selecione POSTAR solicitação, application / json conteúdo e o corpo da mensagem, a seguir, substituindo todas as variáveis ​​conforme necessário por aquelas que você configurou anteriormente:

{"action": "sonos", "user": "YOURUSER", "pw": "YOURPASSWORD", "message": "Mensagem de entrada para todos: o jantar está pronto! Repetir. Jantar está pronto. Suba as escadas agora. "}

Agora eu tenho um botão de fácil acesso que anuncia a mensagem em todos os dispositivos Sonos da casa. É claro que você pode emparelhar isso com qualquer canal IFTTT que deseja criar uma mensagem personalizada usando variáveis ​​desse canal. Você deve ser capaz de replicar o boletim 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 o varrerão automaticamente. Isso acontece o tempo todo, mas se você estiver visualizando registros, pode parecer alarmante. Abaixo, você pode ver alguém tentando sistematicamente verificar se alguma das interfaces padrão do PHPMyAdmin estava acessível. O que eles não eram. Não se assuste se você vir algo semelhante. É o equivalente na Internet a números de telefone aleatórios para ligações a frio para ver se há alguém lá.

tentativas de invasão do servidor da web

O que você vai anunciar?

Agora você deve ter as ferramentas e o conhecimento necessários para banhar constantemente sua casa inteira em notificações por voz sobre tudo o que você poderia imaginar. Quem precisa de música? Seu único limite é de 350 solicitações diárias do VoiceRSS.org - mas isso é cerca de uma a cada 4 minutos; portanto, você deve ficar bem.

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

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

James é bacharel em Inteligência Artificial e possui certificação CompTIA A + e Network +. Ele é o principal desenvolvedor do MakeUseOf e passa seu tempo livre jogando paintball e jogos de tabuleiro em VR. Ele está construindo PCs desde que era criança.