Vamos do começo: o Siri é um software de assistência pessoal adquirido pela Apple para ser parte integrante do seu sistema operacional iOS 5 e posteriores, disponibilizado a partir do iPhone 4S e iPad 3. Com o Siri é possível fazer perguntas em linguagem natural sendo que as respostas também são fornecidas em linguagem natural, porém os idiomas disponíveis atualmente (maio de 2013) são apenas o alemão, chinês, coreano, espanhol, francês, inglês, italiano e japonês.
Com a criação de um proxy Siri é possível desviar todo o fluxo de dados que deveriam ir para os servidores da Apple para um servidor local e dessa forma processar o que foi solicitado (dito) ao Siri de forma customizada, alterando até, com um pouco mais de trabalho, o idioma suportado. Em alguns sites pela Internet é possível encontrar como isso pode ser utilizado para conduzir automação residencial em linguagem natural, por exemplo.
O melhor de tudo é que não será necessário jailbreak ou qualquer violação no sistema do seu celular ou tablet!
Para começar, com seu Raspberry Pi ligado, conectado à Internet e funcional, o primeiro passo é atualizar todo o sistema. Note que isso pode demorar de alguns minutos até algumas horas, dependendo da velocidade de sua conexão de Internet.
Execute:
{code}
sudo apt-get update
sudo apt-get dist-upgrade
sudo apt-get autoremove
{/code}
A opção update irá atualizar a lista de pacotes, a opção dist-upgrade irá atualizar a distribuição e autoremove irá apagar os arquivos baixados para instalações.
Você precisará do usuário root para iniciar o proxy Siri, portanto teremos que dar uma senha para a conta do super-usuário, um usuário comum como o pi não conseguirá iniciar o proxy.
Para definir a senha do root execute:
{code}
sudo passwd
{/code}
Dê a senha que desejar, mas atente-se que terá que se lembrar dela posteriormente!
Faça logout e logue-se novamente como root:
{code}
logout
{/code}
No caso de uma conexão remota esse comando irá fechar a conexão e em seguida basta reconectar usando o usuário root e a senha que você definiu.
Vamos para a instalação das aplicações básicas necessárias, samba, ssh, vim, rcs e unzip:
{code}
apt-get install samba samba-common-bin ssh vim rcs unzip -y
{/code}
Samba para servidor de arquivos Windows, ssh para conexão remota, vim como editor de textos, rcs (revision control system for Linux) para termos um sistema para controlar acesso a arquivos compartilhados por vários usuários e unzip para descompactar arquivos zip.
Precisaremos usar IP estático, para isso vamos alterar as configurações de rede.
{code}
vim /etc/network/interfaces
{/code}
Onde está:
{code}
iface eth0 inet dhcp
{/code}
Marque a linha como comentário, ficando assim:
{code}
# iface eth0 inet dhcp
{/code}
Insira o trecho a seguir abaixo da linha que você acabou de comentar:
{code}
auto eth0
iface eth0 inet static
address O-IP-QUE-VOCÊ-QUISER-QUE-FAÇA-PARTE-DA-SUA-REDE
netmask 255.255.255.0
broadcast ENDEREÇO-BROADCAST-DA-SUA-REDE
network ENDEREÇO-DA-SUA-REDE
gateway ENDEREÇO-DO-SEU-GATEWAY
{/code}
Para O-IP-QUE-VOCÊ-QUISER-QUE-FAÇA-PARTE-DA-SUA-REDE vou utilizar 192.168.0.200.
Para minha configuração o ENDEREÇO-BROADCAST-DA-SUA-REDE será 192.168.0.255.
Em ENDEREÇO-DA-SUA-REDE para mim será 192.168.0.0.
Finalmente o meu NDEREÇO-DO-SEU-GATEWAY é 192.168.0.1.
Você deve colocar os endereço que condizerem com sua rede.
Reinicie o Raspberry Pi e aguarde que ele religue. Parece exagerado, mas em percebi que em alguns casos apenas reiniciar o serviço de rede não resolvia. Talvez por atualizações pendentes que necessitam de um reboot geral.
{code}
reboot
{/code}
Se estiver usando uma conexão remota lembre-se que alteramos o IP do Raspberry Pi, você deve utilizar o novo IP para conectar-se. No meu caso o IP ficou em 192.168.0.200 e é ele que devo utilizar para conexão remota.
Vamos então alterar as configurações de DNS.
{code}
vim /etc/resolv.conf
{/code}
Comente as configurações do seu ISP (Internet Service Provider) e insira as seguintes linhas:
{code}
# Servidores públicos de DNS do Google
nameserver 8.8.8.8
nameserver 8.8.4.4
#Servidores públicos de DNS de nível 3 - menos saltos e tempo de ping mais baixo
nameserver 209.244.0.3
nameserver 209.244.0.4
{/code}
Temos que prosseguir instalando um servidor DNS local, para isso poderemos usar o DNSmasq que é um servidor DNS muito rápido para redes locais, não recomendado para uso em grandes redes. Para o nosso caso dará conta perfeitamente, ainda mais por ser enxuto.
{code}
apt-get install dnsmasq
{/code}
Precisamos editar o arquivo de configurações:
{code}
vim /etc/dnsmasq.conf
{/code}
Por volta da linha 67 você irá encontrar:
{code}
#address=/double-click.net/127.0.0.1
{/code}
Logo abaixo dessa linha insira as linhas a seguir:
{code}
# Servidor de produção do Siri para iOS
address=/guzzoni.apple.com/IP-FIXO-DO-RASPBERRY-PI
# Servidor do Siri Beta para iOS
address=/kryten.apple.com/IP-FIXO-DO-RASPBERRY-PI
{/code}
No caso o IP que escolhi para meu Raspberry Pi foi 192.168.0.200, então a alteração acima ficou como:
{code}
# Servidor de produção do Siri para iOS
address=/guzzoni.apple.com/192.168.0.200
# Servidor do Siri Beta para iOS
address=/kryten.apple.com/192.168.0.200
{/code}
Salve o arquivo e reinicie o serviço do dnsmasq:
{code}
service dnsmasq restart
{/code}
Instale mais alguns pré-requisitos para que tudo funcione. Note que isso pode demorar de minutos até horas, dependendo da velocidade da sua conexão de Internet:
{code}
apt-get install ruby build-essential openssl libreadline6 libreadline6-dev curl git-core zlib1g zlib1g-dev libssl-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt-dev autoconf libc6-dev ncurses-dev automake libtool bison subversion pkg-config -y
{/code}
Precisaremos ainda do RVM, ou Ruby Version Manager - Gerenciador de Versões Ruby. Com o RVM podemos executar códigos em Ruby em múltiplas versões:
{code}
bash < <(curl -s https://raw.github.com/wayneeseguin/rvm/master/binscripts/rvm-installer)
{/code}
Ajustar o caminho para o RVM:
{code}
[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh"
{/code}
Colocar o RVM para ser executado automaticamente na inicialização do sistema:
{code}
echo '[[ -s "/etc/profile.d/rvm.sh" ]] && . "/etc/profile.d/rvm.sh" # Load RVM function' >> ~/.bash_profile
{/code}
Instalação do Ruby. Note que isso irá demorar um bom tempo:
{code}
rvm install 1.9.3
{/code}
Clonar o repositório do Proxy Siri (SiriProxy):
{code}
git clone git://github.com/plamoni/SiriProxy.git
{/code}
Entre do diretório do Proxy Siri:
{code}
cd SiriProxy
{/code}
Você receberá uma mensagem de alerta do RVM, responda yes (sim):
Crie o diretório .siriproxy no diretório home do usuário root, o qual estamos logados:
{code}
mkdir ~/.siriproxy
{/code}
Agora copie o arquivo de configuração exemplo para o diretório .siriproxy que acabamos de criar:
{code}
cp ./config.example.yml ~/.siriproxy/config.yml
{/code}
Agora sim, vamos instalar o Proxy Siri:
{code}
rake install
{/code}
Gerar os certificados para o iPhone ou iPad:
{code}
cd bin
./siriproxy gencerts
{/code}
Vamos até o diretório ~/.siriproxy para verificar o certificado gerado:
{code}
cd ~/.siriproxy
ls -l
{/code}
Você precisa enviar o arquivo ca.pem para seu iPhone ou iPad, uma solução para isso é colocá-lo em um e-mail e enviá-lo para um conta que você tenha acesso em seu gadget. Você pode copiar esse arquivo a partir do Raspberry Pi para outro computador ou usar o tutorial Como enviar um e-mail via telnet do Linux e fazer isso diretamente do RaspPi.
Ao receber o e-mail basta tocar sobre o arquivo e fazer com que ele seja instalado.
Agora vamos configurar o iPhone ou iPad para testar se está tudo funcionando.
Primeiro vamos ajustar o DNS e para isso teremos que alterar todas as configurações de IP. Toque em Ajustes e em seguida toque em Wi-Fi:
Toque na seta à esquerda do nome da sua rede sem fio para entrar nas configurações de rede:
Troque o DNS para o IP do Raspberry Pi, onde está o servidor DSNMasq, no meu caso será 192.168.0.200:
Isso não irá alterar o acesso à Internet que você tem em seu iPhone ou iPad, uma vez que o Raspberry Pi irá fornecer DNS para acesso externo.
Voltemos ao Raspberry Pi, logado com o usuário root, execute:
{code}
cd ~/SiriProxy/bin
./siriproxy bundle
bundle install
{/code}
Isso irá instalar os últimos plugins necessários e empacotar todo o Proxy Siri, note que poderá demorar alguns instantes.
Finalmente, vamos iniciar o Proxy:
{code}
./siriproxy server
{/code}
Você deverá ver algo como na figura abaixo:
Para testar inicie o Siri e fale, em inglês: test siri proxy
No console você deverá ver algo como a figura abaixo:
E na tela do iPad ou iPhone:
Vamos brincar um pouquinho, vamos editar o arquivo de configuração exemplo do Siri Proxy:
{code}
vim /root/SiriProxy/plugins/siriproxy-example//lib/siriproxy-example.rb
{/code}
Encontre a linha onde consta:
{code}
listen_for /test siri proxy/i do
{/code}
Toque para:
{code}
listen_for /testing work/i do
{/code}
Atualizando o Siri Proxy, isso demora alguns minutos:
{code}
./siriproxy update .
{/code}
Inicie novamente o Proxy:
{code}
./siriproxy server
{/code}
Agora no seu iPhone ou iPad inicie o Siri e diga “testing work”, a resposta será novamente “siri proxy is up and running”.
Entendeu?! Basta editar esse arquivo para definir os comandos e as respostas.
Sinta o poder em suas mãos!
Boa diversão e criação!