Como adicionei um novo dispositivo ao SmartThings Hub, parte 1

Neste artigo, quero falar sobre minha experiência no desenvolvimento do chamado Device Handler for SmartThings. A tarefa era adicionar um dispositivo universal baseado no protocolo Z-Wave - Z-Uno , bem como o processamento de dispositivos filhos conectados a ele.



A introdução ao desenvolvimento levou muito tempo, mas depois de esclarecer um estudo cuidadoso da maior parte da documentação, o desenvolvimento adicional não exigia mais muito esforço. Como resultado disso, decidiu-se escrever este artigo para facilitar o trabalho do usuário que fala russo.

Todo o processo de desenvolvimento ocorre no aplicativo Web SmartThings IDE da linguagem GroThy. É mais conveniente realizar testes a partir de um dispositivo móvel, no entanto, é possível criar simuladores de dispositivos no mesmo ambiente de desenvolvimento. No caso de testar o shell gráfico, já é necessário usar o aplicativo móvel SmartThings Classic ( Android , iOS ).

Um dispositivo plug-in é uma placa que permite adicionar controle a praticamente qualquer dispositivo no Z-Wave. Além disso, os dispositivos conectados podem ser um número diferente (até 32 peças). Assim, no nível do software, todos os tipos de dispositivos conectados também devem ser processados ​​e controlar a saída do aplicativo.

Lista de tipos processados:

  • Switch Binary - dispositivos com apenas duas posições: on / off
  • Alternar multinível - dispositivos que podem ser desligados ou ligados com significados diferentes. Por exemplo, um dímero.
  • Sensor multinível - sensores que enviam valores não binários. Por exemplo, um sensor de temperatura.
  • Medidor - dispositivos como um contador
  • Notificação - sensores binários serão desse tipo. Por exemplo, um interruptor de palheta.
  • Termostato - uma classe separada de equipes responsáveis ​​pelo trabalho com o termostato


Estrutura do documento


Dois blocos lógicos podem ser distinguidos:

  • Descrição e meta informações sobre o manipulador. Isso inclui informações sobre o dispositivo, como a interface do usuário e outras informações devem ser desenhadas. É alocado pelo método metadata() .


  • Os métodos do manipulador são lógicos do manipulador. Eles são responsáveis ​​pela "comunicação" com o dispositivo.

    Separadamente, podemos distinguir o método parse (), que interpreta os comandos recebidos do dispositivo.

Descreverei com mais detalhes o objetivo e o conteúdo de cada bloco durante a série de artigos.

Metadados


Como você pode ver no nome do método, ele contém meta-informações.

Vamos considerar em ordem o que está incluído neste bloco:

Definição ()


Nesse método, os argumentos indicam três coisas, respectivamente: o nome do manipulador, o espaço para nome e o nome do autor.

  • O nome do manipulador será usado no futuro ao publicar e ao criar dispositivos filhos.
  • O espaço para nome é usado ao procurar manipuladores por nome para garantir que o correto seja encontrado, por exemplo, entre manipuladores com o mesmo nome. O SmartThings recomenda usar seu apelido no github.
  • O nome do autor é preenchido com o seu nome.

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

As seguintes variáveis ​​podem ser declaradas no corpo do método: attribute, capability, command, fingerprint . Além disso, consideraremos com mais detalhes o que é e quando é aplicado.

Conexão e impressão digital


Conectamos nosso dispositivo. No nosso caso, o SmartThings V2 Hub e o Z-Uno serão usados.

No momento da adição de um novo dispositivo Z-Wave ou ZigBee, o hub tentará reconhecer a que tipo de dispositivo eles estão tentando se conectar e começará a procurar o manipulador mais relevante. Ele o escolherá por "Impressões digitais". Se o hub não encontrar correspondências nos manipuladores personalizados, ele tentará usar um dos modelos padrão mais próximos.

As “impressões digitais” são definidas no próprio manipulador para indicar que tipos de dispositivos ele suporta. A documentação oficial diz que eles serão diferentes para os dispositivos Z-Wave e ZigBee; consideraremos a implementação do Z-Wave.

Os dispositivos de protocolo Z-Wave armazenam informações sobre seu fabricante, tipo de dispositivo, seus recursos etc. Durante a chamada "entrevista" com o dispositivo, o ST coleta essas informações na descrição bruta do Z-Wave. Um exemplo dessa linha:

 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 

O valor de cada tecla é usado para preencher a "impressão digital". Uma descrição detalhada de cada item pode ser encontrada aqui . Vamos considerar aqueles que serão usados ​​em nosso manipulador.

Para encontrar essa linha de informações, você precisa ir para a guia 'Meus dispositivos' e clicar no dispositivo em que estamos interessados ​​(antes disso, o dispositivo deve ser adicionado à rede).



mfr é um valor de 16 bits que contém a identificação do fabricante. Uma lista de fabricantes e seus IDs pode ser encontrada aqui .

prod - um valor de 16 bits contendo o ID do tipo de produto - um ID exclusivo do tipo de dispositivo.

model é um valor de 16 bits que contém o ID do produto.

inClusters - Um valor de 8 bits que estabelece a necessidade de uma classe de comando específica. Por exemplo, se precisarmos indicar que nosso manipulador funcionará com o MultiChannel CC, você precisará escrever o código 0x60. A lista de disponíveis para o SmartThings CC pode ser encontrada aqui .

Essas quatro chaves são suficientes para o hub entender exatamente a qual dispositivo esse manipulador pertence. Um exemplo de como eles são usados ​​comigo:

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

Um dispositivo pode ter um número maior de parâmetros; nesse caso, ele pode se conectar com êxito a esse manipulador; no entanto, se pelo menos um deles não corresponder à impressão digital declarada, o dispositivo ignorará esse manipulador.

A Smartthings recomenda adicionar informações sobre o fabricante (mfr) e o modelo (prod, modelo) na impressão digital, para excluir casos em que a escolha de um manipulador não será óbvia. Por exemplo, quando as impressões digitais de um dos modelos ou exemplos usados ​​por padrão corresponderem às suas.

Localização no código
 metadata { definition(...) { ... fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60" } ... } 


Um ciclo completo de artigos está planejado, até o lançamento. Espero que esta informação o ajude no desenvolvimento.

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


All Articles