Language of Things (LoT, em português Linguagem das Coisas) é uma linguagem de domínio específico para automação na Internet das Coisas. Usa uma sintaxe declarativa, próxima do inglês, para definir lógica, estruturas de dados, integrações e controlo de acesso, tudo executado dentro do broker MQTT da Coreflux e não num processo de aplicação à parte. O conceito foi criado por Hugo Vaz, cofundador da Coreflux, enquanto frequentava uma cadeira de linguística leccionada por Ana Maria Brito sobre gramática gerativa na tradição de Noam Chomsky. Vaz descreveu a LoT como uma camada de abstração para o chão de fábrica: o engenheiro declara a intenção — acções, modelos, rotas e regras — e o broker continua a ser o ambiente de execução, tal como a linguagem C se assentou sobre o 8051 e o 8086 sem apagar a máquina por baixo. A linguagem surgiu em 2023 com o nome Flux Lang e foi rebaptizada Language of Things por Paulo Mota, também cofundador da Coreflux.
Os programas constroem-se com quatro constructos, cada um introduzido pela palavra-chave : Actions (lógica dirigida por eventos), Models (esquemas de dados estruturados em tópicos MQTT), Routes (ligações a sistemas externos) e Rules (quem pode publicar, subscrever ou administrar o broker). Instruções como , e operam sobre tópicos e payloads MQTT. Um modelo descreve campos e tipos; a codificação no fio escolhe-se à parte, pelo que a mesma definição pode ser publicada em JSON, Protocol Buffers ou em ambos.
História Hugo Vaz, um dos cofundadores da Coreflux, criou o conceito da Language of Things enquanto frequentava uma aula de Ana Maria Brito dedicada à linguística e à obra de Noam Chomsky. Brito é professora catedrática jubilada de linguística na Faculdade de Letras da Universidade do Porto (FLUP), onde ensinou sintaxe na tradição gerativa e dirigiu programas de mestrado e doutoramento em linguística e ciências da linguagem. O trabalho em aula sobre como um conjunto pequeno de regras pode gerar uma linguagem aberta cruzou-se com a formação anterior de Vaz em metal nu: o 8051 e o 8086, depois C e C++, cada camada a declarar mais intenção e menos opcode.
Num ensaio de 2026, Vaz escreveu que a IoT industrial ainda repete o padrão anterior ao C. Uma fábrica com um CLP Modbus costuma exigir um poller feito à medida — endianness, tipos de registo, árvore de tópicos, tentativas, um simulador quando o hardware está desligado — e um trabalho seguinte em OPC UA começa doutro ficheiro em branco. Argumentou que o 8086 não precisava de uma arquitectura nova para cada programa, apenas de uma linguagem que já soubesse o que é um programa, e que a LoT deveria desempenhar esse papel no chão de fábrica: os factos (um mapa de registos, o endereço IP de um drive) permanecem explícitos, mas a cablagem à volta deixa de se reescrever todas as manhãs.
A ideia entrou na Coreflux em 2023 com o nome de trabalho Flux Lang. Paulo Mota, cofundador da empresa, deu-lhe o nome Language of Things (LoT). O broker implementa a linguagem; os modelos em templates.coreflux.org ficam uma camada acima, à maneira das bibliotecas C acima do compilador: um notebook que já correu (sondagem Modbus, OPC UA para MQTT, uma ponte Kafka) adapta-se em vez de se escrever de raiz. Vaz enquadrou também a densidade da linguagem como resposta aos modelos de linguagem de grande escala: como o broker já fornece sessões, qualidade de serviço e calendarização, a LoT gerada consegue manter mais de uma fábrica na janela de contexto do modelo do que um cliente Python equivalente, com ciclo e SDK.
Visão geral A LoT destina-se a que a transformação, o encaminhamento e a política de fluxos MQTT em directo se declarem no broker, em vez de se implementarem como microsserviços externos. A documentação oficial compara este papel ao do SQL para dados MQTT em tempo real: o programador declara a estrutura e as reacções desejadas, e o broker compila e executa as definições quando são carregadas.
As definições podem escrever-se como fonte , como ficheiros de notebook () que misturam markdown com células LoT e, opcionalmente, Python, ou implantar-se publicando no tópico de comando do broker . Um repositório público de exemplos e uma biblioteca de notebooks prontos a correr cobrem protocolos industriais, bases de dados e automações comuns.
Olá, mundo O primeiro exemplo da introdução oficial é uma acção temporizada. Depois de implantada, o broker publica em de cinco em cinco segundos, sem um ciclo de cliente externo:
DEFINE ACTION Heartbeat ON EVERY 5 SECONDS DO PUBLISH TOPIC "system/alive" WITH "ok"
Um segundo padrão encaminha o que chega num tópico para outro. é uma subscrição MQTT; é uma publicação MQTT; é a mensagem que disparou a acção:
DEFINE ACTION Echo ON TOPIC "input/message" DO PUBLISH TOPIC "output/message" WITH PAYLOAD
Qualquer um dos excertos pode colar-se numa célula de um LoT Notebook e executar-se, ou publicar-se em .
Constructos da linguagem Tudo em LoT se cria com .
Constructo Função Disparos típicos Action Executar lógica quando ocorrem eventos Tempo, tópico MQTT, eventos de sistema ou invocação manual/chamável Model Estruturar dados MQTT em esquemas tipados (agnóstico à codificação: JSON, Protocol Buffers, ou ambos) Valores de tópicos ou chamadas de acções Route Ligar o broker a sistemas externos Padrões de tópicos Rule Controlar quem pode publicar, subscrever, ligar-se ou administrar entidades Identidade do cliente e padrões de tópicos
Actions As actions são blocos executáveis que correm dentro do broker. Podem disparar num horário (), em cada mensagem MQTT correspondente (), só quando o payload muda (), ou como utilitários chamáveis por outras acções. Suportam condicionais, extracção da posição do tópico, leitura de campos JSON, publicação e, opcionalmente, chamadas a Python para cálculos que precisem de bibliotecas externas.
Models Um modelo é o esquema abstracto — campos com nome e tipo (, , , e outros) — e não um compromisso com um único formato no fio. A linguagem é agnóstica à codificação: o mesmo modelo pode emitir-se como JSON (o predefinido), como Protocol Buffers binário ( ou ), ou como ambos (, JSON no tópico do modelo e bytes protobuf num tópico filho ). Os campos protobuf podem levar um para que os números no fio coincidam com um ficheiro externo; as acções lêem esses payloads com ou , do mesmo modo que lêem JSON com .
Os modelos podem agregar valores de vários tópicos MQTT, marcar um campo como disparo e anexar carimbos temporais ou constantes. Payloads estruturados que cheguem ao tópico do modelo podem ser divididos em tópicos filho por campo.
DEFINE MODEL SensorReading WITH FORMAT JSON WITH TOPIC "sensors/formatted" ADD STRING "id" WITH "TEMP001" ADD DOUBLE "value" WITH TOPIC "sensors/raw" AS TRIGGER
DEFINE MODEL ProtoTimestamp WITH FORMAT PROTOBUF ADD INT "seconds" PROTO_TAG 1 ADD INT "nanos" PROTO_TAG 2
Routes As routes declaram ligações geridas do broker a outros sistemas. As famílias documentadas incluem protocolos industriais (Modbus, Siemens S7, OPC UA, EtherNet/IP, Allen-Bradley, Omron FINS, BACnet), bases de dados (PostgreSQL, MySQL, SQL Server, MongoDB, OpenSearch), streaming (Apache Kafka), HTTP (REST), correio electrónico, pontes e clusters MQTT, e integrações de IA/MCP.
Rules As rules são a linguagem de controlo de acesso do broker. Uma regra tem uma prioridade, um âmbito (por exemplo , , , ou operações de gestão de entidades como criar acções) e uma decisão / com base no utilizador, no cliente ou no tópico.
Exemplo O programa seguinte, da introdução oficial da linguagem, junta os quatro constructos: um modelo formata tópicos de sensores em JSON, uma acção publica um alerta quando a temperatura ultrapassa um limiar, uma rota guarda o tráfego de sensores em PostgreSQL e uma regra restringe quem pode publicar nos tópicos de alerta.
DEFINE MODEL SensorReading WITH TOPIC "sensors/+/formatted" ADD STRING "sensor_id" WITH TOPIC "sensors/+/id" ADD DOUBLE "temperature" WITH TOPIC "sensors/+/raw" AS TRIGGER ADD STRING "unit" WITH "celsius" ADD STRING "timestamp" WITH TIMESTAMP "UTC"
DEFINE ACTION TemperatureAlert ON TOPIC "sensors/+/formatted" DO SET "sensor_id" WITH TOPIC POSITION 2 SET "temp" WITH (GET JSON "temperature" IN PAYLOAD AS DOUBLE) IF {temp} > 80 THEN PUBLISH TOPIC "alerts/" + {sensor_id} + "/high_temp" WITH "Temperature above threshold"
DEFINE ROUTE SensorDB WITH TYPE POSTGRESQL ADD SQL_CONFIG WITH SERVER "postgres.example.com" WITH PORT '5432' WITH DATABASE "iot_data" WITH USERNAME "iot_user" WITH PASSWORD "secure_password" ADD EVENT StoreSensorData WITH SOURCE_TOPIC "sensors/#" WITH QUERY "INSERT INTO sensor_readings (topic, payload) VALUES ('{topic}', '{value.json}')"
DEFINE RULE RestrictAlertPublish WITH PRIORITY 10 FOR Publish TO TOPIC "alerts/#" IF USER HAS AllowedSystemAlerts OR USER IS "root" THEN ALLOW ELSE DENY
Os wildcards de tópico seguem as convenções MQTT ( para um nível, para uma subárvore). é baseado em 1.
LoT Notebook Um LoT Notebook (extensão ) é a forma habitual de escrever e distribuir um sistema LoT. É um ficheiro em células, no espírito de um notebook Jupyter, que junta documentação e definição executável no mesmo sítio: células Markdown descrevem o sistema; células de código têm blocos , , e , e podem também conter Python. A documentação oficial chama a este par documentação viva: a prosa é a receita, e correr uma célula LoT implanta esse passo no broker ligado.
O repositório público LOT-Samples organiza-se do mesmo modo. Os guias ficam ao lado da fonte carregável — heartbeats, encaminhadores de tópicos, rotas industriais (Modbus, Siemens S7, OPC UA), bases de dados e sistemas completos que juntam uma acção, um modelo e uma regra. O que se carrega é o notebook — ou o ficheiro correspondente; os exemplos são verificados contra o analisador do broker. Notebooks prontos para fábricas e dispositivos publicam-se também em templates.coreflux.org.
Vaz argumentou que um sistema tem de ser descrito, e não só executado, e que o notebook é uma procura dessa forma: um artefacto em que a explicação e a definição que corre se lêem juntas. Apresenta essa procura como trabalho inacabado, para além de qualquer empresa — documentação e código como uma só conta do que o sistema é.
Ferramentas Os LoT Notebooks editam-se e implantam-se com uma extensão do Visual Studio Code (LoT Notebooks, da Coreflux). Correr uma célula de código envia a definição ao broker; um visualizador de dados pode subscrever tópicos para acompanhar o resultado. As definições também se podem publicar no tópico de comando .
Ver também MQTT Internet das Coisas Linguagem de domínio específico Padrão publicador-assinante SQL Node-RED Noam Chomsky Gramática gerativa Universidade do Porto Project Jupyter Protocol Buffers JSON
Referências
Ligações externas Introduction to LoT — documentação oficial da linguagem LOT-Samples — exemplos comunitários de acções, modelos, rotas e regras Coreflux LoT Templates — notebooks LoT prontos a correr Language of Things — página do produto From 8051 to LoT — Hugo Vaz sobre abstracção, LoT e modelos Hugo Vaz — sítio pessoal do criador da linguagem Ana Maria Brito — perfil CIÊNCIAVITAE
Categoria:Linguagens de programação de domínio específico Categoria:Linguagens de programação declarativas Categoria:Internet das coisas Categoria:Middleware Categoria:Software da década de 2020