3. Usando o construtor de fluxos (Flow)

Este tutorial mostrará como usar corretamente o construtor de fluxo para processar mensagens e eventos gerados pelos dispositivos.

Nota

  • Para quem é: usuários iniciantes
  • Nível: básico
  • Tempo de leitura: 15 min

3.1. Nós da dojot

3.1.1. Evento dispositivo - entrada (Device Event in)

device_node

Este nó especifica as mensagens recebidas de ou enviadas para um dispositivo específico. A mensagem criada por este nó é um pouco diferente daquela criada pelo nó DeviceIn:

{
    "data": {
        "attrs": {
            "temperature": 10,
            "some-static-attr": "efac"
        }
    }
}

Essa estrutura pode ser referenciada em nós como Modelo do dispositivo:

Sample message {{payload.data.attrs.temperature}}

Para configurar o dispositivo no nó, uma janela como a Fig. 3.1 será exibida.

devicein_node_cfg

Fig. 3.1 : Dispositivo na janela de configuração

Campos

  • Nome (Name) (opcional): Nome do nó
  • Dispositivo (Device) (obrigatório): o dispositivo dojot que acionará o fluxo
  • Eventos (Events) (obrigatório): selecione quais eventos acionarão esse fluxo. A opção Atuação (Actuation) seleciona mensagens de atuação (aquelas enviadas ao dispositivo) e Publicação (Publication) seleciona todas as mensagens publicadas pelo dispositivo.

Nota

Se o dispositivo que aciona um fluxo for removido, o fluxo não funcionará mais.

3.1.2. Modelo de dispositivo - Eventos - entrada (event device template)

devicetemplatein_node

Este nó especifica que as mensagens dos dispositivos compostos por um modelo específico acionarão esse fluxo. Por exemplo, se o modelo de dispositivo definido neste nó for o modelo A, todos os dispositivos compostos com o modelo A acionarão o fluxo. Por exemplo: dispositivo1 é composto pelos modelos [A, B], dispositivo2 pelo modelo A e dispositivo3 pelo modelo B. Então, nesse cenário, apenas as mensagens do dispositivo1 e do dispositivo2 iniciarão o fluxo, porque o modelo A é um dos modelos que compor esses dispositivos.

devicetemplatein_node

Fig. 3.2 : Modelo de dispositivo janela de configuração

Campos

  • Nome (Name) (opcional): Nome do nó.
  • Dispositivo (Device) (obrigatório): o dispositivo dojot que acionará o fluxo.
  • Eventos (Events) (obrigatório): Selecione qual evento acionará esse fluxo. A criação (Creation), a atualização (Update) e a remoção (Removal) estão relacionadas às operações de gerenciamento de dispositivos. Atuação (Actuation) acionará esse fluxo no caso de enviar mensagens de atuação para o dispositivo e Publicação (Publication) acionará esse fluxo sempre que um dispositivo publicar uma mensagem para executar.

3.1.3. Saída para multiplos dispositivos (Multi device out)

deviceout_node

A saída do dispositivo determinará qual dispositivo (ou dispositivos) terá seus atributos atualizados no dojot de acordo com o resultado do fluxo. Lembre-se de que este nó não envia mensagens para o seu dispositivo; ele atualiza apenas os atributos na plataforma. Normalmente, o dispositivo escolhido é um dispositivo virtual, que existe apenas no dojot.

deviceout_node_cfg

Fig. 3.3 : Janela de configuração do dispositivo

