Nous contrôlons l'appareil Android



Il s'agit de la troisième tentative de se faire des amis intelligents avec Android, permettez-moi de vous rappeler que la première tentative de contrôle des appareils Android via HTTP utilisait l'application Paw Server. Cette application a permis d'utiliser le langage BeanShell pour intégrer votre code dans une page xhtml et interagir avec lui, recevoir des données ou le gérer. Pour s'intégrer au serveur domestique intelligent ( ioBroker ), un pilote a été écrit, mais pour sa première configuration, il a fallu charger manuellement des scripts. De plus, via le pilote, les scripts ont été mis à jour, ce qui a permis d'ajouter de nouvelles fonctions et de corriger les erreurs, mais a également imposé un certain nombre de restrictions dans les tentatives de s'éloigner des méthodes définies dans Paw Server pour implémenter de nouvelles fonctions.

La deuxième tentative a été de créer votre application en fonction de la source du serveur Paw. L'objectif principal était de simplifier le processus de configuration pour l'utilisateur, ainsi que d'ajouter de nouvelles fonctionnalités qui ne pouvaient pas être implémentées dans la version précédente.

Dans la même version, il a été décidé d'abandonner complètement le serveur Paw et de réécrire l'application et le pilote pour ioBroker. Ajoutez de nouvelles méthodes de connexion, en plus du HTTP existant, également MQTT. Ajoutez plus de paramètres pour choisir des événements, à partir du système lui-même et des capteurs intégrés. Bien sûr, la première chose que l'application sera optimisée pour ioBroker, mais sans trop de difficulté peut être intégrée dans d'autres systèmes.

Google play

L'application vous permet de:

  1. Obtenez l'état des paramètres du système (luminosité du rétroéclairage, état de l'écran, volume, batterie, etc.)
  2. Recevoir des données d'appels entrants, reconnaissance vocale
  3. Recevez les données des capteurs intégrés.
  4. Obtenez les coordonnées de l'emplacement.
  5. Obtenez une liste des applications installées et lancez-les.
  6. Gérer les paramètres système (luminosité du rétroéclairage, niveau de volume, etc.)
  7. Faites des appels.
  8. Créez des notifications et des boîtes de dialogue.
  9. Envoyez du texte à la synthèse vocale.
  10. Interagissez avec Tasker.
  11. Envoyer des fichiers aux appareils (HTTP uniquement).

Apparence




L'apparence de la demande n'est pas définitive et peut varier. J'aimerais changer ou ajouter beaucoup, mais c'est tout avec le temps.

Avec la navigation dans l'application, je pense qu'il ne devrait pas y avoir de difficultés. Lors du premier lancement, l'application informe brièvement sur les changements en cours dans la nouvelle version et suggère d'utiliser «l'assistant». En accédant aux paramètres de l'application, vous pouvez modifier les paramètres de fonctionnement de base, sélectionner le type de connexion, sélectionner les événements qui seront transmis au serveur et également autoriser ou refuser l'accès à certaines données (répertoire téléphonique, messages, liste d'appels et photos).

Sur l'écran principal, vous pouvez voir les "tuiles", alors qu'il s'agit d'une version d'essai, mais avec le temps, je prévois d'étendre leurs capacités. Parmi les "tuiles" disponibles, il y a actuellement: bouton, variateur, heure, liste, couleur, information. La tâche principale des tuiles est d'envoyer ou de recevoir des données (commandes) du serveur ou de gérer d'autres appareils. Bien qu'il n'y ait pas d'image globale sur la façon dont tout devrait fonctionner, je ne décrirai pas maintenant toutes les nuances.

Connexions


À propos des connexions et des commandes de contrôle, l'application dispose de deux options de connexion via HTTP et MQTT. Chaque méthode a ses avantages et ses inconvénients, quelle méthode de connexion vous choisissez.

HTTP


Cette méthode implique la connexion via Wi-Fi à un réseau local. L'application "lève" son serveur web (l'adresse IP et le port sont visibles dans la notification lors de la connexion) et donne accès à sa gestion. Cela peut se faire soit directement (via un navigateur), soit en intégration avec le serveur UD, via des requêtes POST ou GET.





Les réponses des demandes seront retournées au format JSON, le nom du périphérique, l'adresse IP et l'état de la commande sont transmis dans le corps de la réponse. Certaines requêtes appellent un "rappel" supplémentaire, par exemple, lors de l'envoi de synthèse vocale à texte, l'application enverra une requête au serveur concernant le début de la prononciation du texte et son achèvement. De la même manière, l'application transmet au serveur des données sur les événements et les lectures des capteurs intégrés. Par conséquent, pour un travail à part entière, il est nécessaire que le serveur UD puisse les traiter.

