Uma Arquitetura para Web of Things (WoT)



Por: Dominique Guinard e Vlad Trifa

Este artigo foi originalmente publicado por IoT Technica Curiosa magazine.

A Internet das Coisas - IoT resumidamente - veio para ficar e com isso mudar o mundo para melhor. Está visão colossal retrata um mundo onde pessoas, construções e até mesmo objetos estão conectados a uma mesma rede. Neste mundo, garrafas de refrigerante, luzes do seu apartamento, carros e todo o resto fornecerão serviços e trocarão dados uns com os outros.

Você deve ter percebido que a IoT está mais pra uma Intranet das Coisas: para interagir com dez dispostivos diferentes do seu telefone, você precisa instalar dez aplicativos diferentes. O problema é que não existe uma única forma para se comunicar entre todos e cada objeto. Há literalmente centenas! A pior parte é que a maioria desses protocolos e padrões IoT não são compatíveis entre si e, por esse motivo, esta tecnologia ainda não cumpriu suas promessas (ainda!).

IoT versus WoT.
Conectando todas as coisas a Internet e dar-lhes a cada uma endereços de IP é apenas o primeiro passo para a realização da Internet das coisas. Os dispositivos podem facilmente trocar dados uns com os outros, mas eles não entenderão necessariamente o que esses dados significam.  Isso é o que os protocolos da Web como o HTTP trouxeram para a Internet: uma maneira universal de descrever imagens, texto e outros elementos de mídia para que as máquinas pudessem se "entender". A Web of Things-ou WoT - é simplesmente a próxima etapa desta evolução: usando e adaptando protocolos da Web para conectar qualquer coisa no mundo físico e dar-lhe presença na World Wide Web.

Assim como a arquitetura em camadas OSI organiza muitos protocolos e padrões da Internet, a arquitetura WoT é uma tentativa de estruturar a galáxia de protocolos e ferramentas da Web em uma estrutura útil para conectar qualquer dispositivo ou objeto à Web. A pilha de arquitetura WoT não é composta de camadas em sentido estrito, mas sim de níveis que adicionam funcionalidades extras, conforme mostrado na Figura 1 abaixo. Cada camada ajuda a integrar as coisas na Web de forma ainda mais precisa, tornando esses dispositivos mais acessíveis para aplicações e pessoas.

Figura 1. A arquitetura WoT e suas quatro camadas de aplicativos em cima da camada de rede.
Para ilustrar o que essas camadas trazem para a tabela IoT, deixe-nos apresentar WoT Pi, um dispositivo baseado em framboesa Pi que funciona em na plataforma EVERYTHING em Londres. O WoT Pi está conectado com um monte de sensores (por exemplo, temperatura, umidade) e atuadores (por exemplo, uma tela LCD, LEDs) com os quais você pode interagir através da Internet. Uma câmera conectada à Internet permite que você veja a configuração ao vivo. Confira aqui:


Camada 1: Acesso

Esta camada é responsável por transformar qualquer coisa em uma Web-Thing que pode ser interagida com o uso de solicitações de HTTP, assim como qualquer outro recurso na Web. Em outras palavras, uma Web Thing é uma API REST que permite interagir com algo no mundo real, como abrir uma porta ou ler um sensor de temperatura localizado mundo a fora.

Para ilustrar isso, os sensores de nosso Pi podem ser acessados através de uma simples solicitação HTTP na seguinte:


Vá em frente e tente isso no seu navegador. Você obterá uma representação HTML com links para os sensores. Clique em "temperatura" e você terá a temperatura. O que você está fazendo aqui é navegar pela API RESTful do nosso Pi, assim como você faria se navegasse em uma página da Web. IoT-Things podem ser mapeadas em recursos REST facilmente, como mostra a Figura 2, abaixo:

Figura 2. Recursos REST do nosso Raspberry Pi conectado.
HTML é ótimo para humanos, mas nem sempre para máquinas que preferem a notação JSON. Nosso Pi fornece ambos. Execute o seguinte comando no seu terminal usando o cURL, uma ferramenta para se comunicar com as APIs HTTP:

curl -X GET -H "Accept: application/json" "http://devices.webofthings.io/pi/sensors/humidity/"