Campos

  • Nome (Name) (opcional): Nome do nó.
  • Ação (Action) (obrigatório): Qual nó receberá a atualização. As opções são:
    • O dispositivo que acionou o fluxo: isso atualizará o mesmo dispositivo que enviou a mensagem que acionou esse fluxo.
    • Dispositivo(s) específicos (Specific device(s)): quais nós que receberão a atualização.
    • Dispositivo(s) definido(s) durante o fluxo (Device(s) defined during the flow): quais nós que receberão a atualização. Isso é referenciado por uma lista de valores, assim como os valores de saída (msg.list_of_devices).
  • Dispositivo (Device) (obrigatório): selecione “O dispositivo que acionou o fluxo” fará com que o dispositivo que foi o ponto de entrada seja o ponto final do fluxo. “Dispositivo específico” qualquer dispositivo escolhido será a saída do fluxo e “um dispositivo definido durante o fluxo” tornará um dispositivo que o fluxo selecionou durante a execução o ponto final.
  • Origem (Source) (obrigatório): estrutura de dados que será mapeada como mensagem para saída do dispositivo

3.1.4. Multi atuador (Multi actuate)

actuate_node

O nó de atuação é, basicamente, a mesma coisa que o nó de dispositivo (saída). Mas pode enviar mensagens para um dispositivo real, como dizer a uma lâmpada para desligar a luz e etc.

actuate_node_cfg

Fig. 3.4 : Configuração de atuação

Campos

  • Nome (Name) (opcional): Nome do nó.
  • Ação (Action) (obrigatório): para qual dispositivo uma mensagem será enviada. As opções são:
    • O dispositivo que acionou o fluxo: isso enviará uma mensagem para o mesmo dispositivo que enviou a mensagem que acionou esse fluxo.
    • Dispositivo(s) específicos (Specific device(s)): para qual nó a mensagem será enviada.
    • Dispositivos definidos durante o fluxo (Device(s) defined during the flow): para quais nós a mensagem será enviada. Isso é referenciado por uma lista de valores, assim como os valores de saída (msg.list_of_devices).
  • Dispositivo (Device) (obrigatório): selecione “O dispositivo que acionou o fluxo” fará com que o dispositivo que foi o ponto de entrada seja o ponto final do fluxo. “Dispositivo específico” qualquer dispositivo escolhido será a saída do fluxo e “um dispositivo definido durante o fluxo” tornará um dispositivo que o fluxo selecionou durante a execução o ponto final.
  • Origem (Source) (obrigatório): estrutura de dados que será mapeada como mensagem para saída do dispositivo

3.1.5. http

http_node

Este nó envia uma solicitação http para um determinado endereço e, em seguida, pode encaminhar a resposta para o próximo nó no fluxo.

httpin_node

Fig. 3.5 : Modelo de dispositivo janela de configuração

Campos

  • Método (Method) (obrigatório): o método http (GET, POST, etc …).
  • URL (obrigatório): a URL que receberá a solicitação http
  • Corpo da solicitação (Request body) (obrigatório): variável que contém o corpo da solicitação. Este valor pode ser atribuído à variável usando o nó do modelo, por exemplo.
  • Resposta (Response) (obrigatório): variável que receberá a resposta http.
  • Retorno (Return) (obrigatório): Tipo do retorno.
  • Nome (Name) (obrigatório): Nome do nó.

3.1.6. ftp

http_node

Este nó envia ou recupera um arquivo de/para um servidor FTP. Ao fazer upload de um arquivo, seu nome pode ser definido configurando o campo “Nome do arquivo” da mesma maneira que outras variáveis de saída (ele deve se referir a uma variável definida no fluxo). A codificação do arquivo definirá o encconding do arquivo, que pode ser, por exemplo, “base64” ou “utf-8”.

httpin_node

Fig. 3.6 : Modelo de dispositivo janela de configuração

Campos

  • Método (Method) (obrigatório): a ação do FTP a ser executada (PUT, GET).
  • URL (obrigatório): o servidor FTP
  • Autenticação (Authentication) (obrigatório): Nome de usuário e senha para acessar este servidor.
  • Nome do arquivo (File name) (obrigatório): variável que contém o nome do arquivo a ser carregado ou baixado.
  • Conteúdo do arquivo (File content) (obrigatório): no caso de upload de um arquivo, essa variável deve conter o conteúdo do arquivo.
  • Codificação de arquivo (File encoding) (obrigatório): como o arquivo é codificado
  • Resposta (Response) (obrigatório): Variável que receberá a resposta (ou arquivo) do FTP