MQTT


Le protocole MQTT est assez populaire et est pris en charge par divers systèmes DD, ce qui facilite l'intégration de l'application dans ceux-ci. Lorsque vous choisissez cette méthode de connexion, vous pouvez utiliser des courtiers MQTT locaux et externes.

Lors de la connexion au courtier MQTT, la branche principale / PAW / est créée , suivie du nom des périphériques (chaque périphérique doit avoir le sien), qui à leur tour sont divisés en deux branches du sujet / info / et / comm / , vous pouvez deviner à partir du nom qui La branche info (informations) publie toutes les informations entrantes du périphérique et la branche comm (commande) contient des rubriques pour les gérer. Ceci est fait pour plus de clarté, afin de mieux comprendre quel sujet est responsable de quoi.



Toujours dans la branche principale, il y a / all_devices / dans cette branche, il y a des sujets auxquels tous les appareils s'abonnent, ce qui vous permet de gérer tous les appareils en même temps.

Pour l'universalité, dans ces sujets dont les valeurs peuvent être vraies (vraies) ou fausses (fausses), elles peuvent prendre des valeurs différentes, c'est-à-dire 1, activé, auto, vrai est la valeur vraie, et 0, désactivé, faux, manuel est faux . Une autre caractéristique de l'application est que pour vérifier l'exécution de la commande, en cas de réussite, une valeur vide est publiée dans la même rubrique. Et si la valeur après publication n'a pas disparu, cela indique qu'une erreur s'est produite lors de l'exécution de la commande ou que la valeur ne correspond pas à la bonne pour cette rubrique. Par exemple, lorsque vous modifiez le niveau de volume, si la valeur ne correspond pas au nombre ou dépasse le maximum, pour un type de niveau de volume donné, il renvoie une erreur.

Toujours dans cette version, l'ensemble des commandes de notifications et de «dialogues» a été étendu, elles vous permettent d'afficher des informations plus détaillées, ainsi que d'interagir avec l'utilisateur si l'appareil est utilisé comme informateur. Lors de leur construction, un grand nombre de paramètres sont requis, il est donc nécessaire de publier la valeur au format JSON dans la rubrique appropriée.

Pour les notifications, rubrique / comm / notification / create (ci-dessous est un exemple de la valeur)

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

Pour les "dialogues" rubrique / comm / notification / alerte . La réponse des "dialogues" vient au format JSON et est publiée dans la rubrique / info / alert / response

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

Intégration IoBroker




En intégrant dans les applications la possibilité de travailler via le protocole MQTT, je voulais simplement simplifier l'intégration avec le système et me débarrasser de l'écriture d'un pilote séparé. Mais certaines fonctions ne peuvent pas être implémentées via le protocole MQTT, et pour cette raison, un pilote ne peut pas être supprimé.

La structure des objets pilotes est similaire à la structure de MQTT, et est également divisée en deux branches / info / et / comm / , elle a des commandes similaires pour la gestion et la même réaction aux données incorrectes. Je ne décrirai pas ici les paramètres et le fonctionnement du pilote; toutes les informations actuelles seront mises à jour sur GitHub .

Remarques


En ce qui concerne la gestion des paramètres du système (contrôle de la luminosité du rétroéclairage, réveil du sommeil, etc.), différents appareils répondent différemment ou non aux commandes. En raison de la grande variété d'appareils, de versions du SDK et de micrologiciels, il est difficile de définir un modèle de comportement par commande. Ici, vous devez sélectionner l'action en fonction de votre appareil, par exemple, pour la plupart des appareils pour éteindre l'écran (l'envoyer en veille), il suffit de modifier le délai d'expiration du rétroéclairage, mais sur certains appareils, cela ne fonctionnera pas. La même situation avec d'autres paramètres système, pour la plupart des appareils, des changements se produiront immédiatement, mais pour d'autres, il est nécessaire de mettre l'appareil en veille puis de le réveiller pour que les changements prennent effet. Les plus petits problèmes de ce type surviennent avec le SDK 19 (Android 4.4), mais ce n'est pas précis.) N'oubliez pas non plus qu'il existe un support pour Tasker, et si vous n'avez pas de fonction, vous pouvez l'ajouter et interagir via l'application.

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


All Articles