Você verá o nível de umidade em nosso escritório de Londres em JSON em seu terminal. Este é o primeiro passo ideal para construir seu primeiro aplicativo que expande a Web para o mundo real!

Isso tudo é muito bom, mas muitos cenários do IoT são em tempo real e / ou conduzidos por eventos. Em vez de sua aplicação pedir continuamente dados ao nosso Pi, você quer que ela notifique você quando algo acontece no mundo real; por exemplo, quando a umidade atinge um certo limiar ou um ruído é detectado em sua casa no meio da noite. É aí que outro protocolo da Web pode ajudar: WebSocket. O código Javascript abaixo é suficiente para que uma página da Web obtenha automaticamente as atualizações de temperatura do WoT Pi. Cole-o no console do seu navegador da Web e você verá o nosso Pi enviando a temperatura em tempo real para o seu navegador.

var socket = new WebSocket('ws://devices.webofthings.io/pi/sensors/temperature/'); socket.onmessage = function (event) { //Called when a message is received var result = JSON.parse(event.data); console.log(result); };

Camada 2: Encontrar


Tornar as coisas acessíveis através de uma API HTTP e WebSocket é excelente, mas isso não significa que os aplicativos realmente podem "entender" o que o dispositivo é, quais dados ou serviços ele oferece, e assim por diante.

É aí que a segunda camada, Encontrar, torna-se interessante. Esta camada garante que o seu dispositivo não só possa ser facilmente usado por outros clientes HTTP, mas também possa ser encontrado e automaticamente utilizado por outros aplicativos WoT. A abordagem aqui é reutilizar os padrões semânticos da Web para descrever as coisas e seus serviços.  Isso permite pesquisar dispostivos através de mecanismos de pesquisa e outros índices da Web, bem como a geração automática de interfaces ou ferramentas de usuário para interagir com os dispositivos. Neste nível, tecnologias como o JSON-LD estão em uso: um idioma para anotar semânticamente o JSON.  Isto também é onde padrões como o Web Things Model e o trabalho do grupo W3C WoT ajudam: eles definem um conjunto abstrato de recursos REST que os dispositivos devem oferecer.


Camada 3: Compartilhe

A Internet das coisas só florescerá se os dispositivos tiverem uma maneira de compartilhar dados com segurança entre os serviços. Esta é a responsabilidade da camada Compartilhar, que especifica como os dados gerados pelos dispositivos podem ser compartilhados de maneira eficiente e segura na Web. Nesse nível, outro lote de protocolos da Web ajuda. Primeiro, há TLS, o protocolo que torna as transações na Web seguras. Então, técnicas como mecanismos de autenticação da Web, como OAuth, podem ser integradas às APIs de nossos dispositivos.

Camada 4: Composição

Finalmente, uma vez que as coisas estão na Web (camada 1), onde elas podem ser encontradas por seres humanos e máquinas (camada 2), e seus recursos podem ser compartilhados de forma segura com os outros (camada 3), é hora de olhar para como construir grandes- escalas de aplicações significativas para a Web of Things. Em outras palavras, precisamos entender a integração de dados e serviços de Dispositivos heterogêneas em um imenso ecossistema de ferramentas da Web, como software analítico e plataformas de mashup. Ferramentas da Web no intervalo de camada de composição dos toolkit's da Web - por exemplo, SDKs de JavaScript que oferecem abstrações de nível superior - para painéis com widgets programáveis e, finalmente, para ferramentas de mashup físico, como Node-RED, conforme mostrado abaixo. Inspirados pelos serviços participativos da Web 2.0 e em particular os mashups da Web, os mashups físicos oferecem uma visão unificada da Web clássica e da Web das Coisas e capacitam as pessoas a criar aplicativos usando dados e serviços da Web Things sem exigir habilidades de programação.

Figura 3. Um mashup físico com Node-RED. Quando um intruso é detectado através do sensor PIR, uma imagem é tirada e enviada para o Twitter.

Conclusão

A Web of Things é um protocolo de aplicativo de alto nível projetado para maximizar a interoperabilidade no IoT. Esperamos que esta breve introdução lhe tenha dado um gosto do seu potencial. As tecnologias da Web são amplamente populares e oferecem toda a flexibilidade e recursos necessários para a maioria das futuras aplicações IoT, incluindo descobertas, segurança e mensagens em tempo real.

Enquanto nós só explanamos sobre as idéias do WoT, esperamos que isso tenha despertado o seu interesse em tornar a IoT Things mais acessível, graças à Web. A arquitetura da Web de coisas está completamente descrita em nosso livro: "Construindo a Web das Coisas". O livro também é embalado com exemplos de código no Raspberry Pi usando a linguagem Node.js. O código é OpenSource e está disponível gratuitamente em: https://github.com/webofthings/wotbook.

Comente com o Facebook:

Nenhum comentário:

Postar um comentário

Viu algum erro e quer compartilhar seu conhecimento? então comente aí.

Observação: somente um membro deste blog pode postar um comentário.

Marcadores

A pior história sobre Linux que já ouvi (5) A.I (2) ambiente gráfico (19) AMD (14) analise (10) Andriod (16) android (7) Apple (1) arm (5) artigo (5) aws (1) bc (23) benchmark (6) BetrFS (1) blackhat (1) BSDs (30) btrfs (32) bugs (2) Caixa de Ferramentas do UNIX (19) canto do Diego Lins (2) certificações Linux (7) Código Fonte (54) comandos (31) comp (1) compressores (5) container (7) CPU (19) cracker (1) criptografia (5) crowdfunding (9) cursos (24) daemons (13) Debian (31) desempenho (1) desenvolvimento (90) desktop (19) DevOps (3) DevSecOps (4) dic (1) Dica de leitura (90) dica DLins (2) dicas do Flávio (27) Dicas TechWarn (1) diet libc (3) diocast (1) dioliunx (3) distribuições Linux (14) Docker (12) DragonflyBSD (22) driver (1) dropbear (3) ead Diolinux (2) edição de vídeo (5) embarcados (1) EMMI Linux (4) emuladores (9) endless (5) English interview (3) Enless OS (2) entrevista (17) espaço aberto (82) evento (6) facebook (1) Fedora (11) filesystem (82) financiamento coletivo (2) fork (4) fox n forests (4) FreeBSD (20) Funtoo Linux (13) games (94) gerenciadores de pacotes (4) glaucus (3) GOG (3) google (9) gpu (3) hacker (2) hardware (104) hash (1) helenos (3) I.A (1) init system (11) Intel (15) inteligencia artificial (2) IoT (1) ispconfig (1) jogos (38) kde (1) kernel (138) lançamento (64) leis (1) LFCS (1) libs (2) licenças (8) Linus (16) linus torvalds (2) Linux (194) linux foundation (3) linux para leigos (1) live (5) LPI (8) LTS (1) Mac (1) machine learning (1) matemática (9) mesa redonda (27) microcontroladores (1) microsoft (6) microst (1) muito além do GNU (166) musl (3) não viva de boatos (9) navegadores (5) NetBSD (7) newlib (1) nim (1) nintendo (1) novatec (17) novidades (1) nuvem (1) o meu ambiente de trabalho (3) off-topic (12) open source (84) OpenBSD (7) OpenShift (1) oracle (1) os vários sabores de Linux (43) padrim (2) palestras e eventos (5) partições (6) pentest (8) performance (1) pipewire (1) plan9 (1) playstation (1) processadores (30) professor Augusto Manzano (11) Programação (64) promoção (1) propagandas com Linux (8) ps4 (1) real-time. (1) Red Hat (23) redes (4) resenha nerd (4) Resumo da Semana do Dlins (2) resumo do Tux (19) retrospectiva Linux (1) risc-V (14) RISCV (13) rtos (1) runlevel (2) rust (12) segurança digital (24) servidor web (2) servidores (3) shell (9) shell script (8) sistema operacional (25) skarnet (1) smartphones (3) Software livre e de código aberto (151) sorteio (3) Steam (10) Steam no Linux (8) supercomputadores (4) suse (6) systemd (7) terminal (89) terminal de comandos (18) toca do tux (1) toybox (27) tutorial (6) Tux (3) unboxing (7) UNIX (17) UNIX Toolbox (14) vartroy (1) vga (1) virtualização (2) vulnerabilidade (6) wayland (5) web (1) whatsapp (1) whitehat (1) Windows Subsystem for Linux (2) wine (14) WoT (1) yash (1) ZFS (15) zsh (3)