3.1.7. Notificação (notification)

http_node

Este nó envia uma notificação do usuário para outros serviços na dojot. Isso pode ser útil para gerar notificações de aplicativos que podem ser consumidas por uma aplicação front-end. O usuário pode definir uma mensagem estática a ser enviada ou, como outros nós de saída, configurar um conjunto de variáveis em um nó anterior que será resolvido no tempo de execução. Além disso, os metadados podem ser adicionados à mensagem: pode ser um objeto de valor-chave simples que contém dados arbitrários.

httpin_node

Fig. 3.7 : Modelo de dispositivo janela de configuração

Campos

  • Nome (Name) (opcional): Nome do nó
  • Mensagem (Message) (obrigatório): Estática, se a notificação contiver um texto estático ou dinâmico, que permitirá que uma variável seja configurada como saída para este nó. Essa variável será substituída no tempo de execução.
  • Valor (Value) (obrigatório): conteúdo da mensagem (texto estático ou referência variável).
  • Metadados (Metadata) (obrigatório): referência de variável que contém um dicionário simples (pares de valores-chave) que contém os metadados a serem adicionados à mensagem

3.1.8. Definir valor (Change)

change_node

O nó de Definir valor é usado para copiar ou atribuir valores a uma saída, por exemplo, copie valores de atributos de uma mensagem para um dicionário que será atribuído ao dispositivo virtual.

change_node_cfg

Fig. 3.8 : Definir valor (Change) configuração

Campos

  • Nome (Name) (opcional): Nome do nó
  • msg (obrigatório): definição da estrutura de dados que será enviada para o próximo nó e receberá o valor definido no campo para
  • para (to) (obrigatório): atribuição ou cópia de valores

Nota

Mais de uma regra pode ser atribuída clicando em +adicionar abaixo da caixa de regras

3.1.9. Interruptor (Switch)

switch_node

O nó Switch permite que as mensagens sejam roteadas para diferentes ramificações de um fluxo avaliando um conjunto de regras em relação a cada mensagem.

switch_node_cfg

Fig. 3.9 : Switch configurações

Campos

  • Nome (Name) (opcional): Nome do nó
  • Propriedade (Property) (obrigatório): variável que será avaliada
  • Caixa de regras (obrigatório): regras que determinarão a ramificação de saída do nó. Além disso, ele pode ser configurado para interromper a verificação de regras quando encontrar uma que corresponda a outra ou verificar todas as regras e rotear a mensagem para a saída correspondente.

Nota

  • Mais de uma regra pode ser atribuída clicando em +adicionar abaixo da caixa de regras
  • As regras são mapeadas individualmente para os conectores de saída. Que a primeira regra está relacionada à primeira saída, a segunda regra à segunda saída e etc…

3.1.10. Modelo (Template)

Nota

Apesar do nome, este nó não tem nada a ver com modelos de dispostivos da dojot

template_node

Este nó atribuirá um valor a uma variável de destino. Este valor pode ser uma constante, o valor de um atributo que veio do dispositivo de entrada e etc.

Ele usa a linguagem mustache. Verifique a Fig. 3.10 como exemplo: o campo a da payload será substituído pelo valor de payload.b

template_node_cfg

Fig. 3.10 : Configurações do Modelo

