Nós controlamos o dispositivo Android



Esta é a terceira tentativa de fazer amigos caseiros inteligentes com o Android. Quero lembrar que a primeira tentativa de controlar dispositivos Android via HTTP foi usando o aplicativo Paw Server. Esta aplicação permitiu que a linguagem BeanShell incorporasse seu código em uma página xhtml e interaja com ele, receba ou gerencie dados. Para integrar-se ao servidor doméstico inteligente ( ioBroker ), um driver foi gravado, mas para sua primeira configuração, foi necessário carregar scripts manualmente. Além disso, através do driver, os scripts foram atualizados, o que permitiu adicionar novas funções e corrigir erros, mas também impôs várias restrições nas tentativas de se afastar dos métodos estabelecidos no Paw Server para implementar novas funções.

A segunda tentativa foi criar seu aplicativo com base na fonte do servidor Paw. O objetivo principal era simplificar o processo de configuração para o usuário, além de adicionar novos recursos que não puderam ser implementados na versão anterior.

Na mesma versão, foi decidido abandonar completamente o servidor Paw e reescrever o aplicativo e o driver do ioBroker. Inclua novos métodos de conexão, além do HTTP existente, também MQTT. Adicione mais configurações para a escolha de eventos, tanto no próprio sistema quanto nos sensores internos. Obviamente, a primeira coisa que o aplicativo será otimizado para o ioBroker, mas sem muita dificuldade, poderá ser integrado a outros sistemas.

Google play

O aplicativo permite que você:

  1. Obter o status das configurações do sistema (brilho da luz de fundo, status da tela, volume, bateria, etc.)
  2. Receba dados de chamadas recebidas, reconhecimento de fala
  3. Receba dados de sensores embutidos.
  4. Obter coordenadas de localização.
  5. Obtenha uma lista de aplicativos instalados e inicie-os.
  6. Gerenciar configurações do sistema (brilho da luz de fundo, nível de volume etc.)
  7. Faça chamadas.
  8. Crie notificações e caixas de diálogo.
  9. Envie texto para síntese de fala.
  10. Interaja com Tasker.
  11. Envie arquivos para dispositivos (somente HTTP).

Aparência




A aparência do aplicativo não é final e pode variar. Eu gostaria de mudar ou adicionar muito, mas isso é tudo com o tempo.

Com a navegação pelo aplicativo, acho que não deve haver dificuldades. No primeiro lançamento, o aplicativo informa brevemente sobre as alterações atuais na nova versão e sugere o uso do "assistente". Ao acessar as configurações do aplicativo, você pode alterar os parâmetros básicos de operação, selecionar o tipo de conexão, selecionar os eventos que serão transmitidos ao servidor e também permitir ou negar acesso a alguns dados (lista telefônica, mensagens, lista de chamadas e fotos).

Na tela principal, você pode ver os "blocos", enquanto esta é uma versão de avaliação, mas com o tempo planejo expandir seus recursos. Das "peças" disponíveis, no momento, existem: botão, dimmer, hora, lista, cor, informações. A principal tarefa dos blocos é enviar ou receber dados (comandos) do servidor ou gerenciar outros dispositivos. Embora não haja uma visão geral de como tudo deve funcionar, não descreverei agora todas as nuances.

Conexões


Agora, sobre conexões e comandos de controle, o aplicativo possui duas opções de conexão via HTTP e MQTT. Cada método tem suas vantagens e desvantagens, qual método de conexão você escolhe.

HTTP


Este método envolve a conexão via Wi-Fi a uma rede local. O aplicativo "eleva" seu servidor web (o endereço IP e a porta podem ser vistos na notificação ao se conectar) e fornece acesso para gerenciá-lo. Isso pode ser feito diretamente (via navegador) ou em integração com o servidor UD, através de solicitações POST ou GET.





As respostas das solicitações serão retornadas no formato JSON, o nome do dispositivo, o endereço IP e o status do comando são transmitidos no corpo da resposta. Algumas solicitações chamam um "retorno de chamada" adicional, por exemplo, ao enviar texto para síntese de fala, o aplicativo envia uma solicitação ao servidor sobre o início da fala do texto e sua conclusão. Da mesma forma, o aplicativo transmite dados sobre eventos e leituras de sensores embutidos para o servidor. Portanto, para o trabalho completo, é necessário que o servidor UD possa processá-los.

