Comment j'ai ajouté un nouvel appareil au SmartThings Hub, partie 1

Dans cet article, je veux parler de mon expérience dans le développement du soi-disant gestionnaire de périphériques pour SmartThings. La tâche consistait à ajouter un appareil universel basé sur le protocole Z-Wave - Z-Uno , ainsi que le traitement des appareils enfants qui lui sont connectés.



L'introduction au développement m'a pris beaucoup de temps, mais après avoir éclairé une étude approfondie de la plupart de la documentation, la poursuite du développement ne nécessitait plus beaucoup d'efforts. À la suite de cela, il a été décidé d'écrire cet article afin de faciliter le travail de l'utilisateur russophone.

L'ensemble du processus de développement se déroule dans l'application Web SmartThings IDE du langage GroThy. Les tests sont plus pratiques à effectuer à partir d'un appareil mobile, mais il est possible de créer des simulateurs d'appareils dans le même environnement de développement. Dans le cas du test du shell graphique, il est déjà nécessaire d'utiliser l'application mobile SmartThings Classic ( Android , iOS ).

Un périphérique enfichable est une carte qui vous permet d'ajouter du contrôle à presque tous les périphériques de Z-Wave. De plus, les appareils connectés peuvent être d'un nombre différent (jusqu'à 32 pièces). En conséquence, au niveau du logiciel, tous les types d'appareils connectés doivent également être traités et contrôler la sortie vers l'application.

Liste des types traités:

  • Switch Binary - appareils avec seulement deux positions: marche / arrêt
  • Switch Multilevel - appareils qui peuvent être activés ou désactivés avec des significations différentes. Par exemple, un dimère.
  • Sensor Multilevel - capteurs envoyant des valeurs non binaires. Par exemple, un capteur de température.
  • Compteur - des appareils comme un compteur
  • Notification - les capteurs binaires seront de ce type. Par exemple, un interrupteur à lames.
  • Thermostat - une classe distincte d'équipes qui est responsable de travailler avec le thermostat


Structure du document


On distingue deux blocs logiques:

  • Description et méta-informations sur le gestionnaire. Cela inclut des informations sur l'appareil, la façon dont l'interface utilisateur et d'autres informations doivent être dessinées. Il est alloué par la méthode metadata() .


  • Les méthodes de gestionnaire sont une logique de gestionnaire. Ils sont responsables de la «communication» avec l'appareil.

    Séparément, nous pouvons distinguer la méthode parse (), qui interprète les commandes reçues de l'appareil.

Je décrirai plus en détail le but et le contenu de chaque bloc au cours de la série d'articles.

Métadonnées


Comme vous pouvez le voir sur le nom de la méthode, cela contient des méta-informations.

Considérons dans l'ordre ce qui est inclus dans ce bloc:

Définition ()


Dans cette méthode, les arguments indiquent respectivement trois choses: le nom du gestionnaire, l'espace de noms et le nom de l'auteur.

  • Le nom du gestionnaire sera utilisé à l'avenir lors de la publication et lors de la création de périphériques enfants.
  • L'espace de noms est utilisé lors de la recherche de gestionnaires par nom pour s'assurer que le bon est trouvé, par exemple, parmi les gestionnaires portant le même nom. SmartThings recommande d'utiliser votre pseudo sur github.
  • Le nom de l'auteur est complété par votre nom.

  definition(name: "Your device", namespace: "yournamespace", author: "your name") {} 

Les variables suivantes peuvent être déclarées dans le corps de la méthode: attribute, capability, command, fingerprint . De plus, nous examinerons plus en détail de quoi il s'agit et quand il sera appliqué.

Connexion et empreinte digitale


Nous connectons notre appareil. Dans notre cas, SmartThings V2 Hub et Z-Uno seront utilisés.

Au moment d'ajouter un nouveau périphérique Z-Wave ou ZigBee, le concentrateur essaiera de reconnaître à quel type de périphérique il essaie de se connecter et commencera à rechercher le gestionnaire le plus pertinent. Il le choisira par «Empreintes digitales». Si le concentrateur ne trouve pas de correspondances dans les gestionnaires personnalisés, il essaiera d'utiliser l'un des modèles standard les plus proches.

Des «empreintes digitales» sont définies dans le gestionnaire lui-même pour indiquer les types de périphériques pris en charge. La documentation officielle indique qu'ils seront différents pour les appareils Z-Wave et ZigBee, nous considérerons l'implémentation de Z-Wave.

Les périphériques de protocole Z-Wave stockent des informations sur leur fabricant, le type de périphérique, ses capacités, etc. Lors de la soi-disant «interview» avec l'appareil, ST recueille ces informations dans la description brute de Z-Wave. Un exemple d'une telle ligne:

 zw:Ss type:2101 mfr:0086 prod:0102 model:0064 ver:1.04 zwv:4.05 lib:03 cc:5E,86,72,98,84 ccOut:5A sec:59,85,73,71,80,30,31,70,7A role:06 ff:8C07 ui:8C07 

La valeur de chaque clé est utilisée pour remplir «l'empreinte digitale». Une description détaillée de chaque article peut être trouvée ici . Nous considérerons ceux qui seront utilisés dans notre gestionnaire.

Pour trouver cette ligne contenant des informations, vous devez vous rendre dans l'onglet «Mes appareils» et cliquer sur l'appareil qui nous intéresse (avant cela, l'appareil doit être ajouté au réseau).



mfr est une valeur de 16 bits contenant l'ID du fabricant. Une liste des fabricants et de leurs identifiants peut être trouvée ici .

prod - une valeur de 16 bits contenant l'ID de type de produit - un ID de type d'appareil unique.

modèle est une valeur de 16 bits contenant l'ID de produit.

inClusters - Une valeur 8 bits qui établit le besoin d'une classe de commande particulière. Par exemple, si nous devons indiquer que notre gestionnaire fonctionnera avec MultiChannel CC, vous devez écrire son code 0x60. La liste des disponibles pour SmartThings CC peut être trouvée ici .

Ces quatre clés suffisent pour que le concentrateur comprenne exactement à quel périphérique ce gestionnaire appartient. Un exemple de la façon dont ils sont utilisés avec moi:

 fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60" 

Un périphérique peut avoir un plus grand nombre de paramètres, auquel cas il peut se connecter avec succès à ce gestionnaire, cependant, si au moins l'un d'entre eux ne correspond pas à l'empreinte digitale déclarée, le périphérique ignorera ce gestionnaire.

Smartthings recommande d'ajouter des informations sur le fabricant (mfr) et le modèle (prod, model) dans l'empreinte digitale, afin d'exclure les cas où le choix d'un gestionnaire ne sera pas évident. Par exemple, lorsque les empreintes digitales de l'un des modèles ou exemples utilisés par défaut correspondent aux vôtres.

Emplacement dans le code
 metadata { definition(...) { ... fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60" } ... } 


Un cycle complet d'articles est prévu, jusqu'à la sortie. J'espère que ces informations vous aideront dans le développement.

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


All Articles