Campos

  • Nome (Name) (opcional): Nome do nó
  • Propriedade (Set Property) (obrigatório): variável que receberá o valor
  • Formato (Format) (obrigatório): o modelo de formato que será gravado
  • Modelo (Template) (obrigatório *: valor que será atribuído à variável de destino definida em **Propriedade*
  • Saída (Output as) (obrigatório): o formato da saída

3.1.11. Geo referência (Geofence)

geofence_node

Select an interest area to determine wich devices will activate the flow

geofence_node_cfg

Fig. 3.11 : Geo referência (Geofence) configuração

Campos

  • Área (Area) (obrigatório): Área que será selecionada. Pode ser escolhido com um quadrado ou um pentago
  • Filtro (Filter) (obrigatório): Qual lado da área será selecionado: dentro ou fora da área marcada no campo acima.
  • Nome (Name) (opcional): Nome do nó

3.1.12. Obter contexto (Get Context)

getcontext_node

Este nó é usado para obter uma variável que está no contexto e atribuir seu valor a uma variável que será usada no fluxo.

getcontext_node_cfg

Campos

  • Nome (Name) (opcional)*: Nome do nó
  • Camada de contexto (Context layer) (obrigatório)*: a camada do contexto em que a variável está
  • Nome do contexto (Context name) (obrigatório)*: a variável que está no contexto
  • Conteúdo do contexto (Context content) (obrigatório)*: a variável no fluxo que receberá o valor do contexto

3.1.13. Nós descontinuados

Esses nós estão programados para serem removidos em versões futuras. Eles funcionarão sem problemas com os fluxos atuais.

3.1.13.1. Dispositivo (entrada) [Device in]

device_node

Este nó determina um dispositivo específico para ser o ponto de entrada de um fluxo. Para configurar o dispositivo no nó, uma janela como a Fig. 3.13 será exibida.

devicein_node_cfg

Fig. 3.13 : Dispositivo na janela de configuração

Campos

  • Nome (Name) (opcional): Nome do nó
  • Dispositivo (Device) (obrigatório): o dispositivo dojot que acionará o fluxo
  • Estado (Status0 (obrigatório): excluir alterações de status do dispositivo não usará alterações de status do dispositivo (online, offline) para acionar o fluxo. Por outro lado, incluir alterações de status dos dispositivos usará esses status para acionar o fluxo.

Nota

Se o dispositivo que aciona um fluxo for removido, o fluxo se tornará inválido.

3.1.13.2. Modelo de dispositivo - entrada (Device template in)

devicetemplatein_node

Esse nó fará com que um fluxo seja acionado por dispositivos compostos por um determinado modelo. Se o modelo de dispositivo configurado no modelo de dispositivo no nó for o modelo A, todos os dispositivos compostos com o modelo A acionarão o fluxo. Por exemplo: dispositivo1 é composto pelos modelos [A, B], dispositivo2 pelo modelo A e dispositivo3 pelo modelo B. Então, nesse cenário, apenas as mensagens do dispositivo1 e do dispositivo2 iniciarão o fluxo, porque o modelo A é um dos modelos que compor esses dispositivos.

devicetemplatein_node

Fig. 3.14 : Modelo de dispositivo janela de configuração

Campos

  • Nome (Name) (opcional): Nome do nó.
  • Dispositivo (Device) (obrigatório): o dispositivo dojot que acionará o fluxo.
  • Estado (Status) (obrigatório): escolha se as alterações de status dos dispositivos acionarão ou não o fluxo.

3.1.13.3. Dispositivo (saída) [Device out]

deviceout_node

A saída do dispositivo determinará qual dispositivo terá seus atributos atualizados no dojot de acordo com o resultado do fluxo. Lembre-se de que este nó não envia mensagens para o seu dispositivo; ele atualiza apenas os atributos na plataforma. Normalmente, o dispositivo escolhido é um dispositivo virtual, que existe apenas na dojot.

deviceout_node_cfg

Fig. 3.15 : Janela de configuração do dispositivo

Campos

  • Nome (Name) (opcional): Nome do nó.
  • Dispositivo (Device) (obrigatório): selecione “O dispositivo que acionou o fluxo” fará com que o dispositivo que foi o ponto de entrada seja o ponto final do fluxo. “Dispositivo específico” qualquer dispositivo escolhido será a saída do fluxo e “um dispositivo definido durante o fluxo” tornará um dispositivo que o fluxo selecionou durante a execução o ponto final.
  • Origem (Source) (obrigatório): estrutura de dados que será mapeada como mensagem para saída do dispositivo

3.1.13.4. Atuar (Actuate)

actuate_node

O nó de atuação é, basicamente, a mesma coisa que o nó de dispositivo (saída). Mas pode enviar mensagens para um dispositivo real, como dizer a uma lâmpada para desligar a luz e etc.

actuate_node_cfg

Fig. 3.16 : Configuração de atuação

Campos

  • Nome (Name) (opcional): Nome do nó.
  • Dispositivo (Device) (obrigatório): um dispositivo real no dojot
  • Origem (Source) (obrigatório): estrutura de dados que será mapeada como mensagem para saída do dispositivo

3.2. Aprenda por exemplos

3.2.1. Usando nó http

Imagine este cenário: um dispositivo envia um usuário e uma senha e, a partir desses atributos, o fluxo solicitará a um servidor um token de autenticação que será enviado a um dispositivo virtual que possua um atributo de token.

using_http_node_flow

Fig. 3.17 : Fluxo usado para explicar o nó http

Para enviar essa solicitação ao servidor, o método http deve ser um POST e os parâmetros devem estar dentro da requisição. Portanto, no nó do modelo, um objeto JSON será designado a uma variável. O corpo (parâmetros usuário e senha) da requisição será designado à chave de payload do objeto JSON. E, se necessário, esse objeto também pode ter um headers como chave.

using_http_node_template

Fig. 3.18 : Configuração do nó do modelo

Em seguida, no nó http, o campo Requisição receberá o valor do objeto criado no nó do modelo. E, a resposta será atribuída a qualquer variável, neste caso, é msg.res.

Nota

Se o buffer UTF-8 String for escolhido no campo de retorno, o corpo do corpo da resposta será uma string. Se o objeto JSON for escolhido, o corpo será um objeto.

using_http_node_http

Fig. 3.19 : Configuração do nó do modelo

Como visto, a resposta do servidor é req.res e o corpo da resposta pode ser acessado em msg.res.payload. Portanto, as chaves do objeto que veio na resposta podem ser acessadas por: msg.res.payload.key. Na figura Fig. 3.20, o token que veio na resposta é atribuído ao token de atributo do dispositivo virtual.

using_http_node_change

Fig. 3.20 : Configuração do nó do modelo

using_http_node_deviceout

Fig. 3.21 : Configuração do dispositivo de saída

Em seguida, o resultado do fluxo é que o token de atributo do dispositivo virtual seja atualizado com o token que veio na resposta da solicitação http:

using_http_node_result

Fig. 3.22 : Dispositivo atualizado

3.2.2. Usando o nó de geo referência (geofence)

Um bom exemplo para aprender como o nó geo referência (geofence) funciona é com o fluxo abaixo:

using_geofence_node_flow

Fig. 3.23 : Fluxo usando geo referência

O nó de geo referência é definido como parece na Fig. 3.24. A única coisa que diferencia os nós de geo referência in area e out of the area é o campo Filtro que, no primeiro, é configurado para apontar apenas para dentro e para fora no segundo, respectivamente.

using_geofence_node_geofence

Fig. 3.24 : Configuração do nó de geo referência

Em seguida, se o dispositivo definido como dispositivo enviar uma mensagem com um atributo geográfico, o nó geo referência avaliará o ponto geográfico de acordo com sua regra e se corresponder à regra, o nó encaminhará as informações para o próximo nó e, se não , a execução da ramificação, que possui a geo referência que a regra não corresponde, para.

Nota

Para o nó de geo referência funcionar, a mensagem recebida deve ter um atributo geográfico; caso contrário, as ramificações do fluxo serão interrompidas nos nós de geo referência.

De volta ao exemplo, se o carro enviar uma mensagem de que ele está na área marcada, como {"position": "-22.820156, -47.2682535"}, a mensagem recebida no dispositivo será “Carro está dentro da área marcada” e se enviar {"position": "0,0"} o dispositivo receberá “O carro está fora da área marcada”

using_geofence_node_template

Fig. 3.25 : Configuração do nó do modelo se o carro estiver na área marcada

using_geofence_node_result

Fig. 3.26 : Saída no dispositivo