MQTT


O protocolo MQTT é bastante popular e é suportado por vários sistemas DD, facilitando a integração do aplicativo a eles. Ao escolher este método de conexão, é possível usar os agentes locais e externos do MQTT.

Ao conectar-se ao broker do MQTT, a ramificação principal / PAW / é criada , seguida pelo nome dos dispositivos (cada dispositivo deve ter o seu próprio), que por sua vez são divididos em duas ramificações do tópico / info / e / comm / , você pode adivinhar pelo nome que A ramificação info (informações) publica todas as informações recebidas do dispositivo e os tópicos na ramificação comm (comando) para gerenciá-las. Isso é feito para maior clareza, a fim de entender melhor qual tópico é responsável por quê.



Também na ramificação principal, há / all_devices / nesta ramificação há tópicos para os quais todos os dispositivos se inscrevem, o que permite gerenciar todos os dispositivos de uma só vez.

Para a universalidade, nesses tópicos, cujos valores podem ser verdadeiro (verdadeiro) ou falso (falso), eles podem assumir valores diferentes, ou seja, 1, ativado, automático, verdadeiro é o valor verdadeiro e 0, desativado, falso, manual é falso . Outro recurso do aplicativo é que, para verificar a execução do comando, em caso de execução bem-sucedida, um valor vazio é publicado no mesmo tópico. E se o valor após a publicação não desaparecer, isso indica que ocorreu um erro ao executar o comando ou o valor não corresponde ao correto para este tópico. Por exemplo, ao alterar o nível do volume, se o valor não corresponder ao número ou ultrapassar o máximo, para um determinado tipo de nível de volume, ele retornará um erro.

Também nesta versão, o conjunto de comandos para notificações e "caixas de diálogo" foi ampliado, permitindo exibir informações mais detalhadas e interagir com o usuário se o dispositivo for utilizado como informante. Ao construí-los, um grande número de parâmetros é necessário; portanto, é necessário publicar o valor no formato JSON no tópico apropriado.

Para o tópico de notificações / comunicação / notificação / criação (abaixo está um exemplo do valor)

{ "noti":"Any text", "title":"Title 2", "info":"Any text", "vibrate":true, "sound":true, "light":true, "id":2 } 

Para o tópico "diálogos" / comunicação / notificação / alerta . A resposta dos "diálogos" vem no formato JSON e é publicada no tópico / info / alert / response

 { "alert":"Turn the lights off?", "title":"Light", "negative":"No", "positive":"Yes", "neutral":"Neutral", "sound":true, "id":2 } 

Integração IoBroker




Incorporando aos aplicativos a capacidade de trabalhar com o protocolo MQTT, eu só queria simplificar a integração com o sistema e livrar-me de escrever um driver separado. Mas algumas funções não podem ser implementadas através do protocolo MQTT e, por esse motivo, um driver não pode ser dispensado.

A estrutura dos objetos do driver é semelhante à estrutura do MQTT e também é dividida em duas ramificações / info / e / comm / , possui comandos semelhantes para gerenciar e a mesma reação a dados incorretos. Não vou descrever aqui a configuração e operação do driver, todas as informações relevantes serão atualizadas no GitHub .

Anotações


Quanto ao gerenciamento das configurações do sistema (controle do brilho da luz de fundo, despertar do modo de suspensão, etc.), diferentes dispositivos respondem de maneira diferente ou não aos comandos. Devido à grande variedade de dispositivos, versões do SDK, firmware, é difícil definir um modelo de comportamento por comando. Aqui você precisa selecionar a ação de acordo com o seu dispositivo, por exemplo, para a maioria dos dispositivos desligar a tela (enviá-la para suspensão), basta alterar o tempo limite da luz de fundo, mas em alguns dispositivos isso não funciona. A mesma situação com outras configurações do sistema, para a maioria dos dispositivos, ocorrerá mudanças imediatamente, mas para outras é necessário enviar o dispositivo para dormir e ativá-lo para que as alterações tenham efeito. Os menores problemas desse tipo surgem com o SDK 19 (Android 4.4), mas isso não é exato.) Além disso, não esqueça que há suporte para o Tasker e, se você não tiver uma função, pode adicioná-lo e interagir através do aplicativo.

Source: https://habr.com/ru/post/pt443908/


All Articles