3. Conceitos

Este documento fornece informações sobre os conceitos e abstrações da dojot.

Nota

  • Público
    • Usuários que desejam dar uma olhada em como a dojot funciona;

    • Desenvolvedores de aplicativos.

  • Nível: básico

3.1. noções básicas da dojot

Antes de usar a dojot, você deve estar familiarizado com algumas operações e conceitos básicos. Eles são muito simples de entender e usar, mas sem eles, todas as operações podem se tornar obscuras e sem sentido. Vamos nos concentrar em explicar o que são dispositivos, modelos e fluxos na dojot.

Se você quiser obter mais informações sobre como a dojot funciona internamente, consulte a Arquitetura para se familiarizar com todos os componentes internos.

3.1.1. Autenticação de usuário

Todas as solicitações HTTP suportadas pela dojot são enviadas para o API gateway. Para controlar qual usuário deve acessar quais endpoints e recursos, a dojot utiliza JSON Web Token (uma ferramenta útil é o jwt.io) que codifica coisas como (não se limitando a isso):

  • Identidade do usuário

  • Dados de validação

  • Data de validade do token

O componente responsável pela autenticação do usuário é auth. Você pode encontrar um tutorial de como autenticar um usuário e obter um token de acesso em Obtendo um token de acesso.

3.1.2. Autenticação de dispositivo

A autenticação de dispositivos se baseia na utilização de chaves criptográficas assimétricas e é feita através de certificados x.509 gerenciados pela dojot. Para isso, é preciso instalar no dispositivo tal certificado. A dojot possui um serviço de emissão de certificados onde é possível obter o certificado para ser instalado no dispositivo.

Além do certificado e das chaves assimétricas, o dispositivo precisa confiar na Autoridade Certificadora da dojot, ou seja, também é preciso instalar o certificado raiz da plataforma dojot.

O certificado é requisitado pelo administrador do tenant ao qual os dispositivos estão cadastrados. Uma vez que o administrador siga os passos necessários para a obtenção do certificado, ele terá que instalar no dispositivo o certificado emitido e o certificado raiz da dojot. É importante ressaltar que o certificado possui em sua composição uma chave criptográfica assimétrica, esta chave é chamada de chave pública (que qualquer um tem acesso), enquanto que no dispositivo deve ser instalada a chave privada (chave que só o dispositivo tem acesso).

Uma vez que o dispositivo contenha a chave privada, o certificado (contendo a chave pública) e também o certificado raiz da dojot, é possível estabelecer um canal de comunicação seguro com a plataforma dojot, na qual o dispositivo é identificado através do seu certificado.

Após o canal seguro ser estabelecido, o dispositivo é capaz de publicar dados e também receber dados desde que ele esteja autorizado a isso.

Verifique Usando MQTT com segurança (TLS) para mais informações sobre seu uso.

3.1.3. Dispositivos e modelos (templates)

Na dojot, um dispositivo é uma representação digital de um dispositivo ou gateway real com um ou mais sensores ou de um virtual com sensores/atributos inferidos de outros dispositivos. Em toda a documentação, esse tipo de dispositivo será chamado simplesmente de “dispositivo”. Se o dispositivo real precisar ser referenciado, nós o chamaremos de “dispositivo físico”.

Considere, por exemplo, um dispositivo físico com sensores de temperatura e umidade; ele pode ser representado na dojot como um dispositivo com dois atributos (um para cada sensor). Chamamos esse tipo de dispositivo como dispositivo normal ou por seu protocolo de comunicação, por exemplo, dispositivo MQTT, dispositivo CoAP, etc.

Também podemos criar dispositivos que não correspondem diretamente aos seus homólogos físicos, por exemplo, podemos criar um com maior nível de informação de temperatura (está ficando mais quente ou mais frio) cujos valores são inferidos a partir de sensores de temperatura de outros dispositivos. Esse tipo de dispositivo é chamado de dispositivo virtual.

Todos os dispositivos são criados com base em um ou mais modelos (templates), que podem ser pensados como um modelo de dispositivo. Como “modelo”, poderíamos pensar em números de peça ou modelos de produtos - um protótipo a partir do qual os dispositivos são criados. Os modelos na dojot têm um rótulo (qualquer sequência alfanumérica), uma lista de atributos que conterão todas as informações emitidas pelo dispositivo.

De fato, os modelos podem representar não apenas “modelos de dispositivos”, mas também podem abstrair uma “classe de dispositivos”. Por exemplo, poderíamos ter um modelo para representar todos os termômetros que serão usados na dojot. Este modelo teria apenas um atributo chamado, digamos, “temperatura”. Ao criar o dispositivo, o usuário selecionaria seu “modelo físico”, digamos TexasInstr882 e o modelo “termômetro”. O usuário também teria que adicionar instruções de tradução (implementadas em termos de fluxos de dados, construídas no construtor de fluxo) para mapear a leitura de temperatura que será enviada do dispositivo para um atributo de “temperatura”.

Para criar um dispositivo, um usuário seleciona quais modelos irão compor esse novo dispositivo. Todos os seus atributos são mesclados e associados a ele - eles estão fortemente vinculados ao modelo original para que qualquer atualização de modelo reflita todos os dispositivos associados.

O componente responsável pelo gerenciamento de dispositivos (reais e virtuais) e modelos (templates) é o DeviceManager.

A documentação do DeviceManager no ReadMe do GitHub explica com mais detalhes todas as operações disponíveis. Você pode encontrar o link em Componentes e APIs.

3.1.4. Fluxos (Flows)

Um fluxo é uma sequência de blocos que processa um evento ou mensagem de dispositivo específica. Contém:

  • ponto de entrada: um bloco representando qual é o gatilho para iniciar um fluxo específico;

  • blocos de processamento: um conjunto de blocos que executam operações usando o evento. Esses blocos podem ou não usar o conteúdo desse evento para processá-lo ainda mais. As operações podem ser: testar conteúdo para valores ou intervalos específicos, análise de posicionamento geográfico, alterar atributos de mensagens, executar operações em elementos externos e assim por diante.

  • ponto de saída: um bloco que representa para onde os dados resultantes devem ser encaminhados. Esse bloco pode ser um banco de dados, um dispositivo virtual, um elemento externo e assim por diante.

O componente responsável por lidar com esses fluxos é flowbroker.

Verifique Usando o construtor de fluxos (Flowbroker) para mais informações sobre seu uso.